ENH: make sure RuleVariable struct is initialized correctly, also make sure custom command targets do not crash cmake

This commit is contained in:
Bill Hoffman 2006-08-08 13:44:25 -04:00
parent c3a22c011d
commit 8f1aaf28c1
2 changed files with 28 additions and 28 deletions

View File

@ -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;
}
}
}
}

View File

@ -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;