mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-03 21:00:01 -05:00
Merge topic 'orkun_26059_24_06_2024'
8d99e71b7eAutogen: Add timestamp file for CMAKE_GLOBAL_AUTORCC_TARGET003830f14fAutogen: Remove redundant push_back Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9628
This commit is contained in:
@@ -1671,13 +1671,10 @@ bool cmQtAutoGenInitializer::InitRccTargets()
|
||||
sf->SetProperty("SKIP_UNITY_BUILD_INCLUSION", "On");
|
||||
}
|
||||
|
||||
std::vector<std::string> ccOutput;
|
||||
ccOutput.push_back(qrc.OutputFile);
|
||||
std::vector<std::string> ccOutput{ qrc.OutputFile };
|
||||
|
||||
std::vector<std::string> ccDepends;
|
||||
// Add the .qrc and info file to the custom command dependencies
|
||||
ccDepends.push_back(qrc.QrcFile);
|
||||
ccDepends.push_back(qrc.InfoFile);
|
||||
std::vector<std::string> ccDepends{ qrc.QrcFile, qrc.InfoFile };
|
||||
|
||||
cmCustomCommandLines commandLines;
|
||||
AddCMakeProcessToCommandLines(qrc.InfoFile, "cmake_autorcc", commandLines);
|
||||
@@ -1700,13 +1697,43 @@ bool cmQtAutoGenInitializer::InitRccTargets()
|
||||
if (!qrc.Unique) {
|
||||
ccName += cmStrCat('_', qrc.QrcPathChecksum);
|
||||
}
|
||||
cmTarget* autoRccTarget = nullptr;
|
||||
// When CMAKE_GLOBAL_AUTORCC_TARGET is ON and qrc is not generated,
|
||||
// Add generate a timestamp file and a custom command to touch it.
|
||||
// This will ensure that the global autorcc target is run only when the
|
||||
// qrc file changes.
|
||||
if (!qrc.Generated && this->Rcc.GlobalTarget) {
|
||||
cm::string_view const timestampFileName = "global_rcc_timestamp";
|
||||
auto const outputFile =
|
||||
cmStrCat(this->Dir.Build, "/", timestampFileName);
|
||||
commandLines.push_back(cmMakeCommandLine(
|
||||
{ cmSystemTools::GetCMakeCommand(), "-E", "touch", outputFile }));
|
||||
cc->SetByproducts(ccOutput);
|
||||
cc->SetDepends(ccDepends);
|
||||
cc->SetEscapeOldStyle(false);
|
||||
cc->SetOutputs(outputFile);
|
||||
cc->SetCommandLines(commandLines);
|
||||
this->LocalGen->AddCustomCommandToOutput(std::move(cc));
|
||||
this->AddGeneratedSource(outputFile, this->Rcc);
|
||||
ccDepends.clear();
|
||||
ccDepends.push_back(outputFile);
|
||||
|
||||
cc->SetByproducts(ccOutput);
|
||||
cc->SetDepends(ccDepends);
|
||||
cc->SetEscapeOldStyle(false);
|
||||
cmTarget* autoRccTarget =
|
||||
this->LocalGen->AddUtilityCommand(ccName, true, std::move(cc));
|
||||
auto ccRccTarget = cm::make_unique<cmCustomCommand>();
|
||||
ccRccTarget->SetWorkingDirectory(this->Dir.Work.c_str());
|
||||
ccRccTarget->SetComment(ccComment.c_str());
|
||||
ccRccTarget->SetStdPipesUTF8(true);
|
||||
ccRccTarget->SetDepends(ccDepends);
|
||||
ccRccTarget->SetEscapeOldStyle(false);
|
||||
|
||||
autoRccTarget = this->LocalGen->AddUtilityCommand(
|
||||
ccName, true, std::move(ccRccTarget));
|
||||
} else {
|
||||
cc->SetByproducts(ccOutput);
|
||||
cc->SetDepends(ccDepends);
|
||||
cc->SetEscapeOldStyle(false);
|
||||
autoRccTarget =
|
||||
this->LocalGen->AddUtilityCommand(ccName, true, std::move(cc));
|
||||
}
|
||||
// Create autogen generator target
|
||||
this->LocalGen->AddGeneratorTarget(
|
||||
cm::make_unique<cmGeneratorTarget>(autoRccTarget, this->LocalGen));
|
||||
|
||||
@@ -27,5 +27,21 @@ if (DEFINED with_qt_version)
|
||||
endblock()
|
||||
endforeach()
|
||||
endif()
|
||||
if (RunCMake_GENERATOR MATCHES "Ninja")
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR
|
||||
${RunCMake_BINARY_DIR}/RccGlobalAutoRcc-build)
|
||||
run_cmake_with_options(RccExample ${RunCMake_TEST_OPTIONS}
|
||||
-DCMAKE_GLOBAL_AUTORCC_TARGET=ON)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_VARIANT_DESCRIPTION "-First-build")
|
||||
run_cmake_command(RccGlobalAutoRcc-build ${CMAKE_COMMAND}
|
||||
--build . --config Debug)
|
||||
set(RunCMake_TEST_VARIANT_DESCRIPTION "-Second-build-nothing-to-do")
|
||||
set(RunCMake_TEST_NOT_EXPECT_stdout "Automatic RCC for data.qrc")
|
||||
run_cmake_command(RccGlobalAutoRcc-build ${CMAKE_COMMAND}
|
||||
--build . --config Debug)
|
||||
endblock()
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
Reference in New Issue
Block a user