ENH: make sure RuleVariable struct is initialized correctly, also make sure custom command targets do not crash cmake
This commit is contained in:
parent
c3a22c011d
commit
8f1aaf28c1
|
@ -617,7 +617,11 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
|
|||
vars.LinkLibraries = linkLibs.c_str();
|
||||
vars.Flags = flags.c_str();
|
||||
vars.LinkFlags = linkFlags.c_str();
|
||||
|
||||
|
||||
std::string langFlags;
|
||||
this->AddLanguageFlags(langFlags, llang, 0);
|
||||
vars.LanguageCompileFlags = langFlags.c_str();
|
||||
|
||||
cmCustomCommandLines commandLines;
|
||||
std::vector<std::string> rules;
|
||||
rules.push_back(this->Makefile->GetRequiredDefinition(createRule.c_str()));
|
||||
|
@ -812,30 +816,39 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
|
|||
return targetQuoted;
|
||||
}
|
||||
}
|
||||
if(variable == "LANGUAGE_COMPILE_FLAGS")
|
||||
if(replaceValues.LanguageCompileFlags)
|
||||
{
|
||||
return replaceValues.LanguageCompileFlags;
|
||||
if(variable == "LANGUAGE_COMPILE_FLAGS")
|
||||
{
|
||||
return replaceValues.LanguageCompileFlags;
|
||||
}
|
||||
}
|
||||
if(variable == "TARGET")
|
||||
if(replaceValues.Target)
|
||||
{
|
||||
return replaceValues.Target;
|
||||
if(variable == "TARGET")
|
||||
{
|
||||
return replaceValues.Target;
|
||||
}
|
||||
}
|
||||
if(variable == "TARGET_IMPLIB")
|
||||
{
|
||||
return this->TargetImplib;
|
||||
}
|
||||
if(variable == "TARGET_BASE")
|
||||
if(replaceValues.Target)
|
||||
{
|
||||
// Strip the last extension off the target name.
|
||||
std::string targetBase = replaceValues.Target;
|
||||
std::string::size_type pos = targetBase.rfind(".");
|
||||
if(pos != targetBase.npos)
|
||||
if(variable == "TARGET_BASE")
|
||||
{
|
||||
// Strip the last extension off the target name.
|
||||
std::string targetBase = replaceValues.Target;
|
||||
std::string::size_type pos = targetBase.rfind(".");
|
||||
if(pos != targetBase.npos)
|
||||
{
|
||||
return targetBase.substr(0, pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
return targetBase;
|
||||
}
|
||||
else
|
||||
{
|
||||
return targetBase;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -181,20 +181,7 @@ public:
|
|||
{
|
||||
RuleVariables()
|
||||
{
|
||||
this->Language= 0;
|
||||
this->Objects= 0;
|
||||
this->Target= 0;
|
||||
this->LinkLibraries= 0;
|
||||
this->Source= 0;
|
||||
this->AssemblySource = 0;
|
||||
this->PreprocessedSource = 0;
|
||||
this->Object= 0;
|
||||
this->ObjectDir= 0;
|
||||
this->Flags= 0;
|
||||
this->ObjectsQuoted= 0;
|
||||
this->TargetSOName= 0;
|
||||
this->TargetInstallNameDir = 0;
|
||||
this->LinkFlags= 0;
|
||||
memset(this, 0, sizeof(*this));
|
||||
}
|
||||
const char* TargetPDB;
|
||||
const char* Language;
|
||||
|
|
Loading…
Reference in New Issue