diff options
author | Brad King <brad.king@kitware.com> | 2014-02-03 16:11:11 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2014-02-03 16:11:11 (GMT) |
commit | cdadec9f246acb91f1e11e4e8627e2097985d3b2 (patch) | |
tree | 02f7cd30a7898fd413bf89b9ca89dea1ce47e23c /Tests | |
parent | 7ab204509e04df18cb50fdb77deb48b5521a8d63 (diff) | |
parent | efdcebddbdc47e91254461da40cec2be869a0940 (diff) | |
download | CMake-cdadec9f246acb91f1e11e4e8627e2097985d3b2.zip CMake-cdadec9f246acb91f1e11e4e8627e2097985d3b2.tar.gz CMake-cdadec9f246acb91f1e11e4e8627e2097985d3b2.tar.bz2 |
Merge topic 'fix-visibility-inlines-hidden'
efdcebdd VisibilityInlinesHidden: only apply -fvisibility-inlines-hidden to C++ sources
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/CMakeLists.txt | 23 | ||||
-rw-r--r-- | Tests/VisibilityInlinesHidden/CMakeLists.txt | 14 | ||||
-rw-r--r-- | Tests/VisibilityInlinesHidden/bar.c | 1 | ||||
-rw-r--r-- | Tests/VisibilityInlinesHidden/foo.cpp | 11 | ||||
-rw-r--r-- | Tests/VisibilityInlinesHidden/verify.cmake | 14 |
5 files changed, 63 insertions, 0 deletions
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index a79111a..2807f97 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -400,6 +400,29 @@ if(BUILD_TESTING) ADD_TEST_MACRO(PositionIndependentTargets PositionIndependentTargets) endif() + if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") AND + (NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 4.2) AND + (CMAKE_SYSTEM_NAME MATCHES "Linux")) + + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag( + -fvisibility-inlines-hidden run_inlines_hidden_test) + endif() + + if(run_inlines_hidden_test) + add_test(VisibilityInlinesHidden ${CMAKE_CTEST_COMMAND} + --build-and-test + "${CMake_SOURCE_DIR}/Tests/VisibilityInlinesHidden" + "${CMake_BINARY_DIR}/Tests/VisibilityInlinesHidden" + ${build_generator_args} + --build-project VisibilityInlinesHidden + --build-options ${build_options} + ) + list(APPEND TEST_BUILD_DIRS + "${CMake_BINARY_DIR}/Tests/VisibilityInlinesHidden" + ) + endif() + add_test(LinkFlags-prepare ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} --build-and-test diff --git a/Tests/VisibilityInlinesHidden/CMakeLists.txt b/Tests/VisibilityInlinesHidden/CMakeLists.txt new file mode 100644 index 0000000..8ebc39c --- /dev/null +++ b/Tests/VisibilityInlinesHidden/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 2.8) + +project(VisibilityInlinesHidden) + +add_library(inlines_hidden SHARED foo.cpp bar.c) +set_property(TARGET inlines_hidden PROPERTY VISIBILITY_INLINES_HIDDEN ON) +target_compile_options(inlines_hidden PRIVATE -Werror) + +add_custom_command(TARGET inlines_hidden POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DCMAKE_NM=${CMAKE_NM} + -DTEST_LIBRARY_PATH=$<TARGET_FILE:inlines_hidden> + -P ${CMAKE_CURRENT_SOURCE_DIR}/verify.cmake +) diff --git a/Tests/VisibilityInlinesHidden/bar.c b/Tests/VisibilityInlinesHidden/bar.c new file mode 100644 index 0000000..e425999 --- /dev/null +++ b/Tests/VisibilityInlinesHidden/bar.c @@ -0,0 +1 @@ +void bar() {} diff --git a/Tests/VisibilityInlinesHidden/foo.cpp b/Tests/VisibilityInlinesHidden/foo.cpp new file mode 100644 index 0000000..2b66b69 --- /dev/null +++ b/Tests/VisibilityInlinesHidden/foo.cpp @@ -0,0 +1,11 @@ +class Foo +{ +public: + void bar() {} +}; + +void baz() +{ + Foo foo; + foo.bar(); +} diff --git a/Tests/VisibilityInlinesHidden/verify.cmake b/Tests/VisibilityInlinesHidden/verify.cmake new file mode 100644 index 0000000..80dd13c --- /dev/null +++ b/Tests/VisibilityInlinesHidden/verify.cmake @@ -0,0 +1,14 @@ +execute_process(COMMAND ${CMAKE_NM} -D ${TEST_LIBRARY_PATH} + RESULT_VARIABLE RESULT + OUTPUT_VARIABLE OUTPUT + ERROR_VARIABLE ERROR +) + +if(NOT "${RESULT}" STREQUAL "0") + message(FATAL_ERROR "nm failed [${RESULT}] [${OUTPUT}] [${ERROR}]") +endif() + +if(${OUTPUT} MATCHES "Foo[^\\n]*bar") + message(FATAL_ERROR + "Found Foo::bar() which should have been hidden [${OUTPUT}]") +endif() |