Преглед на файлове

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 <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !6558
Brad King преди 4 години
родител
ревизия
a21d5455c0

+ 10 - 1
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(

+ 12 - 0
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}")

+ 13 - 0
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}")

+ 14 - 0
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")

+ 32 - 0
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)

+ 4 - 0
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 ()