diff options
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/CMP0063-Common.cmake | 7 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/CMP0063-NEW.cmake | 8 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/CMP0063-OLD.cmake | 8 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/CMP0063-WARN-no.cmake | 8 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes-stderr.txt | 50 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes.cmake | 8 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Tests/RunCMake/VisibilityPreset/RunCMakeTest.cmake | 4 | ||||
-rw-r--r-- | Tests/Visibility/CMakeLists.txt | 67 | ||||
-rw-r--r-- | Tests/Visibility/hidden.c | 4 | ||||
-rw-r--r-- | Tests/Visibility/shared.c | 3 | ||||
-rw-r--r-- | Tests/Visibility/shared.cpp | 8 | ||||
-rw-r--r-- | Tests/Visibility/verify.cmake | 4 |
14 files changed, 172 insertions, 10 deletions
diff --git a/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt b/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt index 1da1623..d0aa995 100644 --- a/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt +++ b/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt @@ -18,6 +18,7 @@ \* CMP0046 \* CMP0052 \* CMP0060 + \* CMP0063 Call Stack \(most recent call first\): CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/VisibilityPreset/CMP0063-Common.cmake b/Tests/RunCMake/VisibilityPreset/CMP0063-Common.cmake new file mode 100644 index 0000000..afea20b --- /dev/null +++ b/Tests/RunCMake/VisibilityPreset/CMP0063-Common.cmake @@ -0,0 +1,7 @@ +set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) +add_executable(myexe lib.cpp) +add_library(mystatic STATIC lib.cpp) +add_library(myshared SHARED lib.cpp) +add_library(mymodule MODULE lib.cpp) +add_library(myobject OBJECT lib.cpp) diff --git a/Tests/RunCMake/VisibilityPreset/CMP0063-NEW.cmake b/Tests/RunCMake/VisibilityPreset/CMP0063-NEW.cmake new file mode 100644 index 0000000..9d1ee40 --- /dev/null +++ b/Tests/RunCMake/VisibilityPreset/CMP0063-NEW.cmake @@ -0,0 +1,8 @@ +cmake_policy(SET CMP0063 NEW) +enable_language(CXX) + +# Ensure CMake would warn even if toolchain does not really have these flags. +set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden") +set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY "-fvisibility=") + +include(CMP0063-Common.cmake) diff --git a/Tests/RunCMake/VisibilityPreset/CMP0063-OLD.cmake b/Tests/RunCMake/VisibilityPreset/CMP0063-OLD.cmake new file mode 100644 index 0000000..8378209 --- /dev/null +++ b/Tests/RunCMake/VisibilityPreset/CMP0063-OLD.cmake @@ -0,0 +1,8 @@ +cmake_policy(SET CMP0063 OLD) +enable_language(CXX) + +# Ensure CMake would warn even if toolchain does not really have these flags. +set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden") +set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY "-fvisibility=") + +include(CMP0063-Common.cmake) diff --git a/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-no.cmake b/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-no.cmake new file mode 100644 index 0000000..2a9c9e5 --- /dev/null +++ b/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-no.cmake @@ -0,0 +1,8 @@ + +enable_language(CXX) + +# Ensure CMake does not warn even if toolchain really does have these flags. +unset(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN) +unset(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY) + +include(CMP0063-Common.cmake) diff --git a/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes-stderr.txt b/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes-stderr.txt new file mode 100644 index 0000000..59a4b8f --- /dev/null +++ b/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes-stderr.txt @@ -0,0 +1,50 @@ +^CMake Warning \(dev\) at CMP0063-Common.cmake:[0-9]+ \(add_executable\): + Policy CMP0063 is not set: Honor visibility properties for all target + types. Run "cmake --help-policy CMP0063" for policy details. Use the + cmake_policy command to set the policy and suppress this warning. + + Target "myexe" of type "EXECUTABLE" has the following visibility properties + set for CXX: + + CXX_VISIBILITY_PRESET + VISIBILITY_INLINES_HIDDEN + + For compatibility CMake is not honoring them for this target. +Call Stack \(most recent call first\): + CMP0063-WARN-yes.cmake:[0-9]+ \(include\) + CMakeLists.txt:[0-9]+ \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. ++ +CMake Warning \(dev\) at CMP0063-Common.cmake:[0-9]+ \(add_library\): + Policy CMP0063 is not set: Honor visibility properties for all target + types. Run "cmake --help-policy CMP0063" for policy details. Use the + cmake_policy command to set the policy and suppress this warning. + + Target "myobject" of type "OBJECT_LIBRARY" has the following visibility + properties set for CXX: + + CXX_VISIBILITY_PRESET + VISIBILITY_INLINES_HIDDEN + + For compatibility CMake is not honoring them for this target. +Call Stack \(most recent call first\): + CMP0063-WARN-yes.cmake:[0-9]+ \(include\) + CMakeLists.txt:[0-9]+ \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. ++ +CMake Warning \(dev\) at CMP0063-Common.cmake:[0-9]+ \(add_library\): + Policy CMP0063 is not set: Honor visibility properties for all target + types. Run "cmake --help-policy CMP0063" for policy details. Use the + cmake_policy command to set the policy and suppress this warning. + + Target "mystatic" of type "STATIC_LIBRARY" has the following visibility + properties set for CXX: + + CXX_VISIBILITY_PRESET + VISIBILITY_INLINES_HIDDEN + + For compatibility CMake is not honoring them for this target. +Call Stack \(most recent call first\): + CMP0063-WARN-yes.cmake:[0-9]+ \(include\) + CMakeLists.txt:[0-9]+ \(include\) +This warning is for project developers. Use -Wno-dev to suppress it.$ diff --git a/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes.cmake b/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes.cmake new file mode 100644 index 0000000..3388e4d --- /dev/null +++ b/Tests/RunCMake/VisibilityPreset/CMP0063-WARN-yes.cmake @@ -0,0 +1,8 @@ + +enable_language(CXX) + +# Ensure CMake warns even if toolchain does not really have these flags. +set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden") +set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY "-fvisibility=") + +include(CMP0063-Common.cmake) diff --git a/Tests/RunCMake/VisibilityPreset/CMakeLists.txt b/Tests/RunCMake/VisibilityPreset/CMakeLists.txt index 12cd3c7..18dfd26 100644 --- a/Tests/RunCMake/VisibilityPreset/CMakeLists.txt +++ b/Tests/RunCMake/VisibilityPreset/CMakeLists.txt @@ -1,3 +1,3 @@ -cmake_minimum_required(VERSION 2.8.4) +cmake_minimum_required(VERSION 3.2) project(${RunCMake_TEST} NONE) include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/VisibilityPreset/RunCMakeTest.cmake b/Tests/RunCMake/VisibilityPreset/RunCMakeTest.cmake index 2d78832..c7eb808 100644 --- a/Tests/RunCMake/VisibilityPreset/RunCMakeTest.cmake +++ b/Tests/RunCMake/VisibilityPreset/RunCMakeTest.cmake @@ -1,3 +1,7 @@ include(RunCMake) run_cmake(PropertyTypo) +run_cmake(CMP0063-OLD) +run_cmake(CMP0063-WARN-yes) +run_cmake(CMP0063-WARN-no) +run_cmake(CMP0063-NEW) diff --git a/Tests/Visibility/CMakeLists.txt b/Tests/Visibility/CMakeLists.txt index df75630..9498ca6 100644 --- a/Tests/Visibility/CMakeLists.txt +++ b/Tests/Visibility/CMakeLists.txt @@ -1,13 +1,66 @@ cmake_minimum_required(VERSION 3.2) +cmake_policy(SET CMP0063 NEW) + project(Visibility) -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_library(hidden1 SHARED hidden.c) +set_property(TARGET hidden1 PROPERTY C_VISIBILITY_PRESET hidden) + +add_library(hidden_object OBJECT hidden.c) +set_property(TARGET hidden_object PROPERTY C_VISIBILITY_PRESET hidden) +set_property(TARGET hidden_object PROPERTY POSITION_INDEPENDENT_CODE ON) + +add_library(hidden_static STATIC hidden.c) +set_property(TARGET hidden_static PROPERTY C_VISIBILITY_PRESET hidden) +set_property(TARGET hidden_static PROPERTY POSITION_INDEPENDENT_CODE ON) + +add_library(hidden2 SHARED $<TARGET_OBJECTS:hidden_object> shared.c) + +add_library(hidden3 SHARED shared.c) +target_link_libraries(hidden3 hidden_static) + +foreach(t + hidden1 + hidden2 + hidden3 + ) + add_custom_command(TARGET ${t} POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DCMAKE_NM=${CMAKE_NM} + -DTEST_LIBRARY_PATH=$<TARGET_FILE:${t}> + -P ${CMAKE_CURRENT_SOURCE_DIR}/verify.cmake + ) +endforeach() + + +add_library(inlines_hidden1 SHARED foo.cpp bar.c) +set_property(TARGET inlines_hidden1 PROPERTY VISIBILITY_INLINES_HIDDEN ON) +target_compile_options(inlines_hidden1 PRIVATE -Werror) + +add_library(inlines_hidden_object OBJECT foo.cpp bar.c) +set_property(TARGET inlines_hidden_object PROPERTY VISIBILITY_INLINES_HIDDEN ON) +set_property(TARGET inlines_hidden_object PROPERTY POSITION_INDEPENDENT_CODE ON) +target_compile_options(inlines_hidden_object PRIVATE -Werror) + +add_library(inlines_hidden_static STATIC foo.cpp bar.c) +set_property(TARGET inlines_hidden_static PROPERTY VISIBILITY_INLINES_HIDDEN ON) +set_property(TARGET inlines_hidden_static PROPERTY POSITION_INDEPENDENT_CODE ON) +target_compile_options(inlines_hidden_static PRIVATE -Werror) + +add_library(inlines_hidden2 SHARED $<TARGET_OBJECTS:inlines_hidden_object> shared.cpp) + +add_library(inlines_hidden3 SHARED shared.cpp) +target_link_libraries(inlines_hidden3 inlines_hidden_static) -add_custom_command(TARGET inlines_hidden POST_BUILD - COMMAND ${CMAKE_COMMAND} +foreach(t + inlines_hidden1 + inlines_hidden2 + inlines_hidden3 + ) + add_custom_command(TARGET ${t} POST_BUILD + COMMAND ${CMAKE_COMMAND} -DCMAKE_NM=${CMAKE_NM} - -DTEST_LIBRARY_PATH=$<TARGET_FILE:inlines_hidden> + -DTEST_LIBRARY_PATH=$<TARGET_FILE:${t}> -P ${CMAKE_CURRENT_SOURCE_DIR}/verify.cmake -) + ) +endforeach() diff --git a/Tests/Visibility/hidden.c b/Tests/Visibility/hidden.c new file mode 100644 index 0000000..6e97343 --- /dev/null +++ b/Tests/Visibility/hidden.c @@ -0,0 +1,4 @@ +int hidden_function(void) { return 0; } + +__attribute__((visibility("default"))) +int not_hidden(void) { return hidden_function(); } diff --git a/Tests/Visibility/shared.c b/Tests/Visibility/shared.c new file mode 100644 index 0000000..bb94976 --- /dev/null +++ b/Tests/Visibility/shared.c @@ -0,0 +1,3 @@ +extern int not_hidden(void); + +int shared(void) { return not_hidden(); } diff --git a/Tests/Visibility/shared.cpp b/Tests/Visibility/shared.cpp new file mode 100644 index 0000000..4897ff8 --- /dev/null +++ b/Tests/Visibility/shared.cpp @@ -0,0 +1,8 @@ +extern "C" int bar(void); +void baz(); + +int shared() +{ + baz(); + return bar(); +} diff --git a/Tests/Visibility/verify.cmake b/Tests/Visibility/verify.cmake index 80dd13c..3b2028c 100644 --- a/Tests/Visibility/verify.cmake +++ b/Tests/Visibility/verify.cmake @@ -8,7 +8,7 @@ if(NOT "${RESULT}" STREQUAL "0") message(FATAL_ERROR "nm failed [${RESULT}] [${OUTPUT}] [${ERROR}]") endif() -if(${OUTPUT} MATCHES "Foo[^\\n]*bar") +if(${OUTPUT} MATCHES "(Foo[^\\n]*bar|hidden_function)") message(FATAL_ERROR - "Found Foo::bar() which should have been hidden [${OUTPUT}]") + "Found ${CMAKE_MATCH_1} which should have been hidden [${OUTPUT}]") endif() |