Pārlūkot izejas kodu

cmLocalGenerator: Populate variable mapping for all replacements

This reduces the final replacement to a simple query in the map, which
is much more readable than what was here before.
Stephen Kelly 9 gadi atpakaļ
vecāks
revīzija
d5feb5b34c
1 mainītis faili ar 11 papildinājumiem un 10 dzēšanām
  1. 11 10
      Source/cmLocalGenerator.cxx

+ 11 - 10
Source/cmLocalGenerator.cxx

@@ -738,8 +738,6 @@ std::string cmLocalGenerator::ExpandRuleVariable(
   std::map<std::string, std::string>::iterator compIt =
     compilers.find(variable);
 
-  std::string replace = this->Makefile->GetSafeDefinition(variable);
-
   if (compIt != compilers.end()) {
     std::string ret = this->ConvertToOutputForExisting(
       variableMappings["CMAKE_" + compIt->second + "_COMPILER"]);
@@ -783,7 +781,6 @@ std::string cmLocalGenerator::ExpandRuleVariable(
     return ret;
   }
 
-  // loop over language specific replace variables
   for (const char* const* replaceIter = cmArrayBegin(ruleReplaceVars);
        replaceIter != cmArrayEnd(ruleReplaceVars); ++replaceIter) {
     for (std::vector<std::string>::iterator i = enabledLanguages.begin();
@@ -793,14 +790,18 @@ std::string cmLocalGenerator::ExpandRuleVariable(
       if (actualReplace.find("${LANG}") != actualReplace.npos) {
         cmSystemTools::ReplaceString(actualReplace, "${LANG}", lang);
       }
-      if (actualReplace == variable) {
-        // if the variable is not a FLAG then treat it like a path
-        if (variable.find("_FLAG") == variable.npos) {
-          return this->ConvertToOutputForExisting(replace);
-        }
-        return replace;
-      }
+
+      variableMappings[actualReplace] =
+        this->Makefile->GetSafeDefinition(actualReplace);
+    }
+  }
+  std::map<std::string, std::string>::iterator mapIt =
+    variableMappings.find(variable);
+  if (mapIt != variableMappings.end()) {
+    if (variable.find("_FLAG") == variable.npos) {
+      return this->ConvertToOutputForExisting(mapIt->second);
     }
+    return mapIt->second;
   }
   return variable;
 }