target_*: Allow setting INTERFACE properties of UNKNOWN IMPORTED targets

Extend the change made by commit fe4b25ec2f (Teach target_* commands to
set INTERFACE properties of IMPORTED targets, 2017-09-18,
v3.11.0-rc1~433^2~2) to work with imported targets of type `UNKNOWN`.

Fixes: #19434
This commit is contained in:
Avraham Shukron 2019-07-19 22:50:59 +03:00 committed by Brad King
parent 62b5d1e4ad
commit 680a3c63bb
4 changed files with 15 additions and 2 deletions

View File

@ -37,7 +37,8 @@ bool cmTargetPropCommandBase::HandleArguments(
(this->Target->GetType() != cmStateEnums::SHARED_LIBRARY) &&
(this->Target->GetType() != cmStateEnums::MODULE_LIBRARY) &&
(this->Target->GetType() != cmStateEnums::OBJECT_LIBRARY) &&
(this->Target->GetType() != cmStateEnums::INTERFACE_LIBRARY)) {
(this->Target->GetType() != cmStateEnums::INTERFACE_LIBRARY) &&
(this->Target->GetType() != cmStateEnums::UNKNOWN_LIBRARY)) {
this->SetError("called with non-compilable target type");
return false;
}

View File

@ -1,4 +1,4 @@
^CMake Error at UNKNOWNwithOnlyObjectSources.cmake:[0-9]+ \(target_sources\):
target_sources called with non-compilable target type
target_sources may only set INTERFACE properties on IMPORTED targets
Call Stack \(most recent call first\):
CMakeLists.txt:[0-9]+ \(include\)$

View File

@ -1,3 +1,4 @@
include(RunCMake)
run_cmake(empty_keyword_args)
run_cmake(unknown_imported_target)

View File

@ -0,0 +1,11 @@
# Test that target_compile_definitions works on UNKNOWN IMPORTED target
add_library(imported UNKNOWN IMPORTED)
target_compile_definitions(imported INTERFACE FOO)
get_target_property(IMPORTED_INTERFACE_CDS imported INTERFACE_COMPILE_DEFINITIONS)
if (NOT FOO IN_LIST IMPORTED_INTERFACE_CDS)
message(
FATAL_ERROR "FOO should be in INTERFACE_COMPILE_DEFINITIONS.\n"
"Actual INTERFACE_COMPILE_DEFINITIONS: " ${IMPORTED_INTERFACE_CDS})
endif()