From 4db08807db2fc0db6ab0c4d438ddb3f20969d2fb Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@qt.io>
Date: Mon, 11 Jul 2016 15:44:37 +0200
Subject: [PATCH] CMake: Report whether generators support platforms

---
 Source/cmGlobalGeneratorFactory.h          | 6 ++++++
 Source/cmGlobalGhsMultiGenerator.h         | 6 ++++++
 Source/cmGlobalNinjaGenerator.h            | 6 ++++++
 Source/cmGlobalUnixMakefileGenerator3.h    | 6 ++++++
 Source/cmGlobalVisualStudio10Generator.cxx | 1 +
 Source/cmGlobalVisualStudio11Generator.cxx | 1 +
 Source/cmGlobalVisualStudio12Generator.cxx | 1 +
 Source/cmGlobalVisualStudio14Generator.cxx | 1 +
 Source/cmGlobalVisualStudio7Generator.h    | 6 ++++++
 Source/cmGlobalVisualStudio8Generator.cxx  | 1 +
 Source/cmGlobalVisualStudio9Generator.cxx  | 1 +
 Source/cmGlobalXCodeGenerator.cxx          | 1 +
 Source/cmake.cxx                           | 2 ++
 Source/cmake.h                             | 1 +
 14 files changed, 40 insertions(+)

diff --git a/Source/cmGlobalGeneratorFactory.h b/Source/cmGlobalGeneratorFactory.h
index 67875197d0..74d3145386 100644
--- a/Source/cmGlobalGeneratorFactory.h
+++ b/Source/cmGlobalGeneratorFactory.h
@@ -41,6 +41,9 @@ public:
 
   /** Determine whether or not this generator supports toolsets */
   virtual bool SupportsToolset() const = 0;
+
+  /** Determine whether or not this generator supports platforms */
+  virtual bool SupportsPlatform() const = 0;
 };
 
 template <class T>
@@ -71,6 +74,9 @@ public:
 
   /** Determine whether or not this generator supports toolsets */
   bool SupportsToolset() const CM_OVERRIDE { return T::SupportsToolset(); }
+
+  /** Determine whether or not this generator supports platforms */
+  bool SupportsPlatform() const CM_OVERRIDE { return T::SupportsPlatform(); }
 };
 
 #endif
diff --git a/Source/cmGlobalGhsMultiGenerator.h b/Source/cmGlobalGhsMultiGenerator.h
index 473d153b96..b2aac45a92 100644
--- a/Source/cmGlobalGhsMultiGenerator.h
+++ b/Source/cmGlobalGhsMultiGenerator.h
@@ -51,6 +51,12 @@ public:
    */
   static bool SupportsToolset() { return false; }
 
+  /**
+   * Utilized by the generator factory to determine if this generator
+   * supports platforms.
+   */
+  static bool SupportsPlatform() { return false; }
+
   /**
   * Try to determine system information such as shared library
   * extension, pthreads, byte order etc.
diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h
index 69ec6cab89..c74973e175 100644
--- a/Source/cmGlobalNinjaGenerator.h
+++ b/Source/cmGlobalNinjaGenerator.h
@@ -80,6 +80,12 @@ public:
    */
   static bool SupportsToolset() { return false; }
 
+  /**
+   * Utilized by the generator factory to determine if this generator
+   * supports platforms.
+   */
+  static bool SupportsPlatform() { return false; }
+
   /**
    * Write a build statement to @a os with the @a comment using
    * the @a rule the list of @a outputs files and inputs.
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h
index 98969ff965..ceb4140bfa 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -75,6 +75,12 @@ public:
    */
   static bool SupportsToolset() { return false; }
 
+  /**
+   * Utilized by the generator factory to determine if this generator
+   * supports platforms.
+   */
+  static bool SupportsPlatform() { return false; }
+
   /** Get the documentation entry for this generator.  */
   static void GetDocumentation(cmDocumentationEntry& entry);
 
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 2379266276..c13c622f54 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -80,6 +80,7 @@ public:
   }
 
   bool SupportsToolset() const CM_OVERRIDE { return true; }
+  bool SupportsPlatform() const CM_OVERRIDE { return true; }
 };
 
 cmGlobalGeneratorFactory* cmGlobalVisualStudio10Generator::NewFactory()
diff --git a/Source/cmGlobalVisualStudio11Generator.cxx b/Source/cmGlobalVisualStudio11Generator.cxx
index 106f1dd446..1478a17750 100644
--- a/Source/cmGlobalVisualStudio11Generator.cxx
+++ b/Source/cmGlobalVisualStudio11Generator.cxx
@@ -92,6 +92,7 @@ public:
   }
 
   bool SupportsToolset() const CM_OVERRIDE { return true; }
