diff options
author | Brad King <brad.king@kitware.com> | 2015-05-22 18:01:44 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-05-26 13:03:16 (GMT) |
commit | 700f1c3b2b379f2af63ba97b93348ff66069a388 (patch) | |
tree | df51c7ca6e8f7bddf9996544abcfb13df806737c /Tests/RunCMake/VisibilityPreset | |
parent | 50de5dbbf5bd9293b26cad674fbdb681df89ac5e (diff) | |
download | CMake-700f1c3b2b379f2af63ba97b93348ff66069a388.zip CMake-700f1c3b2b379f2af63ba97b93348ff66069a388.tar.gz CMake-700f1c3b2b379f2af63ba97b93348ff66069a388.tar.bz2 |
Honor visibility properties for all target types (#15556)
The <LANG>_VISIBILITY_PRESET and VISIBILITY_INLINES_HIDDEN were first
merged in commit v2.8.12~322 (Merge topic 'VISIBILITY_PRESET-property',
2013-06-05) but worked only for shared libraries and executables with
exports. Prior to commit v3.0.0-rc1~581^2 (GenerateExportHeader:
Deprecate add_compiler_export_flags function., 2013-09-02) the
add_compiler_export_flags function was used to add visibility flags to
all targets.
The visibility flags are useful for sources in all target types because
they may be later linked into shared libraries or executables with
exports. Introduce policy CMP0063 to enable them for all target types
while preserving compatibility with existing projects that do not expect
this.
Diffstat (limited to 'Tests/RunCMake/VisibilityPreset')
8 files changed, 94 insertions, 1 deletions
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) |