QtAutogen: Fix rcc rebuild with Ninja generator (#15459)

The rcc outputs are byproducts of the cmake_autogen rule, not outputs.
We still must run cmake_autogen on every run even if the rcc outputs
exist.  Ninja requires explicit byproduct specification, which is now
possible in CMake since commit v3.2.0-rc1~340^2~2 (Add an option for
explicit BYPRODUCTS of custom commands, 2014-11-13).  Revise the logic
introduced by commit v3.2.0-rc1~480^2 (QtAutogen: Regenerate qrc files
if their input changes, 2014-09-17) to specify byproducts explicitly.
This commit is contained in:
Brad King 2015-03-27 15:27:40 -04:00
parent 7910cb7cfb
commit 4d08e6b6dd
1 changed files with 6 additions and 3 deletions

View File

@ -374,7 +374,9 @@ bool cmQtAutoGenerators::InitializeAutogenTarget(cmTarget* target)
#endif #endif
std::vector<std::string> rcc_output; std::vector<std::string> rcc_output;
if(makefile->GetLocalGenerator()->GetGlobalGenerator()->GetName() == "Ninja" bool const isNinja =
makefile->GetLocalGenerator()->GetGlobalGenerator()->GetName() == "Ninja";
if(isNinja
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
|| usePRE_BUILD || usePRE_BUILD
#endif #endif
@ -444,7 +446,7 @@ bool cmQtAutoGenerators::InitializeAutogenTarget(cmTarget* target)
#endif #endif
{ {
cmTarget* autogenTarget = 0; cmTarget* autogenTarget = 0;
if (!rcc_output.empty()) if (!rcc_output.empty() && !isNinja)
{ {
std::vector<std::string> no_byproducts; std::vector<std::string> no_byproducts;
makefile->AddCustomCommandToOutput(rcc_output, no_byproducts, makefile->AddCustomCommandToOutput(rcc_output, no_byproducts,
@ -464,7 +466,8 @@ bool cmQtAutoGenerators::InitializeAutogenTarget(cmTarget* target)
{ {
autogenTarget = makefile->AddUtilityCommand( autogenTarget = makefile->AddUtilityCommand(
autogenTargetName, true, autogenTargetName, true,
workingDirectory.c_str(), depends, workingDirectory.c_str(),
/*byproducts=*/rcc_output, depends,
commandLines, false, autogenComment.c_str()); commandLines, false, autogenComment.c_str());
} }