BUG: Fix OS X AppBundle/FW byproducts dependencies
App Bundle and Framework directories, symlinks, and Info.plist files we create during generation are byproducts, not outputs. We should re-run CMake only when they are missing, not when they are old. See issue #8465.
This commit is contained in:
parent
81601796a6
commit
2282748907
|
@ -352,18 +352,26 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
|
|||
cmakefileStream << " \"" <<
|
||||
lg->Convert(tmpStr.c_str(),cmLocalGenerator::HOME_OUTPUT).c_str()
|
||||
<< "\"\n";
|
||||
const std::vector<std::string>& outfiles =
|
||||
lg->GetMakefile()->GetOutputFiles();
|
||||
for(std::vector<std::string>::const_iterator k= outfiles.begin();
|
||||
k != outfiles.end(); ++k)
|
||||
{
|
||||
cmakefileStream << " \"" <<
|
||||
lg->Convert(k->c_str(),cmLocalGenerator::HOME_OUTPUT).c_str()
|
||||
<< "\"\n";
|
||||
}
|
||||
}
|
||||
cmakefileStream << " )\n\n";
|
||||
|
||||
// CMake must rerun if a byproduct is missing.
|
||||
{
|
||||
cmakefileStream
|
||||
<< "# Byproducts of CMake generate step:\n"
|
||||
<< "SET(CMAKE_MAKEFILE_PRODUCTS\n";
|
||||
const std::vector<std::string>& outfiles =
|
||||
lg->GetMakefile()->GetOutputFiles();
|
||||
for(std::vector<std::string>::const_iterator k = outfiles.begin();
|
||||
k != outfiles.end(); ++k)
|
||||
{
|
||||
cmakefileStream << " \"" <<
|
||||
lg->Convert(k->c_str(),cmLocalGenerator::HOME_OUTPUT).c_str()
|
||||
<< "\"\n";
|
||||
}
|
||||
cmakefileStream << " )\n\n";
|
||||
}
|
||||
|
||||
this->WriteMainCMakefileLanguageRules(cmakefileStream,
|
||||
this->LocalGenerators);
|
||||
}
|
||||
|
|
|
@ -2657,6 +2657,27 @@ int cmake::CheckBuildSystem()
|
|||
}
|
||||
}
|
||||
|
||||
// If any byproduct of makefile generation is missing we must re-run.
|
||||
std::vector<std::string> products;
|
||||
if(const char* productStr = mf->GetDefinition("CMAKE_MAKEFILE_PRODUCTS"))
|
||||
{
|
||||
cmSystemTools::ExpandListArgument(productStr, products);
|
||||
}
|
||||
for(std::vector<std::string>::const_iterator pi = products.begin();
|
||||
pi != products.end(); ++pi)
|
||||
{
|
||||
if(!cmSystemTools::FileExists(pi->c_str()))
|
||||
{
|
||||
if(verbose)
|
||||
{
|
||||
cmOStringStream msg;
|
||||
msg << "Re-run cmake, missing byproduct: " << *pi << "\n";
|
||||
cmSystemTools::Stdout(msg.str().c_str());
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the set of dependencies and outputs.
|
||||
std::vector<std::string> depends;
|
||||
std::vector<std::string> outputs;
|
||||
|
|
Loading…
Reference in New Issue