summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalGenerator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmLocalGenerator.cxx')
-rw-r--r--Source/cmLocalGenerator.cxx122
1 files changed, 42 insertions, 80 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index e7d56a5..4b4b807 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -387,17 +387,15 @@ void cmLocalGenerator::AddCustomCommandToCreateObject(const char* ofname,
flags += this->GetIncludeFlags(lang);
std::vector<std::string> commands;
cmSystemTools::ExpandList(rules, commands);
+ cmLocalGenerator::RuleVariables vars;
+ vars.Language = lang;
+ vars.Source = sourceFile.c_str();
+ vars.Object = objectFile.c_str();
+ vars.Flags = flags.c_str();
for(std::vector<std::string>::iterator i = commands.begin();
i != commands.end(); ++i)
{
- this->ExpandRuleVariables(*i,
- lang,
- 0, // no objects
- 0, // no target
- 0, // no link libs
- sourceFile.c_str(),
- objectFile.c_str(),
- flags.c_str());
+ this->ExpandRuleVariables(*i, vars);
}
std::vector<std::string> sourceAndDeps;
sourceAndDeps.push_back(sourceFile);
@@ -472,28 +470,14 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
std::string linkFlags; // should be set
this->GetTargetFlags(linkLibs, flags, linkFlags, target);
std::string rule = m_Makefile->GetRequiredDefinition(createRule.c_str());
- this->ExpandRuleVariables(rule,
- llang, // language
- objs.c_str(), // objects
- targetName.c_str(), // target
- linkLibs.c_str(), // link libs
- 0, // source
- 0, // object
- flags.c_str(), // flags
- 0, // objects quoted
- 0, // target so name,
- linkFlags.c_str() // link flags
- );
-#if 0
- std::string command;
- std::string args;
- cmSystemTools::SplitProgramFromArgs(rule.c_str(), command, args);
- // Just like ADD_CUSTOM_TARGET(foo ALL DEPENDS a.o b.o)
- // Add a custom command for generating each .o file
- cmCustomCommand cc(command.c_str(), args.c_str(), objVector,
- targetName.c_str(), 0);
- target.GetPostBuildCommands().push_back(cc);
-#endif
+ cmLocalGenerator::RuleVariables vars;
+ vars.Language = llang;
+ vars.Objects = objs.c_str();
+ vars.Target = targetName.c_str();
+ vars.LinkLibraries = linkLibs.c_str();
+ vars.Flags = flags.c_str();
+ vars.LinkFlags = linkFlags.c_str();
+ this->ExpandRuleVariables(rule, vars);
}
@@ -560,76 +544,67 @@ static const char* ruleReplaceVars[] =
std::string
cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
- const char* lang,
- const char* objects,
- const char* target,
- const char* linkLibs,
- const char* source,
- const char* object,
- const char* flags,
- const char* objectsquoted,
- const char* targetSOName,
- const char* linkFlags)
+ const RuleVariables& replaceValues)
{
- if(linkFlags)
+ if(replaceValues.LinkFlags)
{
if(variable == "LINK_FLAGS")
{
- return linkFlags;
+ return replaceValues.LinkFlags;
}
}
- if(flags)
+ if(replaceValues.Flags)
{
if(variable == "FLAGS")
{
- return flags;
+ return replaceValues.Flags;
}
}
- if(source)
+ if(replaceValues.Source)
{
if(variable == "SOURCE")
{
- return source;
+ return replaceValues.Source;
}
}
- if(object)
+ if(replaceValues.Object)
{
if(variable == "OBJECT")
{
- return object;
+ return replaceValues.Object;
}
}
- if(objects)
+ if(replaceValues.Objects)
{
if(variable == "OBJECTS")
{
- return objects;
+ return replaceValues.Objects;
}
}
- if(objectsquoted)
+ if(replaceValues.ObjectsQuoted)
{
if(variable == "OBJECTS_QUOTED")
{
- return objectsquoted;
+ return replaceValues.ObjectsQuoted;
}
}
- if(target)
+ if(replaceValues.Target)
{
if(variable == "TARGET_QUOTED")
{
- std::string targetQuoted = target;
+ std::string targetQuoted = replaceValues.Target;
if(targetQuoted.size() && targetQuoted[0] != '\"')
{
targetQuoted = '\"';
- targetQuoted += target;
+ targetQuoted += replaceValues.Target;
targetQuoted += '\"';
return targetQuoted;
}
}
if(variable == "TARGET")
{
- return target;
+ return replaceValues.Target;
}
if(variable == "TARGET_IMPLIB")
{
@@ -638,7 +613,7 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
if(variable == "TARGET_BASE")
{
// Strip the last extension off the target name.
- std::string targetBase = target;
+ std::string targetBase = replaceValues.Target;
std::string::size_type pos = targetBase.rfind(".");
if(pos != targetBase.npos)
{
@@ -650,28 +625,28 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
}
}
}
- if(targetSOName)
+ if(replaceValues.TargetSOName)
{
if(variable == "TARGET_SONAME")
{
- if(lang)
+ if(replaceValues.Language)
{
std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
- name += lang;
+ name += replaceValues.Language;
name += "_FLAG";
if(m_Makefile->GetDefinition(name.c_str()))
{
- return targetSOName;
+ return replaceValues.TargetSOName;
}
}
return "";
}
}
- if(linkLibs)
+ if(replaceValues.LinkLibraries)
{
if(variable == "LINK_LIBRARIES")
{
- return linkLibs;
+ return replaceValues.LinkLibraries;
}
}
std::vector<std::string> enabledLanguages;
@@ -683,7 +658,7 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
for(std::vector<std::string>::iterator i = enabledLanguages.begin();
i != enabledLanguages.end(); ++i)
{
- lang = i->c_str();
+ const char* lang = i->c_str();
std::string actualReplace = ruleReplaceVars[pos];
// If this is the compiler then look for the extra variable
// _COMPILER_ARG1 which must be the first argument to the compiler
@@ -724,16 +699,7 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
void
cmLocalGenerator::ExpandRuleVariables(std::string& s,
- const char* lang,
- const char* objects,
- const char* target,
- const char* linkLibs,
- const char* source,
- const char* object,
- const char* flags,
- const char* objectsquoted,
- const char* targetSOName,
- const char* linkFlags)
+ const RuleVariables& replaceValues)
{
std::vector<std::string> enabledLanguages;
m_GlobalGenerator->GetEnabledLanguages(enabledLanguages);
@@ -764,12 +730,8 @@ cmLocalGenerator::ExpandRuleVariables(std::string& s,
{
// extract the var
std::string var = s.substr(start+1, end - start-1);
- std::string replace = this->ExpandRuleVariable(var, lang, objects,
- target, linkLibs,
- source, object, flags,
- objectsquoted,
- targetSOName,
- linkFlags);
+ std::string replace = this->ExpandRuleVariable(var,
+ replaceValues);
expandedInput += s.substr(pos, start-pos);
expandedInput += replace;
// move to next one