Просмотр исходного кода

Merge topic 'move-CMP0059-handling'

52b9d828 cmMakefile: Move CMP0059 handling to command code.
fe603c7d cmGetDirectoryPropertyCommand: Move variable to the point of use.
8fc53c3c cmGetDirectoryPropertyCommand: Extract StoreResult method.
Brad King 10 лет назад
Родитель
Сommit
d78fbb6ad4

+ 26 - 4
Source/cmGetDirectoryPropertyCommand.cxx

@@ -26,7 +26,6 @@ bool cmGetDirectoryPropertyCommand
   std::vector<std::string>::const_iterator i = args.begin();
   std::string variable = *i;
   ++i;
-  std::string output = "";
 
   // get the directory argument if there is one
   cmMakefile *dir = this->Makefile;
@@ -79,7 +78,7 @@ bool cmGetDirectoryPropertyCommand
                      "providing the name of the variable to get.");
       return false;
       }
-    output = dir->GetSafeDefinition(*i);
+    std::string output = dir->GetSafeDefinition(*i);
     this->Makefile->AddDefinition(variable, output.c_str());
     return true;
     }
@@ -87,14 +86,37 @@ bool cmGetDirectoryPropertyCommand
   const char *prop = 0;
   if (!i->empty())
     {
+    if (*i == "DEFINITIONS")
+      {
+      switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0059))
+        {
+        case cmPolicies::WARN:
+          this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,
+                           cmPolicies::GetPolicyWarning(cmPolicies::CMP0059));
+        case cmPolicies::OLD:
+          this->StoreResult(variable,
+                                   this->Makefile->GetDefineFlagsCMP0059());
+        return true;
+        case cmPolicies::NEW:
+        case cmPolicies::REQUIRED_ALWAYS:
+        case cmPolicies::REQUIRED_IF_USED:
+          break;
+        }
+      }
     prop = dir->GetProperty(*i);
     }
+  this->StoreResult(variable, prop);
+  return true;
+}
+
+void cmGetDirectoryPropertyCommand::StoreResult(std::string const& variable,
+                                                const char* prop)
+{
   if (prop)
     {
     this->Makefile->AddDefinition(variable, prop);
-    return true;
+    return;
     }
   this->Makefile->AddDefinition(variable, "");
-  return true;
 }
 

+ 3 - 2
Source/cmGetDirectoryPropertyCommand.h

@@ -40,8 +40,9 @@ public:
   virtual std::string GetName() const { return "get_directory_property";}
 
   cmTypeMacro(cmGetDirectoryPropertyCommand, cmCommand);
-};
-
 
+private:
+  void StoreResult(const std::string& variable, const char* prop);
+};
 
 #endif

+ 16 - 0
Source/cmGetPropertyCommand.cxx

@@ -279,6 +279,22 @@ bool cmGetPropertyCommand::HandleDirectoryMode()
       }
     }
 
+  if (this->PropertyName == "DEFINITIONS")
+    {
+    switch(mf->GetPolicyStatus(cmPolicies::CMP0059))
+      {
+      case cmPolicies::WARN:
+        mf->IssueMessage(cmake::AUTHOR_WARNING,
+                         cmPolicies::GetPolicyWarning(cmPolicies::CMP0059));
+      case cmPolicies::OLD:
+        return this->StoreResult(mf->GetDefineFlagsCMP0059());
+      case cmPolicies::NEW:
+      case cmPolicies::REQUIRED_ALWAYS:
+      case cmPolicies::REQUIRED_IF_USED:
+        break;
+      }
+    }
+
   // Get the property.
   return this->StoreResult(mf->GetProperty(this->PropertyName));
 }

+ 5 - 16
Source/cmMakefile.cxx

@@ -4171,22 +4171,6 @@ const char *cmMakefile::GetProperty(const std::string& prop,
     this->GetListOfMacros(output);
     return output.c_str();
     }
-  else if (prop == "DEFINITIONS")
-    {
-    switch(this->GetPolicyStatus(cmPolicies::CMP0059))
-      {
-      case cmPolicies::WARN:
-          this->IssueMessage(cmake::AUTHOR_WARNING, cmPolicies::
-                             GetPolicyWarning(cmPolicies::CMP0059));
-      case cmPolicies::OLD:
-        output += this->DefineFlagsOrig;
-        return output.c_str();
-      case cmPolicies::NEW:
-      case cmPolicies::REQUIRED_ALWAYS:
-      case cmPolicies::REQUIRED_IF_USED:
-        break;
-      }
-    }
   else if (prop == "LINK_DIRECTORIES")
     {
     output = cmJoin(this->GetLinkDirectories(), ";");
@@ -4674,6 +4658,11 @@ cmState::Snapshot cmMakefile::GetStateSnapshot() const
   return this->StateSnapshot;
 }
 
+const char* cmMakefile::GetDefineFlagsCMP0059() const
+{
+  return this->DefineFlagsOrig.c_str();
+}
+
 //----------------------------------------------------------------------------
 cmPolicies::PolicyStatus
 cmMakefile::GetPolicyStatus(cmPolicies::PolicyID id) const

+ 2 - 0
Source/cmMakefile.h

@@ -838,6 +838,8 @@ public:
 
   cmState::Snapshot GetStateSnapshot() const;
 
+  const char* GetDefineFlagsCMP0059() const;
+
 protected:
   // add link libraries and directories to the target
   void AddGlobalLinkInformation(const std::string& name, cmTarget& target);