Răsfoiți Sursa

cmMakefile: Extract CompileFeaturesAvailable method.

Stephen Kelly 11 ani în urmă
părinte
comite
8dd129dfbb
2 a modificat fișierele cu 41 adăugiri și 26 ștergeri
  1. 38 26
      Source/cmMakefile.cxx
  2. 3 0
      Source/cmMakefile.h

+ 38 - 26
Source/cmMakefile.cxx

@@ -5011,37 +5011,14 @@ AddRequiredTargetFeature(cmTarget *target, const std::string& feature,
     return false;
     }
 
-  const char* featuresKnown =
-    this->GetDefinition("CMAKE_" + lang + "_COMPILE_FEATURES");
-
-  if (!featuresKnown || !*featuresKnown)
+  const char* features = this->CompileFeaturesAvailable(lang, error);
+  if (!features)
     {
-    cmOStringStream e;
-    if (error)
-      {
-      e << "no";
-      }
-    else
-      {
-      e << "No";
-      }
-    e << " known features for " << lang << " compiler\n\""
-      << this->GetDefinition("CMAKE_" + lang + "_COMPILER_ID")
-      << "\"\nversion "
-      << this->GetDefinition("CMAKE_" + lang + "_COMPILER_VERSION") << ".";
-    if (error)
-      {
-      *error = e.str();
-      }
-    else
-      {
-      this->IssueMessage(cmake::FATAL_ERROR, e.str());
-      }
     return false;
     }
 
   std::vector<std::string> availableFeatures;
-  cmSystemTools::ExpandListArgument(featuresKnown, availableFeatures);
+  cmSystemTools::ExpandListArgument(features, availableFeatures);
   if (std::find(availableFeatures.begin(),
                 availableFeatures.end(),
                 feature) == availableFeatures.end())
@@ -5108,6 +5085,41 @@ CompileFeatureKnown(cmTarget const* target, const std::string& feature,
   return false;
 }
 
+//----------------------------------------------------------------------------
+const char* cmMakefile::
+CompileFeaturesAvailable(const std::string& lang, std::string *error) const
+{
+  const char* featuresKnown =
+    this->GetDefinition("CMAKE_" + lang + "_COMPILE_FEATURES");
+
+  if (!featuresKnown || !*featuresKnown)
+    {
+    cmOStringStream e;
+    if (error)
+      {
+      e << "no";
+      }
+    else
+      {
+      e << "No";
+      }
+    e << " known features for " << lang << " compiler\n\""
+      << this->GetDefinition("CMAKE_" + lang + "_COMPILER_ID")
+      << "\"\nversion "
+      << this->GetDefinition("CMAKE_" + lang + "_COMPILER_VERSION") << ".";
+    if (error)
+      {
+      *error = e.str();
+      }
+    else
+      {
+      this->IssueMessage(cmake::FATAL_ERROR, e.str());
+      }
+    return 0;
+    }
+  return featuresKnown;
+}
+
 //----------------------------------------------------------------------------
 bool cmMakefile::
 AddRequiredTargetCxxFeature(cmTarget *target,

+ 3 - 0
Source/cmMakefile.h

@@ -892,6 +892,9 @@ public:
   bool CompileFeatureKnown(cmTarget const* target, const std::string& feature,
                            std::string& lang, std::string *error) const;
 
+  const char* CompileFeaturesAvailable(const std::string& lang,
+                                       std::string *error) const;
+
   void ClearMatches();
   void StoreMatches(cmsys::RegularExpression& re);