summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2022-05-24 14:41:57 (GMT)
committerJoerg Bornemann <joerg.bornemann@qt.io>2022-05-25 11:04:01 (GMT)
commit76608c60d38e1cb93a77a430c1cef3ec85f2ce83 (patch)
tree26ae44d0d3c5b1b47c1306b218631696445511d0 /Source
parentced9a3b0bbc85fbd392b7323b18d00309a444ddc (diff)
downloadCMake-76608c60d38e1cb93a77a430c1cef3ec85f2ce83.zip
CMake-76608c60d38e1cb93a77a430c1cef3ec85f2ce83.tar.gz
CMake-76608c60d38e1cb93a77a430c1cef3ec85f2ce83.tar.bz2
AutoMoc: Take AUTOMOC_BUILD_DIR into account in depfile
For the Ninja generator and targets that have AUTOMOC_BUILD_DIR set, the AutoMoc target was always out of date. That was because the depfile in the AutoMoc build directory was referencing the wrong timestamp file: target_autogen/timestamp: ...dependencies... instead of automoc_build_dir/timestamp: ...dependencies... Use the relative path of the timestamp file as rule name for the depfile. That path is calculated with AUTOMOC_BUILD_DIR taken into account. Fixes: #23547
Diffstat (limited to 'Source')
-rw-r--r--Source/cmQtAutoGenInitializer.cxx5
-rw-r--r--Source/cmQtAutoGenInitializer.h1
2 files changed, 5 insertions, 1 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index a47b3c0..40f3ab5 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -407,6 +407,7 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
}
// Common directories
+ std::string relativeBuildDir;
{
// Collapsed current binary directory
std::string const cbd = cmSystemTools::CollapseFullPath(
@@ -424,6 +425,8 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
cmStrCat(cbd, '/', this->GenTarget->GetName(), "_autogen");
}
cmSystemTools::ConvertToUnixSlashes(this->Dir.Build);
+ this->Dir.RelativeBuild =
+ cmSystemTools::RelativePath(cbd, this->Dir.Build);
// Cleanup build directory
this->AddCleanFile(this->Dir.Build);
@@ -1357,7 +1360,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
cmStrCat(this->Dir.Build, "/", timestampFileName);
this->AutogenTarget.DepFile = cmStrCat(this->Dir.Build, "/deps");
this->AutogenTarget.DepFileRuleName =
- cmStrCat(this->GenTarget->GetName(), "_autogen/", timestampFileName);
+ cmStrCat(this->Dir.RelativeBuild, "/", timestampFileName);
commandLines.push_back(cmMakeCommandLine(
{ cmSystemTools::GetCMakeCommand(), "-E", "touch", outputFile }));
diff --git a/Source/cmQtAutoGenInitializer.h b/Source/cmQtAutoGenInitializer.h
index 603c537..33749ba 100644
--- a/Source/cmQtAutoGenInitializer.h
+++ b/Source/cmQtAutoGenInitializer.h
@@ -178,6 +178,7 @@ private:
{
std::string Info;
std::string Build;
+ std::string RelativeBuild;
std::string Work;
ConfigString Include;
std::string IncludeGenExp;