Autogen: Forward dependencies when both Makefile and DEPFILE are used

Since commit ebc9e448b3 (Autogen: Add depfile support for Makefiles,
2023-09-07, v3.28.0-rc1~101^2~1) CMake does not generate the correct
dependency graph when both `Makefile` and `DEPFILE` are used.
The build of `<target_name>_autogen_timestamp_deps` fails due to
missing dependencies.  To tackle that problem, forward target
dependencies to both `<target_name>_autogen_timestamp_deps` and
`<target_name>_autogen` instead of just `<target_name>_autogen`.

Fixes: #25600
This commit is contained in:
Orkun Tokdemir
2024-01-26 12:17:14 +01:00
committed by Brad King
parent 4deb9c41b8
commit d0bedb2170
7 changed files with 39 additions and 1 deletions
+10 -1
View File
@@ -1369,7 +1369,6 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
std::vector<std::string> dependencies(
this->AutogenTarget.DependFiles.begin(),
this->AutogenTarget.DependFiles.end());
if (useDepfile) {
// Create a custom command that generates a timestamp file and
// has a depfile assigned. The depfile is created by JobDepFilesMergeT.
@@ -1408,6 +1407,16 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
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);
}
}
this->LocalGen->AddGeneratorTarget(
cm::make_unique<cmGeneratorTarget>(timestampTarget, this->LocalGen));
@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.28)
project(AutogenTimestampDeps)
include("../AutogenCoreTest.cmake")
set(CMAKE_AUTOMOC ON)
add_custom_target(ProjectInfo
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UpdateProjectInfo.cmake
BYPRODUCTS ${CMAKE_BINARY_DIR}/ProjectInfo.hpp)
add_subdirectory(src)
@@ -0,0 +1,6 @@
#ifndef PROJECTINFO_HPP
#define PROJECTINFO_HPP
extern int VersionMajor;
#endif // PROJECTINFO_HPP
@@ -0,0 +1,2 @@
configure_file(${CMAKE_CURRENT_LIST_DIR}/../ProjectInfo.hpp.in ${CMAKE_BINARY_DIR}/ProjectInfo.hpp @ONLY)
@@ -0,0 +1,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})
@@ -0,0 +1,5 @@
#include "ProjectInfo.hpp"
int main(int argc, char* argv[])
{
return 0;
}
+1
View File
@@ -2,6 +2,7 @@
ADD_AUTOGEN_TEST(AutogenOriginDependsOff autogenOriginDependsOff)
ADD_AUTOGEN_TEST(AutogenOriginDependsOn)
ADD_AUTOGEN_TEST(AutogenTargetDepends)
ADD_AUTOGEN_TEST(AutogenTimestampDeps)
ADD_AUTOGEN_TEST(AutoMocGeneratedFile)
ADD_AUTOGEN_TEST(Complex QtAutogen)
ADD_AUTOGEN_TEST(GlobalAutogenSystemUseInclude)