Browse Source

Add GENERATOR_IS_MULTI_CONFIG global property

Fixes: #16768
Bastien Schatt 8 years ago
parent
commit
38fd5866c0

+ 1 - 0
Help/manual/cmake-properties.7.rst

@@ -31,6 +31,7 @@ Properties of Global Scope
    /prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS
    /prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS
    /prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING
+   /prop_gbl/GENERATOR_IS_MULTI_CONFIG
    /prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE
    /prop_gbl/GLOBAL_DEPENDS_NO_CYCLES
    /prop_gbl/IN_TRY_COMPILE

+ 9 - 0
Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst

@@ -0,0 +1,9 @@
+GENERATOR_IS_MULTI_CONFIG
+-------------------------
+
+Read-only property that is true on multi-configuration generators.
+
+True when using a multi-configuration generator
+(such as :ref:`Visual Studio Generators` or :generator:`Xcode`).
+Multi-config generators use :variable:`CMAKE_CONFIGURATION_TYPES`
+as the set of configurations and ignore :variable:`CMAKE_BUILD_TYPE`.

+ 6 - 0
Help/release/dev/prop-is-multi-config.rst

@@ -0,0 +1,6 @@
+prop-is-multi-config
+--------------------
+
+* A :prop_gbl:`GENERATOR_IS_MULTI_CONFIG` global property was
+  added to determine whether the current generator is a multi-configuration
+  generator (such as :ref:`Visual Studio Generators` or :generator:`Xcode`).

+ 1 - 0
Source/cmGlobalGenerator.cxx

@@ -96,6 +96,7 @@ cmGlobalGenerator::cmGlobalGenerator(cmake* cm)
   this->ConfigureDoneCMP0026AndCMP0024 = false;
   this->FirstTimeProgress = 0.0f;
 
+  cm->GetState()->SetIsGeneratorMultiConfig(false);
   cm->GetState()->SetMinGWMake(false);
   cm->GetState()->SetMSYSShell(false);
   cm->GetState()->SetNMake(false);

+ 1 - 0
Source/cmGlobalVisualStudioGenerator.cxx

@@ -20,6 +20,7 @@
 cmGlobalVisualStudioGenerator::cmGlobalVisualStudioGenerator(cmake* cm)
   : cmGlobalGenerator(cm)
 {
+  cm->GetState()->SetIsGeneratorMultiConfig(true);
   cm->GetState()->SetWindowsShell(true);
   cm->GetState()->SetWindowsVSIDE(true);
 }

+ 2 - 0
Source/cmGlobalXCodeGenerator.cxx

@@ -151,6 +151,8 @@ cmGlobalXCodeGenerator::cmGlobalXCodeGenerator(cmake* cm,
   this->CurrentMakefile = 0;
   this->CurrentLocalGenerator = 0;
   this->XcodeBuildCommandInitialized = false;
+
+  cm->GetState()->SetIsGeneratorMultiConfig(true);
 }
 
 cmGlobalGeneratorFactory* cmGlobalXCodeGenerator::NewFactory()

+ 14 - 0
Source/cmState.cxx

@@ -20,6 +20,7 @@
 
 cmState::cmState()
   : IsInTryCompile(false)
+  , IsGeneratorMultiConfig(false)
   , WindowsShell(false)
   , WindowsVSIDE(false)
   , WatcomWMake(false)
@@ -364,6 +365,16 @@ void cmState::SetIsInTryCompile(bool b)
   this->IsInTryCompile = b;
 }
 
+bool cmState::GetIsGeneratorMultiConfig() const
+{
+  return this->IsGeneratorMultiConfig;
+}
+
+void cmState::SetIsGeneratorMultiConfig(bool b)
+{
+  this->IsGeneratorMultiConfig = b;
+}
+
 void cmState::RenameCommand(std::string const& oldName,
                             std::string const& newName)
 {
@@ -481,6 +492,9 @@ const char* cmState::GetGlobalProperty(const std::string& prop)
   } else if (prop == "IN_TRY_COMPILE") {
     this->SetGlobalProperty("IN_TRY_COMPILE",
                             this->IsInTryCompile ? "1" : "0");
+  } else if (prop == "GENERATOR_IS_MULTI_CONFIG") {
+    this->SetGlobalProperty("GENERATOR_IS_MULTI_CONFIG",
+                            this->IsGeneratorMultiConfig ? "1" : "0");
   } else if (prop == "ENABLED_LANGUAGES") {
     std::string langs;
     langs = cmJoin(this->EnabledLanguages, ";");

+ 4 - 0
Source/cmState.h

@@ -116,6 +116,9 @@ public:
   bool GetIsInTryCompile() const;
   void SetIsInTryCompile(bool b);
 
+  bool GetIsGeneratorMultiConfig() const;
+  void SetIsGeneratorMultiConfig(bool b);
+
   cmCommand* GetCommand(std::string const& name) const;
   void AddCommand(cmCommand* command);
   void RemoveUnscriptableCommands();
@@ -174,6 +177,7 @@ private:
   std::string SourceDirectory;
   std::string BinaryDirectory;
   bool IsInTryCompile;
+  bool IsGeneratorMultiConfig;
   bool WindowsShell;
   bool WindowsVSIDE;
   bool WatcomWMake;