summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-11-21 15:42:24 (GMT)
committerBrad King <brad.king@kitware.com>2016-11-21 16:42:01 (GMT)
commit460052516fdd06a2c0c765359f4d92006e67283b (patch)
tree2513452bbe0c92c0b81b9742cc1272b3e7c4f91a
parentacde2c4a5389bfe5b1af697a02c160060db7d6e8 (diff)
downloadCMake-460052516fdd06a2c0c765359f4d92006e67283b.zip
CMake-460052516fdd06a2c0c765359f4d92006e67283b.tar.gz
CMake-460052516fdd06a2c0c765359f4d92006e67283b.tar.bz2
Allow NO_SYSTEM_FROM_IMPORTED on imported INTERFACE libraries
Imported INTERFACE libraries can specify include directories via `INTERFACE_INCLUDE_DIRECTORIES` so the default behavior of treating them as system include directories applies. Allow users to turn this off by setting `NO_SYSTEM_FROM_IMPORTED` on such targets. Closes: #16443
-rw-r--r--Help/manual/cmake-buildsystem.7.rst1
-rw-r--r--Help/release/dev/imported-interface-no-system.rst5
-rw-r--r--Source/cmTarget.cxx5
-rw-r--r--Source/cmTargetPropertyComputer.cxx1
-rw-r--r--Tests/InterfaceLibrary/CMakeLists.txt1
5 files changed, 12 insertions, 1 deletions
diff --git a/Help/manual/cmake-buildsystem.7.rst b/Help/manual/cmake-buildsystem.7.rst
index 89b010d..2e6a803 100644
--- a/Help/manual/cmake-buildsystem.7.rst
+++ b/Help/manual/cmake-buildsystem.7.rst
@@ -964,6 +964,7 @@ are:
* ``EXPORT_NAME``
* ``IMPORTED``
* ``NAME``
+* ``NO_SYSTEM_FROM_IMPORTED``
* Properties matching ``IMPORTED_LIBNAME_*``
* Properties matching ``MAP_IMPORTED_CONFIG_*``
diff --git a/Help/release/dev/imported-interface-no-system.rst b/Help/release/dev/imported-interface-no-system.rst
new file mode 100644
index 0000000..3a727cc
--- /dev/null
+++ b/Help/release/dev/imported-interface-no-system.rst
@@ -0,0 +1,5 @@
+imported-interface-no-system
+----------------------------
+
+* The :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target property is now supported
+ on :ref:`Imported <Imported Targets>` :ref:`Interface Libraries`.
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 54bdfe6..f5d9e61 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -253,7 +253,6 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
this->SetPropertyDefault("WIN32_EXECUTABLE", CM_NULLPTR);
this->SetPropertyDefault("MACOSX_BUNDLE", CM_NULLPTR);
this->SetPropertyDefault("MACOSX_RPATH", CM_NULLPTR);
- this->SetPropertyDefault("NO_SYSTEM_FROM_IMPORTED", CM_NULLPTR);
this->SetPropertyDefault("C_CLANG_TIDY", CM_NULLPTR);
this->SetPropertyDefault("C_COMPILER_LAUNCHER", CM_NULLPTR);
this->SetPropertyDefault("C_INCLUDE_WHAT_YOU_USE", CM_NULLPTR);
@@ -271,6 +270,10 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
this->SetPropertyDefault("LINK_SEARCH_END_STATIC", CM_NULLPTR);
}
+ if (this->GetType() != cmStateEnums::UTILITY) {
+ this->SetPropertyDefault("NO_SYSTEM_FROM_IMPORTED", CM_NULLPTR);
+ }
+
// Collect the set of configuration types.
std::vector<std::string> configNames;
mf->GetConfigurations(configNames);
diff --git a/Source/cmTargetPropertyComputer.cxx b/Source/cmTargetPropertyComputer.cxx
index 3a9bddb..a57bc5a 100644
--- a/Source/cmTargetPropertyComputer.cxx
+++ b/Source/cmTargetPropertyComputer.cxx
@@ -66,6 +66,7 @@ bool cmTargetPropertyComputer::WhiteListedInterfaceProperty(
}
if (prop == "IMPORTED_CONFIGURATIONS" || prop == "IMPORTED_LIBNAME" ||
+ prop == "NO_SYSTEM_FROM_IMPORTED" ||
cmHasLiteralPrefix(prop, "IMPORTED_LIBNAME_") ||
cmHasLiteralPrefix(prop, "MAP_IMPORTED_CONFIG_")) {
return true;
diff --git a/Tests/InterfaceLibrary/CMakeLists.txt b/Tests/InterfaceLibrary/CMakeLists.txt
index 3db210a..33c4b90 100644
--- a/Tests/InterfaceLibrary/CMakeLists.txt
+++ b/Tests/InterfaceLibrary/CMakeLists.txt
@@ -64,6 +64,7 @@ target_link_libraries(iface_whitelist INTERFACE $<$<BOOL:$<TARGET_PROPERTY:CUSTO
add_executable(exec_whitelist dummy.cpp)
target_link_libraries(exec_whitelist iface_whitelist)
+set(CMAKE_NO_SYSTEM_FROM_IMPORTED 1)
add_library(iface_imported INTERFACE IMPORTED)
set_property(TARGET iface_imported PROPERTY
INTERFACE_COMPILE_DEFINITIONS