summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-03-14 15:46:43 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-03-14 15:46:53 (GMT)
commit742af6cff700ec59681969c718341847768b1d5f (patch)
treec938425947c39f3d81a21a0ee51bcf10f3d4d001
parent8f0801caccd768860768ffd358288cdb75a0654f (diff)
parentd2d1763f884c6cefa3bb9be62ff91f84de38d604 (diff)
downloadCMake-742af6cff700ec59681969c718341847768b1d5f.zip
CMake-742af6cff700ec59681969c718341847768b1d5f.tar.gz
CMake-742af6cff700ec59681969c718341847768b1d5f.tar.bz2
Merge topic 'autogen-makefile-depfile' into release-3.29
d2d1763f88 cmQtAutoGenInitializer: De-duplicate autogen/timestamp target depend logic 6193d15556 Autogen: Restore target-ordering dependencies in Makefiles with DEPFILE Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9340
-rw-r--r--Source/cmQtAutoGenInitializer.cxx42
-rw-r--r--Tests/QtAutogen/AutogenTimestampDeps/CMakeLists.txt13
-rw-r--r--Tests/QtAutogen/AutogenTimestampDeps/ext/CMakeLists.txt4
-rw-r--r--Tests/QtAutogen/AutogenTimestampDeps/ext/ext.c4
-rw-r--r--Tests/QtAutogen/AutogenTimestampDeps/src/CMakeLists.txt1
-rw-r--r--Tests/QtAutogen/AutogenTimestampDeps/src/main.cpp3
-rw-r--r--Tests/QtAutogen/Tests.cmake4
7 files changed, 38 insertions, 33 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index 8542206..3d2373d 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -1480,6 +1480,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
}
}
+ cmTarget* timestampTarget = nullptr;
std::vector<std::string> dependencies(
this->AutogenTarget.DependFiles.begin(),
this->AutogenTarget.DependFiles.end());
@@ -1500,36 +1501,12 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
const auto timestampTargetName =
cmStrCat(this->GenTarget->GetName(), "_autogen_timestamp_deps");
- // Add additional autogen target dependencies to
- // '_autogen_timestamp_deps'.
- for (const cmTarget* t : this->AutogenTarget.DependTargets) {
- std::string depname = t->GetName();
- if (t->IsImported()) {
- auto const 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.emplace_back(std::move(depname));
- }
-
auto cc = cm::make_unique<cmCustomCommand>();
cc->SetWorkingDirectory(this->Dir.Work.c_str());
cc->SetDepends(dependencies);
cc->SetEscapeOldStyle(false);
- cmTarget* timestampTarget = this->LocalGen->AddUtilityCommand(
- timestampTargetName, true, std::move(cc));
- auto const isMake =
- this->GlobalGen->GetName().find("Make") != std::string::npos;
- if (this->AutogenTarget.DependOrigin && isMake) {
- for (BT<std::pair<std::string, bool>> const& depName :
- this->GenTarget->GetUtilities()) {
- timestampTarget->AddUtility(depName.Value.first, false,
- this->Makefile);
- }
- }
+ timestampTarget = this->LocalGen->AddUtilityCommand(timestampTargetName,
+ true, std::move(cc));
this->LocalGen->AddGeneratorTarget(
cm::make_unique<cmGeneratorTarget>(timestampTarget, this->LocalGen));
@@ -1619,18 +1596,19 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
this->LocalGen->AddGeneratorTarget(
cm::make_unique<cmGeneratorTarget>(autogenTarget, this->LocalGen));
+ // Order the autogen target(s) just before the original target.
+ cmTarget* orderTarget = timestampTarget ? timestampTarget : autogenTarget;
// Forward origin utilities to autogen target
if (this->AutogenTarget.DependOrigin) {
for (BT<std::pair<std::string, bool>> const& depName :
this->GenTarget->GetUtilities()) {
- autogenTarget->AddUtility(depName.Value.first, false, this->Makefile);
+ orderTarget->AddUtility(depName.Value.first, false, this->Makefile);
}
}
- if (!useDepfile) {
- // Add additional autogen target dependencies to autogen target
- for (cmTarget const* depTarget : this->AutogenTarget.DependTargets) {
- autogenTarget->AddUtility(depTarget->GetName(), false, this->Makefile);
- }
+
+ // Add additional autogen target dependencies to autogen target
+ for (cmTarget const* depTarget : this->AutogenTarget.DependTargets) {
+ orderTarget->AddUtility(depTarget->GetName(), false, this->Makefile);
}
// Set FOLDER property in autogen target
diff --git a/Tests/QtAutogen/AutogenTimestampDeps/CMakeLists.txt b/Tests/QtAutogen/AutogenTimestampDeps/CMakeLists.txt
index 3470a02..04cbde6 100644
--- a/Tests/QtAutogen/AutogenTimestampDeps/CMakeLists.txt
+++ b/Tests/QtAutogen/AutogenTimestampDeps/CMakeLists.txt
@@ -8,4 +8,17 @@ add_custom_target(ProjectInfo
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UpdateProjectInfo.cmake
BYPRODUCTS ${CMAKE_BINARY_DIR}/ProjectInfo.hpp)
+set(ext_lib ${CMAKE_CURRENT_BINARY_DIR}/ext-build/${CMAKE_STATIC_LIBRARY_PREFIX}ext${CMAKE_STATIC_LIBRARY_SUFFIX})
+include(ExternalProject)
+ExternalProject_Add(ext_target
+ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext"
+ BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ext-build"
+ DOWNLOAD_COMMAND ""
+ INSTALL_COMMAND ""
+ BUILD_BYPRODUCTS "${ext_lib}"
+ )
+add_library(ext STATIC IMPORTED)
+set_property(TARGET ext PROPERTY IMPORTED_LOCATION "${ext_lib}")
+add_dependencies(ext ext_target)
+
add_subdirectory(src)
diff --git a/Tests/QtAutogen/AutogenTimestampDeps/ext/CMakeLists.txt b/Tests/QtAutogen/AutogenTimestampDeps/ext/CMakeLists.txt
new file mode 100644
index 0000000..b6f359f
--- /dev/null
+++ b/Tests/QtAutogen/AutogenTimestampDeps/ext/CMakeLists.txt
@@ -0,0 +1,4 @@
+cmake_minimum_required(VERSION 3.28)
+project(Ext C)
+add_library(ext STATIC ext.c)
+set_property(TARGET ext PROPERTY ARCHIVE_OUTPUT_DIRECTORY "$<1:${CMAKE_CURRENT_BINARY_DIR}>")
diff --git a/Tests/QtAutogen/AutogenTimestampDeps/ext/ext.c b/Tests/QtAutogen/AutogenTimestampDeps/ext/ext.c
new file mode 100644
index 0000000..be253f2
--- /dev/null
+++ b/Tests/QtAutogen/AutogenTimestampDeps/ext/ext.c
@@ -0,0 +1,4 @@
+int ext(void)
+{
+ return 0;
+}
diff --git a/Tests/QtAutogen/AutogenTimestampDeps/src/CMakeLists.txt b/Tests/QtAutogen/AutogenTimestampDeps/src/CMakeLists.txt
index e931248..6a0beac 100644
--- a/Tests/QtAutogen/AutogenTimestampDeps/src/CMakeLists.txt
+++ b/Tests/QtAutogen/AutogenTimestampDeps/src/CMakeLists.txt
@@ -2,3 +2,4 @@ add_executable(Exe main.cpp ${CMAKE_BINARY_DIR}/ProjectInfo.hpp)
add_dependencies(Exe ProjectInfo)
target_include_directories(Exe PRIVATE ${CMAKE_BINARY_DIR})
target_link_libraries(Exe PRIVATE ${QT_QTCORE_TARGET})
+target_link_libraries(Exe PRIVATE ext)
diff --git a/Tests/QtAutogen/AutogenTimestampDeps/src/main.cpp b/Tests/QtAutogen/AutogenTimestampDeps/src/main.cpp
index f3c4c4b..d715488 100644
--- a/Tests/QtAutogen/AutogenTimestampDeps/src/main.cpp
+++ b/Tests/QtAutogen/AutogenTimestampDeps/src/main.cpp
@@ -1,5 +1,6 @@
#include "ProjectInfo.hpp"
+extern "C" int ext();
int main(int argc, char* argv[])
{
- return 0;
+ return ext();
}
diff --git a/Tests/QtAutogen/Tests.cmake b/Tests/QtAutogen/Tests.cmake
index 80f7329..d37be1c 100644
--- a/Tests/QtAutogen/Tests.cmake
+++ b/Tests/QtAutogen/Tests.cmake
@@ -2,7 +2,11 @@
ADD_AUTOGEN_TEST(AutogenOriginDependsOff autogenOriginDependsOff)
ADD_AUTOGEN_TEST(AutogenOriginDependsOn)
ADD_AUTOGEN_TEST(AutogenTargetDepends)
+
+set(Autogen_CTEST_OPTIONS --build-target Exe)
ADD_AUTOGEN_TEST(AutogenTimestampDeps)
+unset(Autogen_CTEST_OPTIONS)
+
ADD_AUTOGEN_TEST(AutoMocGeneratedFile)
ADD_AUTOGEN_TEST(Complex QtAutogen)
ADD_AUTOGEN_TEST(GlobalAutogenSystemUseInclude)