From 680a3c63bb3a6485a1774a457f3f2a63ad96b728 Mon Sep 17 00:00:00 2001 From: Avraham Shukron Date: Fri, 19 Jul 2019 22:50:59 +0300 Subject: 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 --- Source/cmTargetPropCommandBase.cxx | 3 ++- .../add_library/UNKNOWNwithOnlyObjectSources-stderr.txt | 2 +- Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake | 1 + .../target_compile_definitions/unknown_imported_target.cmake | 11 +++++++++++ 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 Tests/RunCMake/target_compile_definitions/unknown_imported_target.cmake diff --git a/Source/cmTargetPropCommandBase.cxx b/Source/cmTargetPropCommandBase.cxx index 2f93e39..3aa845c 100644 --- a/Source/cmTargetPropCommandBase.cxx +++ b/Source/cmTargetPropCommandBase.cxx @@ -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; } diff --git a/Tests/RunCMake/add_library/UNKNOWNwithOnlyObjectSources-stderr.txt b/Tests/RunCMake/add_library/UNKNOWNwithOnlyObjectSources-stderr.txt index e332281..838992b 100644 --- a/Tests/RunCMake/add_library/UNKNOWNwithOnlyObjectSources-stderr.txt +++ b/Tests/RunCMake/add_library/UNKNOWNwithOnlyObjectSources-stderr.txt @@ -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\)$ diff --git a/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake b/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake index b67c598..a419cc9 100644 --- a/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake +++ b/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake @@ -1,3 +1,4 @@ include(RunCMake) run_cmake(empty_keyword_args) +run_cmake(unknown_imported_target) diff --git a/Tests/RunCMake/target_compile_definitions/unknown_imported_target.cmake b/Tests/RunCMake/target_compile_definitions/unknown_imported_target.cmake new file mode 100644 index 0000000..4ae1c0d --- /dev/null +++ b/Tests/RunCMake/target_compile_definitions/unknown_imported_target.cmake @@ -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() -- cgit v0.12