+  bool SupportsPlatform() const CM_OVERRIDE { return true; }
 };
 
 cmGlobalGeneratorFactory* cmGlobalVisualStudio11Generator::NewFactory()
diff --git a/Source/cmGlobalVisualStudio12Generator.cxx b/Source/cmGlobalVisualStudio12Generator.cxx
index 2b32153b51..3047171055 100644
--- a/Source/cmGlobalVisualStudio12Generator.cxx
+++ b/Source/cmGlobalVisualStudio12Generator.cxx
@@ -74,6 +74,7 @@ public:
   }
 
   bool SupportsToolset() const CM_OVERRIDE { return true; }
+  bool SupportsPlatform() const CM_OVERRIDE { return true; }
 };
 
 cmGlobalGeneratorFactory* cmGlobalVisualStudio12Generator::NewFactory()
diff --git a/Source/cmGlobalVisualStudio14Generator.cxx b/Source/cmGlobalVisualStudio14Generator.cxx
index 920d995878..254682c892 100644
--- a/Source/cmGlobalVisualStudio14Generator.cxx
+++ b/Source/cmGlobalVisualStudio14Generator.cxx
@@ -74,6 +74,7 @@ public:
   }
 
   bool SupportsToolset() const CM_OVERRIDE { return true; }
+  bool SupportsPlatform() const CM_OVERRIDE { return true; }
 };
 
 cmGlobalGeneratorFactory* cmGlobalVisualStudio14Generator::NewFactory()
diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h
index 2092343c09..8a33ee0f7b 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/Source/cmGlobalVisualStudio7Generator.h
@@ -47,6 +47,12 @@ public:
    */
   static bool SupportsToolset() { return false; }
 
+  /**
+   * Utilized by the generator factory to determine if this generator
+   * supports platforms.
+   */
+  static bool SupportsPlatform() { return false; }
+
   /**
    * Try to determine system information such as shared library
    * extension, pthreads, byte order etc.
diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx
index 3cade96283..2c0168e1be 100644
--- a/Source/cmGlobalVisualStudio8Generator.cxx
+++ b/Source/cmGlobalVisualStudio8Generator.cxx
@@ -83,6 +83,7 @@ public:
   }
 
   bool SupportsToolset() const CM_OVERRIDE { return false; }
+  bool SupportsPlatform() const CM_OVERRIDE { return true; }
 };
 
 cmGlobalGeneratorFactory* cmGlobalVisualStudio8Generator::NewFactory()
diff --git a/Source/cmGlobalVisualStudio9Generator.cxx b/Source/cmGlobalVisualStudio9Generator.cxx
index b65a5a93b6..acc7baa6a1 100644
--- a/Source/cmGlobalVisualStudio9Generator.cxx
+++ b/Source/cmGlobalVisualStudio9Generator.cxx
@@ -86,6 +86,7 @@ public:
   }
 
   bool SupportsToolset() const CM_OVERRIDE { return false; }
+  bool SupportsPlatform() const CM_OVERRIDE { return true; }
 };
 
 cmGlobalGeneratorFactory* cmGlobalVisualStudio9Generator::NewFactory()
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 7b085d03de..23fad512a5 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -122,6 +122,7 @@ public:
   }
 
   bool SupportsToolset() const CM_OVERRIDE { return true; }
+  bool SupportsPlatform() const CM_OVERRIDE { return false; }
 };
 
 cmGlobalXCodeGenerator::cmGlobalXCodeGenerator(cmake* cm,
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index c5976053ee..fceec16923 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -853,6 +853,7 @@ void cmake::GetRegisteredGenerators(std::vector<GeneratorInfo>& generators)
     for (size_t j = 0; j < names.size(); ++j) {
       GeneratorInfo info;
       info.supportsToolset = (*i)->SupportsToolset();
+      info.supportsPlatform = (*i)->SupportsPlatform();
       info.name = names[j];
       generators.push_back(info);
     }
@@ -865,6 +866,7 @@ void cmake::GetRegisteredGenerators(std::vector<GeneratorInfo>& generators)
     GeneratorInfo info;
     info.name = i->first;
     info.supportsToolset = false;
+    info.supportsPlatform = false;
     generators.push_back(info);
   }
 }
diff --git a/Source/cmake.h b/Source/cmake.h
index 4a5376d99d..4ca2a80bac 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -104,6 +104,7 @@ public:
   {
     std::string name;
     bool supportsToolset;
+    bool supportsPlatform;
   };
 
   typedef std::map<std::string, cmInstalledFile> InstalledFilesMap;
-- 
GitLab