Factor out custom command .rule file path generation
Add cmGlobalGenerator::GenerateRuleFile to compute a generator-specific rule file location. This will allow specific generators to override the location of .rule files without changing the behavior of other generators.
This commit is contained in:
parent
f9b758e91a
commit
369e3464be
|
@ -2091,6 +2091,21 @@ cmTarget cmGlobalGenerator::CreateGlobalTarget(
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
std::string
|
||||||
|
cmGlobalGenerator::GenerateRuleFile(std::string const& output) const
|
||||||
|
{
|
||||||
|
std::string ruleFile = output;
|
||||||
|
ruleFile += ".rule";
|
||||||
|
const char* dir = this->GetCMakeCFGIntDir();
|
||||||
|
if(dir && dir[0] == '$')
|
||||||
|
{
|
||||||
|
cmSystemTools::ReplaceString(ruleFile, dir,
|
||||||
|
cmake::GetCMakeFilesDirectory());
|
||||||
|
}
|
||||||
|
return ruleFile;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmGlobalGenerator::AppendDirectoryForConfig(const char*, const char*,
|
void cmGlobalGenerator::AppendDirectoryForConfig(const char*, const char*,
|
||||||
const char*, std::string&)
|
const char*, std::string&)
|
||||||
|
|
|
@ -277,6 +277,9 @@ public:
|
||||||
i.e. "Can I build Debug and Release in the same tree?" */
|
i.e. "Can I build Debug and Release in the same tree?" */
|
||||||
virtual bool IsMultiConfig() { return false; }
|
virtual bool IsMultiConfig() { return false; }
|
||||||
|
|
||||||
|
/** Generate an <output>.rule file path for a given command output. */
|
||||||
|
virtual std::string GenerateRuleFile(std::string const& output) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef std::vector<cmLocalGenerator*> GeneratorVector;
|
typedef std::vector<cmLocalGenerator*> GeneratorVector;
|
||||||
// for a project collect all its targets by following depend
|
// for a project collect all its targets by following depend
|
||||||
|
|
|
@ -948,17 +948,11 @@ cmMakefile::AddCustomCommandToOutput(const std::vector<std::string>& outputs,
|
||||||
// Generate a rule file if the main dependency is not available.
|
// Generate a rule file if the main dependency is not available.
|
||||||
if(!file)
|
if(!file)
|
||||||
{
|
{
|
||||||
|
cmGlobalGenerator* gg = this->LocalGenerator->GetGlobalGenerator();
|
||||||
|
|
||||||
// Construct a rule file associated with the first output produced.
|
// Construct a rule file associated with the first output produced.
|
||||||
std::string outName = outputs[0];
|
std::string outName = gg->GenerateRuleFile(outputs[0]);
|
||||||
outName += ".rule";
|
|
||||||
const char* dir =
|
|
||||||
this->LocalGenerator->GetGlobalGenerator()->
|
|
||||||
GetCMakeCFGIntDir();
|
|
||||||
if(dir && dir[0] == '$')
|
|
||||||
{
|
|
||||||
cmSystemTools::ReplaceString(outName, dir,
|
|
||||||
cmake::GetCMakeFilesDirectory());
|
|
||||||
}
|
|
||||||
// Check if the rule file already exists.
|
// Check if the rule file already exists.
|
||||||
file = this->GetSource(outName.c_str());
|
file = this->GetSource(outName.c_str());
|
||||||
if(file && file->GetCustomCommand() && !replace)
|
if(file && file->GetCustomCommand() && !replace)
|
||||||
|
|
Loading…
Reference in New Issue