diff options
Diffstat (limited to 'Source/cmLocalGenerator.cxx')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 122 |
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 |