summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-09-27 17:48:33 +0000
committerKitware Robot <kwrobot@kitware.com>2021-09-27 13:48:57 -0400
commita21d5455c027b7edb0c97893be4d5b286032310c (patch)
treecf5bc2440400000340148afc3f2fdd2db174e43c
parent16b54616ca5f3bb9d25d809c356475ecbad59044 (diff)
parent895fa3433f50b7011fa475a4696dc06fe072aa25 (diff)
downloadcmake-a21d5455c027b7edb0c97893be4d5b286032310c.tar.gz
Merge topic 'autogen-dep-on-imported-implib-only-target'
895fa3433f cmQtAutoGenInitializer: support IMPLIB-only imported targets 354c1f5628 Tests/RunCMake/Autogen: test CMP0111 behavior Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !6558
-rw-r--r--Source/cmQtAutoGenInitializer.cxx11
-rw-r--r--Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake12
-rw-r--r--Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake13
-rw-r--r--Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake14
-rw-r--r--Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake32
-rw-r--r--Tests/RunCMake/Autogen/RunCMakeTest.cmake4
6 files changed, 85 insertions, 1 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index 33ce314463..c49cafee51 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -1309,7 +1309,16 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
// Add additional autogen target dependencies to
// '_autogen_timestamp_deps'.
for (const cmTarget* t : this->AutogenTarget.DependTargets) {
- dependencies.push_back(t->GetName());
+ std::string depname = t->GetName();
+ if (t->IsImported()) {
+ auto ttype = t->GetType();
+ if (ttype == cmStateEnums::TargetType::STATIC_LIBRARY ||
+ ttype == cmStateEnums::TargetType::SHARED_LIBRARY ||
+ ttype == cmStateEnums::TargetType::UNKNOWN_LIBRARY) {
+ depname = cmStrCat("$<TARGET_LINKER_FILE:", t->GetName(), ">");
+ }
+ }
+ dependencies.push_back(depname);
}
cmTarget* timestampTarget = this->LocalGen->AddUtilityCommand(
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake b/Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake
new file mode 100644
index 0000000000..331da64537
--- /dev/null
+++ b/Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake
@@ -0,0 +1,12 @@
+include("${CMAKE_CURRENT_LIST_DIR}/CMP0111-imported-target-prelude.cmake")
+
+set_location(executable LOCATION "${CMAKE_CURRENT_BINARY_DIR}/executable${CMAKE_EXECUTABLE_SUFFIX}")
+
+set_location(shared LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}shared${CMAKE_SHARED_LIBRARY_SUFFIX}")
+if (CMAKE_IMPORT_LIBRARY_SUFFIX)
+ set_location(shared IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}shared${CMAKE_IMPORT_LIBRARY_SUFFIX}")
+endif ()
+
+set_location(static LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}static${CMAKE_STATIC_LIBRARY_SUFFIX}")
+set_location(unknown LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}unknown${CMAKE_IMPORT_LIBRARY_SUFFIX}")
+set_location(module LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_MODULE_PREFIX}module${CMAKE_SHARED_MODULE_SUFFIX}")
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake b/Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake
new file mode 100644
index 0000000000..8640fdc532
--- /dev/null
+++ b/Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake
@@ -0,0 +1,13 @@
+include("${CMAKE_CURRENT_LIST_DIR}/CMP0111-imported-target-prelude.cmake")
+
+set_location(executable LOCATION "${CMAKE_CURRENT_BINARY_DIR}/executable${CMAKE_EXECUTABLE_SUFFIX}")
+
+if (CMAKE_IMPORT_LIBRARY_SUFFIX)
+ set_location(shared IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}shared${CMAKE_IMPORT_LIBRARY_SUFFIX}")
+else ()
+ set_location(shared LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}shared${CMAKE_SHARED_LIBRARY_SUFFIX}")
+endif ()
+
+set_location(static LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}static${CMAKE_STATIC_LIBRARY_SUFFIX}")
+set_location(unknown LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}unknown${CMAKE_STATIC_LIBRARY_SUFFIX}")
+set_location(module LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_MODULE_PREFIX}module${CMAKE_SHARED_MODULE_SUFFIX}")
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake b/Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake
new file mode 100644
index 0000000000..e1318c27e8
--- /dev/null
+++ b/Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake
@@ -0,0 +1,14 @@
+include("${CMAKE_CURRENT_LIST_DIR}/CMP0111-imported-target-prelude.cmake")
+
+set_location(executable LOCATION "${CMAKE_CURRENT_BINARY_DIR}/executable${CMAKE_EXECUTABLE_SUFFIX}")
+
+set_location(shared LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}shared${CMAKE_SHARED_LIBRARY_SUFFIX}")
+if (CMAKE_IMPORT_LIBRARY_SUFFIX)
+ set_location(shared IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}shared${CMAKE_IMPORT_LIBRARY_SUFFIX}")
+endif ()
+
+set_location(static LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}static${CMAKE_IMPORT_LIBRARY_SUFFIX}")
+set_location(unknown LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}unknown${CMAKE_IMPORT_LIBRARY_SUFFIX}")
+set_location(module LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_MODULE_PREFIX}module${CMAKE_SHARED_MODULE_SUFFIX}")
+
+set_location(interface LIBNAME "interface")
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake b/Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake
new file mode 100644
index 0000000000..8fa6041b96
--- /dev/null
+++ b/Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake
@@ -0,0 +1,32 @@
+enable_language(CXX)
+
+find_package(Qt5 REQUIRED COMPONENTS Core)
+
+# Detect `-NOTFOUND` libraries at generate time.
+cmake_policy(SET CMP0111 NEW)
+
+add_executable(imported::executable IMPORTED)
+add_library(imported::shared SHARED IMPORTED)
+add_library(imported::static STATIC IMPORTED)
+add_library(imported::unknown UNKNOWN IMPORTED)
+add_library(imported::interface INTERFACE IMPORTED)
+add_library(imported::module MODULE IMPORTED)
+
+function (set_location target name loc)
+ set_property(TARGET "imported::${target}" PROPERTY
+ "IMPORTED_${name}" "${loc}")
+endfunction ()
+
+set(CMAKE_AUTOMOC 1)
+
+add_library(automoc
+ empty.cpp)
+target_link_libraries(automoc
+ PRIVATE
+ imported::shared
+ imported::static
+ imported::unknown
+ imported::interface)
+add_dependencies(automoc
+ imported::executable
+ imported::module)
diff --git a/Tests/RunCMake/Autogen/RunCMakeTest.cmake b/Tests/RunCMake/Autogen/RunCMakeTest.cmake
index a31b67cd7d..bbcbd5ed8f 100644
--- a/Tests/RunCMake/Autogen/RunCMakeTest.cmake
+++ b/Tests/RunCMake/Autogen/RunCMakeTest.cmake
@@ -5,4 +5,8 @@ if (with_qt5)
run_cmake(QtInFunction)
run_cmake(QtInFunctionNested)
run_cmake(QtInFunctionProperty)
+
+ run_cmake(CMP0111-imported-target-full)
+ run_cmake(CMP0111-imported-target-libname)
+ run_cmake(CMP0111-imported-target-implib-only)
endif ()