mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 19:30:13 -06:00
Merge topic 'imported-interface-no-system'
22beb07fHelp: Clarify documentation of NO_SYSTEM_FROM_IMPORTED2de0e0fdDo not initialize NO_SYSTEM_FROM_IMPORTED on INTERFACE libraries Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !1386
This commit is contained in:
@@ -687,7 +687,8 @@ property are treated as ``SYSTEM`` include directories, as if they were
|
||||
listed in the :prop_tgt:`INTERFACE_SYSTEM_INCLUDE_DIRECTORIES` of the
|
||||
dependency. This can result in omission of compiler warnings for headers
|
||||
found in those directories. This behavior for :ref:`imported targets` may
|
||||
be controlled with the :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target property.
|
||||
be controlled by setting the :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target
|
||||
property on the *consumers* of imported targets.
|
||||
|
||||
If a binary target is linked transitively to a Mac OX framework, the
|
||||
``Headers`` directory of the framework is also treated as a usage requirement.
|
||||
@@ -970,7 +971,6 @@ are:
|
||||
* ``EXPORT_NAME``
|
||||
* ``IMPORTED``
|
||||
* ``NAME``
|
||||
* ``NO_SYSTEM_FROM_IMPORTED``
|
||||
* Properties matching ``IMPORTED_LIBNAME_*``
|
||||
* Properties matching ``MAP_IMPORTED_CONFIG_*``
|
||||
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
NO_SYSTEM_FROM_IMPORTED
|
||||
-----------------------
|
||||
|
||||
Do not treat includes from IMPORTED target interfaces as SYSTEM.
|
||||
Do not treat include directories from the interfaces of consumed
|
||||
:ref:`imported targets` as ``SYSTEM``.
|
||||
|
||||
The contents of the INTERFACE_INCLUDE_DIRECTORIES of IMPORTED targets
|
||||
are treated as SYSTEM includes by default. If this property is
|
||||
enabled, the contents of the INTERFACE_INCLUDE_DIRECTORIES of IMPORTED
|
||||
targets are not treated as system includes. This property is
|
||||
initialized by the value of the variable CMAKE_NO_SYSTEM_FROM_IMPORTED
|
||||
if it is set when a target is created.
|
||||
The contents of the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target property
|
||||
of imported targets are treated as ``SYSTEM`` includes by default. If this
|
||||
property is enabled on a target, compilation of sources in that target will
|
||||
not treat the contents of the ``INTERFACE_INCLUDE_DIRECTORIES`` of consumed
|
||||
imported targets as system includes.
|
||||
|
||||
This property is initialized by the value of the
|
||||
:variable:`CMAKE_NO_SYSTEM_FROM_IMPORTED` variable if it is set when a target
|
||||
is created.
|
||||
|
||||
@@ -256,6 +256,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
|
||||
this->SetPropertyDefault("WIN32_EXECUTABLE", nullptr);
|
||||
this->SetPropertyDefault("MACOSX_BUNDLE", nullptr);
|
||||
this->SetPropertyDefault("MACOSX_RPATH", nullptr);
|
||||
this->SetPropertyDefault("NO_SYSTEM_FROM_IMPORTED", nullptr);
|
||||
this->SetPropertyDefault("BUILD_WITH_INSTALL_NAME_DIR", nullptr);
|
||||
this->SetPropertyDefault("C_CLANG_TIDY", nullptr);
|
||||
this->SetPropertyDefault("C_COMPILER_LAUNCHER", nullptr);
|
||||
@@ -282,10 +283,6 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
|
||||
this->SetPropertyDefault("LINK_SEARCH_END_STATIC", nullptr);
|
||||
}
|
||||
|
||||
if (this->GetType() != cmStateEnums::UTILITY) {
|
||||
this->SetPropertyDefault("NO_SYSTEM_FROM_IMPORTED", nullptr);
|
||||
}
|
||||
|
||||
// Collect the set of configuration types.
|
||||
std::vector<std::string> configNames;
|
||||
mf->GetConfigurations(configNames);
|
||||
|
||||
@@ -66,12 +66,19 @@ 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;
|
||||
}
|
||||
|
||||
// This property should not be allowed but was incorrectly added in
|
||||
// CMake 3.8. We can't remove it from the whitelist without breaking
|
||||
// projects that try to set it. One day we could warn about this, but
|
||||
// for now silently accept it.
|
||||
if (prop == "NO_SYSTEM_FROM_IMPORTED") {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,6 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user