Browse Source

Merge topic 'fix-COMPILE_FEATURES-genex'

45ec182d Features: Fix the COMPILE_FEATURES genex for unavailable features.
2bead0eb cmMakefile: Rename a method to what it really does.
Brad King 10 years ago
parent
commit
6418eef222
3 changed files with 17 additions and 9 deletions
  1. 8 1
      Source/cmGeneratorExpressionEvaluator.cxx
  2. 6 5
      Source/cmMakefile.cxx
  3. 3 3
      Source/cmMakefile.h

+ 8 - 1
Source/cmGeneratorExpressionEvaluator.cxx

@@ -1368,10 +1368,17 @@ static const struct CompileFeaturesNode : public cmGeneratorExpressionNode
     for (LangMap::const_iterator lit = testedFeatures.begin();
           lit != testedFeatures.end(); ++lit)
       {
+      std::vector<std::string> const& langAvailable
+                                              = availableFeatures[lit->first];
       for (std::vector<std::string>::const_iterator it = lit->second.begin();
           it != lit->second.end(); ++it)
         {
-        if (!context->Makefile->HaveFeatureAvailable(target,
+        if (std::find(langAvailable.begin(), langAvailable.end(), *it)
+                                                      == langAvailable.end())
+          {
+          return "0";
+          }
+        if (!context->Makefile->HaveStandardAvailable(target,
                                                       lit->first, *it))
           {
           if (evalLL)

+ 6 - 5
Source/cmMakefile.cxx

@@ -5271,18 +5271,19 @@ CompileFeaturesAvailable(const std::string& lang, std::string *error) const
 }
 
 //----------------------------------------------------------------------------
-bool cmMakefile::HaveFeatureAvailable(cmTarget const* target,
+bool cmMakefile::HaveStandardAvailable(cmTarget const* target,
                                       std::string const& lang,
                                       const std::string& feature) const
 {
   return lang == "C"
-      ? this->HaveCFeatureAvailable(target, feature)
-      : this->HaveCxxFeatureAvailable(target, feature);
+      ? this->HaveCStandardAvailable(target, feature)
+      : this->HaveCxxStandardAvailable(target, feature);
 }
 
 //----------------------------------------------------------------------------
 bool cmMakefile::
-HaveCFeatureAvailable(cmTarget const* target, const std::string& feature) const
+HaveCStandardAvailable(cmTarget const* target,
+                       const std::string& feature) const
 {
   bool needC90 = false;
   bool needC99 = false;
@@ -5359,7 +5360,7 @@ bool cmMakefile::IsLaterStandard(std::string const& lang,
 }
 
 //----------------------------------------------------------------------------
-bool cmMakefile::HaveCxxFeatureAvailable(cmTarget const* target,
+bool cmMakefile::HaveCxxStandardAvailable(cmTarget const* target,
                                          const std::string& feature) const
 {
   bool needCxx98 = false;

+ 3 - 3
Source/cmMakefile.h

@@ -965,7 +965,7 @@ public:
   const char* CompileFeaturesAvailable(const std::string& lang,
                                        std::string *error) const;
 
-  bool HaveFeatureAvailable(cmTarget const* target, std::string const& lang,
+  bool HaveStandardAvailable(cmTarget const* target, std::string const& lang,
                             const std::string& feature) const;
 
   bool IsLaterStandard(std::string const& lang,
@@ -1197,9 +1197,9 @@ private:
   void CheckNeededCxxLanguage(const std::string& feature, bool& needCxx98,
                               bool& needCxx11, bool& needCxx14) const;
 
-  bool HaveCFeatureAvailable(cmTarget const* target,
+  bool HaveCStandardAvailable(cmTarget const* target,
                              const std::string& feature) const;
-  bool HaveCxxFeatureAvailable(cmTarget const* target,
+  bool HaveCxxStandardAvailable(cmTarget const* target,
                                const std::string& feature) const;
 
   mutable bool SuppressWatches;