ENH: Add rule substitutions useful for launchers

This defines make rule substitutions <LANGUAGE>, <TARGET_NAME>,
<TARGET_TYPE>, and <OUTPUT>.  They will be useful for RULE_LAUNCH_*
property values.
This commit is contained in:
Brad King 2009-02-10 08:52:07 -05:00
parent b604b98c56
commit 15c52e9891
3 changed files with 33 additions and 0 deletions

View File

@ -972,6 +972,31 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
return replaceValues.LinkLibraries; return replaceValues.LinkLibraries;
} }
} }
if(replaceValues.Language)
{
if(variable == "LANGUAGE")
{
return replaceValues.Language;
}
}
if(replaceValues.CMTarget)
{
if(variable == "TARGET_NAME")
{
return replaceValues.CMTarget->GetName();
}
if(variable == "TARGET_TYPE")
{
return cmTarget::TargetTypeNames[replaceValues.CMTarget->GetType()];
}
}
if(replaceValues.Output)
{
if(variable == "OUTPUT")
{
return replaceValues.Output;
}
}
if(variable == "CMAKE_COMMAND") if(variable == "CMAKE_COMMAND")
{ {
const char* cmcommand = const char* cmcommand =

View File

@ -214,6 +214,7 @@ public:
const char* Source; const char* Source;
const char* AssemblySource; const char* AssemblySource;
const char* PreprocessedSource; const char* PreprocessedSource;
const char* Output;
const char* Object; const char* Object;
const char* ObjectDir; const char* ObjectDir;
const char* Flags; const char* Flags;

View File

@ -1114,6 +1114,13 @@ cmLocalUnixMakefileGenerator3::MakeLauncher(const cmCustomCommand& cc,
RuleVariables vars; RuleVariables vars;
vars.RuleLauncher = prop; vars.RuleLauncher = prop;
vars.CMTarget = target; vars.CMTarget = target;
std::string output;
const std::vector<std::string>& outputs = cc.GetOutputs();
if(!outputs.empty())
{
output = this->Convert(outputs[0].c_str(), relative, SHELL);
}
vars.Output = output.c_str();
std::string launcher; std::string launcher;
this->ExpandRuleVariables(launcher, vars); this->ExpandRuleVariables(launcher, vars);