Merge topic 'ninja-multi-variable-shuffle-again' into release-3.17

c794b70f19 Ninja Multi-Config: Always generate build.ninja
9590c3a400 Generator: Don't allow Ninja Multi-Config variables on other generators
7a63dafafb Ninja Multi-Config: Remove "NMC" from variable names

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4403
diff --git a/Help/generator/Ninja Multi-Config.rst b/Help/generator/Ninja Multi-Config.rst
index 11c59f2..1f68535 100644
--- a/Help/generator/Ninja Multi-Config.rst
+++ b/Help/generator/Ninja Multi-Config.rst
@@ -12,9 +12,10 @@
 instead of only one configuration with :variable:`CMAKE_BUILD_TYPE`. One
 ``build-<Config>.ninja`` file will be generated for each of these
 configurations (with ``<Config>`` being the configuration name.) These files
-are intended to be run with ``ninja -f build-<Config>.ninja``. No
-``build.ninja`` file is generated by default (see below for how to generate
-it.)
+are intended to be run with ``ninja -f build-<Config>.ninja``. A
+``build.ninja`` file is also generated, using the configuration from either
+:variable:`CMAKE_DEFAULT_BUILD_TYPE` or the first item from
+:variable:`CMAKE_CONFIGURATION_TYPES`.
 
 ``cmake --build . --config <Config>`` will always use ``build-<Config>.ninja``
 to build. If no ``--config`` argument is specified, ``cmake --build .`` will
@@ -35,7 +36,7 @@
   Specifies the total set of configurations to build. See the variable's
   documentation for more information.
 
-:variable:`CMAKE_NMC_CROSS_CONFIGS`
+:variable:`CMAKE_CROSS_CONFIGS`
   Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
   configurations available from all ``build-<Config>.ninja`` files.
   This variable activates cross-config mode.
@@ -49,36 +50,36 @@
   The value of this variable must be a subset of
   :variable:`CMAKE_CONFIGURATION_TYPES`.
 
-:variable:`CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG`
+:variable:`CMAKE_DEFAULT_BUILD_TYPE`
   Specifies the configuration to use by default in a ``build.ninja`` file. If
-  this variable is specified, a ``build.ninja`` file is generated which uses
-  build rules from ``build-<Config>.ninja`` by default. All custom commands are
-  executed with this configuration. If the variable is not specified, no
-  ``build.ninja`` file is generated.
+  this variable is specified, ``build.ninja`` uses build rules from
+  ``build-<Config>.ninja`` by default. All custom commands are executed with
+  this configuration. If the variable is not specified, the first item from
+  :variable:`CMAKE_CONFIGURATION_TYPES` is used instead.
 
   The value of this variable must be one of the items from
   :variable:`CMAKE_CONFIGURATION_TYPES`.
 
-:variable:`CMAKE_NMC_DEFAULT_CONFIGS`
+:variable:`CMAKE_DEFAULT_CONFIGS`
   Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
   configurations to build for a target in ``build.ninja``
   if no ``:<Config>`` suffix is specified. If it is set to ``all``, all
-  configurations from :variable:`CMAKE_NMC_CROSS_CONFIGS` are used. If
+  configurations from :variable:`CMAKE_CROSS_CONFIGS` are used. If
   it is not specified, it defaults to
-  :variable:`CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG`.
+  :variable:`CMAKE_DEFAULT_BUILD_TYPE`.
 
   For example, if you set
-  :variable:`CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG` to ``Release``, but
-  set :variable:`CMAKE_NMC_DEFAULT_CONFIGS` to ``Debug`` or ``all``,
+  :variable:`CMAKE_DEFAULT_BUILD_TYPE` to ``Release``, but
+  set :variable:`CMAKE_DEFAULT_CONFIGS` to ``Debug`` or ``all``,
   all ``<target>`` aliases in ``build.ninja`` will resolve to
   ``<target>:Debug`` or ``<target>:all``, but custom commands will still use
   the ``Release`` configuration.
 
   The value of this variable must be a subset of
-  :variable:`CMAKE_NMC_CROSS_CONFIGS` or be the same as
-  :variable:`CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG`. It must not be
-  specified if :variable:`CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG` or
-  :variable:`CMAKE_NMC_CROSS_CONFIGS` is not used.
+  :variable:`CMAKE_CROSS_CONFIGS` or be the same as
+  :variable:`CMAKE_DEFAULT_BUILD_TYPE`. It must not be
+  specified if :variable:`CMAKE_DEFAULT_BUILD_TYPE` or
+  :variable:`CMAKE_CROSS_CONFIGS` is not used.
 
 Consider the following example:
 
@@ -104,8 +105,8 @@
 used to generate ``generated.c``, which would be used to build the ``Debug``
 configuration of ``generated``.
 
-But if :variable:`CMAKE_NMC_CROSS_CONFIGS` is set to ``all``, and you
-run the following instead:
+But if :variable:`CMAKE_CROSS_CONFIGS` is set to ``all``, and you run the
+following instead:
 
 .. code-block:: shell
 
diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst
index 1023a66..a639b5d 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -372,11 +372,14 @@
    /variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
    /variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG
    /variable/CMAKE_CONFIG_POSTFIX
+   /variable/CMAKE_CROSS_CONFIGS
    /variable/CMAKE_CTEST_ARGUMENTS
    /variable/CMAKE_CUDA_SEPARABLE_COMPILATION
    /variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS
    /variable/CMAKE_CUDA_RUNTIME_LIBRARY
    /variable/CMAKE_DEBUG_POSTFIX
+   /variable/CMAKE_DEFAULT_BUILD_TYPE
+   /variable/CMAKE_DEFAULT_CONFIGS
    /variable/CMAKE_DISABLE_PRECOMPILE_HEADERS
    /variable/CMAKE_ENABLE_EXPORTS
    /variable/CMAKE_EXE_LINKER_FLAGS
@@ -428,9 +431,6 @@
    /variable/CMAKE_MODULE_LINKER_FLAGS_INIT
    /variable/CMAKE_MSVCIDE_RUN_PATH
    /variable/CMAKE_MSVC_RUNTIME_LIBRARY
-   /variable/CMAKE_NMC_CROSS_CONFIGS
-   /variable/CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG
-   /variable/CMAKE_NMC_DEFAULT_CONFIGS
    /variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX
    /variable/CMAKE_NO_BUILTIN_CHRPATH
    /variable/CMAKE_NO_SYSTEM_FROM_IMPORTED
diff --git a/Help/variable/CMAKE_NMC_CROSS_CONFIGS.rst b/Help/variable/CMAKE_CROSS_CONFIGS.rst
similarity index 80%
rename from Help/variable/CMAKE_NMC_CROSS_CONFIGS.rst
rename to Help/variable/CMAKE_CROSS_CONFIGS.rst
index 6eb6494..c850af2 100644
--- a/Help/variable/CMAKE_NMC_CROSS_CONFIGS.rst
+++ b/Help/variable/CMAKE_CROSS_CONFIGS.rst
@@ -1,5 +1,5 @@
-CMAKE_NMC_CROSS_CONFIGS
--------------------------------
+CMAKE_CROSS_CONFIGS
+-------------------
 
 Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
 configurations available from all ``build-<Config>.ninja`` files in the
diff --git a/Help/variable/CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG.rst b/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst
similarity index 68%
rename from Help/variable/CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG.rst
rename to Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst
index c0eab56..62ee0d2 100644
--- a/Help/variable/CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG.rst
+++ b/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst
@@ -1,5 +1,5 @@
-CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG
--------------------------------------------
+CMAKE_DEFAULT_BUILD_TYPE
+------------------------
 
 Specifies the configuration to use by default in a ``build.ninja`` file in the
 :generator:`Ninja Multi-Config` generator. See the generator's documentation
diff --git a/Help/variable/CMAKE_NMC_DEFAULT_CONFIGS.rst b/Help/variable/CMAKE_DEFAULT_CONFIGS.rst
similarity index 81%
rename from Help/variable/CMAKE_NMC_DEFAULT_CONFIGS.rst
rename to Help/variable/CMAKE_DEFAULT_CONFIGS.rst
index e2bb017..86d8a5a 100644
--- a/Help/variable/CMAKE_NMC_DEFAULT_CONFIGS.rst
+++ b/Help/variable/CMAKE_DEFAULT_CONFIGS.rst
@@ -1,5 +1,5 @@
-CMAKE_NMC_DEFAULT_CONFIGS
----------------------------------
+CMAKE_DEFAULT_CONFIGS
+---------------------
 
 Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of configurations
 to build for a target in ``build.ninja`` if no ``:<Config>`` suffix is specified in
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index ff6ad9d..0404715 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1361,8 +1361,43 @@
   }
 }
 
+bool cmGlobalGenerator::UnsupportedVariableIsDefined(const std::string& name,
+                                                     bool supported) const
+{
+  if (!supported && this->Makefiles.front()->GetDefinition(name)) {
+    std::ostringstream e;
+    /* clang-format off */
+    e <<
+      "Generator\n"
+      "  " << this->GetName() << "\n"
+      "does not support variable\n"
+      "  " << name << "\n"
+      "but it has been specified."
+      ;
+    /* clang-format on */
+    this->GetCMakeInstance()->IssueMessage(MessageType::FATAL_ERROR, e.str());
+    return true;
+  }
+
+  return false;
+}
+
 bool cmGlobalGenerator::Compute()
 {
+  // Make sure unsupported variables are not used.
+  if (this->UnsupportedVariableIsDefined("CMAKE_DEFAULT_BUILD_TYPE",
+                                         this->SupportsDefaultBuildType())) {
+    return false;
+  }
+  if (this->UnsupportedVariableIsDefined("CMAKE_CROSS_CONFIGS",
+                                         this->SupportsCrossConfigs())) {
+    return false;
+  }
+  if (this->UnsupportedVariableIsDefined("CMAKE_DEFAULT_CONFIGS",
+                                         this->SupportsDefaultConfigs())) {
+    return false;
+  }
+
   // Some generators track files replaced during the Generate.
   // Start with an empty vector:
   this->FilesReplacedDuringGenerate.clear();
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 0e7e03d..ba997b2 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -455,6 +455,10 @@
   /** Generate an <output>.rule file path for a given command output.  */
   virtual std::string GenerateRuleFile(std::string const& output) const;
 
+  virtual bool SupportsDefaultBuildType() const { return false; }
+  virtual bool SupportsCrossConfigs() const { return false; }
+  virtual bool SupportsDefaultConfigs() const { return false; }
+
   static std::string EscapeJSON(const std::string& s);
 
   void ProcessEvaluationFiles();
@@ -674,6 +678,9 @@
 
   virtual const char* GetBuildIgnoreErrorsFlag() const { return nullptr; }
 
+  bool UnsupportedVariableIsDefined(const std::string& name,
+                                    bool supported) const;
+
   // Cache directory content and target files to be built.
   struct DirectoryContent
   {
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index b1e26b2..5243c36 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -2488,8 +2488,7 @@
       return false;
     }
     *this->DefaultFileStream
-      << "# This file is a convenience file generated by\n"
-      << "# CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG.\n\n"
+      << "# Build using rules for '" << this->DefaultFileConfig << "'.\n\n"
       << "include " << GetNinjaImplFilename(this->DefaultFileConfig) << "\n\n";
   }
 
@@ -2606,9 +2605,6 @@
 
 std::string cmGlobalNinjaMultiGenerator::GetDefaultBuildConfig() const
 {
-  if (this->DefaultFileConfig.empty()) {
-    return "Debug";
-  }
   return "";
 }
 
@@ -2624,12 +2620,14 @@
   std::set<std::string> configs(configsVec.cbegin(), configsVec.cend());
 
   this->DefaultFileConfig =
-    state.GetSafeCacheEntryValue("CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG");
-  if (!this->DefaultFileConfig.empty() &&
-      !configs.count(this->DefaultFileConfig)) {
+    state.GetSafeCacheEntryValue("CMAKE_DEFAULT_BUILD_TYPE");
+  if (this->DefaultFileConfig.empty()) {
+    this->DefaultFileConfig = configsVec.front();
+  }
+  if (!configs.count(this->DefaultFileConfig)) {
     std::ostringstream msg;
     msg << "The configuration specified by "
-        << "CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG (" << this->DefaultFileConfig
+        << "CMAKE_DEFAULT_BUILD_TYPE (" << this->DefaultFileConfig
         << ") is not present in CMAKE_CONFIGURATION_TYPES";
     this->GetCMakeInstance()->IssueMessage(MessageType::FATAL_ERROR,
                                            msg.str());
@@ -2637,12 +2635,12 @@
   }
 
   std::vector<std::string> crossConfigsVec;
-  cmExpandList(state.GetSafeCacheEntryValue("CMAKE_NMC_CROSS_CONFIGS"),
+  cmExpandList(state.GetSafeCacheEntryValue("CMAKE_CROSS_CONFIGS"),
                crossConfigsVec);
   auto crossConfigs = ListSubsetWithAll(configs, configs, crossConfigsVec);
   if (!crossConfigs) {
     std::ostringstream msg;
-    msg << "CMAKE_NMC_CROSS_CONFIGS is not a subset of "
+    msg << "CMAKE_CROSS_CONFIGS is not a subset of "
         << "CMAKE_CONFIGURATION_TYPES";
     this->GetCMakeInstance()->IssueMessage(MessageType::FATAL_ERROR,
                                            msg.str());
@@ -2651,7 +2649,7 @@
   this->CrossConfigs = *crossConfigs;
 
   auto defaultConfigsString =
-    state.GetSafeCacheEntryValue("CMAKE_NMC_DEFAULT_CONFIGS");
+    state.GetSafeCacheEntryValue("CMAKE_DEFAULT_CONFIGS");
   if (defaultConfigsString.empty()) {
     defaultConfigsString = this->DefaultFileConfig;
   }
@@ -2659,9 +2657,8 @@
       defaultConfigsString != this->DefaultFileConfig &&
       (this->DefaultFileConfig.empty() || this->CrossConfigs.empty())) {
     std::ostringstream msg;
-    msg << "CMAKE_NMC_DEFAULT_CONFIGS cannot be used without "
-        << "CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG or "
-        << "CMAKE_NMC_CROSS_CONFIGS";
+    msg << "CMAKE_DEFAULT_CONFIGS cannot be used without "
+        << "CMAKE_DEFAULT_BUILD_TYPE or CMAKE_CROSS_CONFIGS";
     this->GetCMakeInstance()->IssueMessage(MessageType::FATAL_ERROR,
                                            msg.str());
     return false;
@@ -2675,8 +2672,7 @@
                         this->CrossConfigs, defaultConfigsVec);
     if (!defaultConfigs) {
       std::ostringstream msg;
-      msg << "CMAKE_NMC_DEFAULT_CONFIGS is not a subset of "
-          << "CMAKE_NMC_CROSS_CONFIGS";
+      msg << "CMAKE_DEFAULT_CONFIGS is not a subset of CMAKE_CROSS_CONFIGS";
       this->GetCMakeInstance()->IssueMessage(MessageType::FATAL_ERROR,
                                              msg.str());
       return false;
diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h
index 3db8356..5668dd1 100644
--- a/Source/cmGlobalNinjaGenerator.h
+++ b/Source/cmGlobalNinjaGenerator.h
@@ -640,6 +640,10 @@
 
   bool ReadCacheEntriesForBuild(const cmState& state) override;
 
+  bool SupportsDefaultBuildType() const override { return true; }
+  bool SupportsCrossConfigs() const override { return true; }
+  bool SupportsDefaultConfigs() const override { return true; }
+
 protected:
   bool OpenBuildFileStreams() override;
   void CloseBuildFileStreams() override;
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-result.txt b/Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS-result.txt
similarity index 100%
rename from Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-result.txt
rename to Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS-result.txt
diff --git a/Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS-stderr.txt b/Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS-stderr.txt
new file mode 100644
index 0000000..a5d149d
--- /dev/null
+++ b/Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS-stderr.txt
@@ -0,0 +1,11 @@
+^CMake Error:
+  Generator
+
+    [^
+]*
+
+  does not support variable
+
+    CMAKE_CROSS_CONFIGS
+
+  but it has been specified.
diff --git a/Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS.cmake b/Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS.cmake
new file mode 100644
index 0000000..75d0c47
--- /dev/null
+++ b/Tests/RunCMake/Configure/NoCMAKE_CROSS_CONFIGS.cmake
@@ -0,0 +1 @@
+set(CMAKE_CROSS_CONFIGS "")
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-result.txt b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE-result.txt
similarity index 100%
copy from Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-result.txt
copy to Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE-result.txt
diff --git a/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE-stderr.txt b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE-stderr.txt
new file mode 100644
index 0000000..8aa3ed3
--- /dev/null
+++ b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE-stderr.txt
@@ -0,0 +1,11 @@
+^CMake Error:
+  Generator
+
+    [^
+]*
+
+  does not support variable
+
+    CMAKE_DEFAULT_BUILD_TYPE
+
+  but it has been specified.
diff --git a/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE.cmake b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE.cmake
new file mode 100644
index 0000000..64c7feb
--- /dev/null
+++ b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_BUILD_TYPE.cmake
@@ -0,0 +1 @@
+set(CMAKE_DEFAULT_BUILD_TYPE "")
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-result.txt b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS-result.txt
similarity index 100%
copy from Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-result.txt
copy to Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS-result.txt
diff --git a/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS-stderr.txt b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS-stderr.txt
new file mode 100644
index 0000000..040bf4d
--- /dev/null
+++ b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS-stderr.txt
@@ -0,0 +1,11 @@
+^CMake Error:
+  Generator
+
+    [^
+]*
+
+  does not support variable
+
+    CMAKE_DEFAULT_CONFIGS
+
+  but it has been specified.
diff --git a/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS.cmake b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS.cmake
new file mode 100644
index 0000000..5b65172
--- /dev/null
+++ b/Tests/RunCMake/Configure/NoCMAKE_DEFAULT_CONFIGS.cmake
@@ -0,0 +1 @@
+set(CMAKE_DEFAULT_CONFIGS "")
diff --git a/Tests/RunCMake/Configure/RunCMakeTest.cmake b/Tests/RunCMake/Configure/RunCMakeTest.cmake
index 76d843c..9fd4499 100644
--- a/Tests/RunCMake/Configure/RunCMakeTest.cmake
+++ b/Tests/RunCMake/Configure/RunCMakeTest.cmake
@@ -50,3 +50,9 @@
 run_cmake(RemoveCache)
 file(REMOVE "${RunCMake_TEST_BINARY_DIR}/CMakeCache.txt")
 run_cmake(RemoveCache)
+
+if(NOT RunCMake_GENERATOR MATCHES "^Ninja Multi-Config$")
+  run_cmake(NoCMAKE_CROSS_CONFIGS)
+  run_cmake(NoCMAKE_DEFAULT_BUILD_TYPE)
+  run_cmake(NoCMAKE_DEFAULT_CONFIGS)
+endif()
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidCrossConfigs-stderr.txt b/Tests/RunCMake/NinjaMultiConfig/InvalidCrossConfigs-stderr.txt
index 6e165e8..76c5ecf 100644
--- a/Tests/RunCMake/NinjaMultiConfig/InvalidCrossConfigs-stderr.txt
+++ b/Tests/RunCMake/NinjaMultiConfig/InvalidCrossConfigs-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error:
-  CMAKE_NMC_CROSS_CONFIGS is not a subset of CMAKE_CONFIGURATION_TYPES
+  CMAKE_CROSS_CONFIGS is not a subset of CMAKE_CONFIGURATION_TYPES
 
 
 CMake Generate step failed\.  Build files cannot be regenerated correctly\.$
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultBuildFileConfig-stderr.txt b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultBuildFileConfig-stderr.txt
index 114a8a3..5aa9038 100644
--- a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultBuildFileConfig-stderr.txt
+++ b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultBuildFileConfig-stderr.txt
@@ -1,6 +1,6 @@
 ^CMake Error:
-  The configuration specified by CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG
-  \(RelWithDebInfo\) is not present in CMAKE_CONFIGURATION_TYPES
+  The configuration specified by CMAKE_DEFAULT_BUILD_TYPE \(RelWithDebInfo\) is
+  not present in CMAKE_CONFIGURATION_TYPES
 
 
 CMake Generate step failed\.  Build files cannot be regenerated correctly\.$
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsCross-stderr.txt b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsCross-stderr.txt
index 8d52189..6c2df86 100644
--- a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsCross-stderr.txt
+++ b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsCross-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error:
-  CMAKE_NMC_DEFAULT_CONFIGS is not a subset of CMAKE_NMC_CROSS_CONFIGS
+  CMAKE_DEFAULT_CONFIGS is not a subset of CMAKE_CROSS_CONFIGS
 
 
 CMake Generate step failed\.  Build files cannot be regenerated correctly\.$
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoCross-stderr.txt b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoCross-stderr.txt
index f9cb56d..5d090a0 100644
--- a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoCross-stderr.txt
+++ b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoCross-stderr.txt
@@ -1,6 +1,6 @@
 ^CMake Error:
-  CMAKE_NMC_DEFAULT_CONFIGS cannot be used without
-  CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG or CMAKE_NMC_CROSS_CONFIGS
+  CMAKE_DEFAULT_CONFIGS cannot be used without CMAKE_DEFAULT_BUILD_TYPE or
+  CMAKE_CROSS_CONFIGS
 
 
 CMake Generate step failed\.  Build files cannot be regenerated correctly\.$
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-stderr.txt b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-stderr.txt
deleted file mode 100644
index f9cb56d..0000000
--- a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile-stderr.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-^CMake Error:
-  CMAKE_NMC_DEFAULT_CONFIGS cannot be used without
-  CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG or CMAKE_NMC_CROSS_CONFIGS
-
-
-CMake Generate step failed\.  Build files cannot be regenerated correctly\.$
diff --git a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile.cmake b/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile.cmake
deleted file mode 100644
index e69de29..0000000
--- a/Tests/RunCMake/NinjaMultiConfig/InvalidDefaultConfigsNoDefaultFile.cmake
+++ /dev/null
diff --git a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake
index a608e9e..b07b4f7 100644
--- a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake
+++ b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake
@@ -81,7 +81,9 @@
 set(RunCMake_TEST_NO_CLEAN 1)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Simple-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=RelWithDebInfo;-DCMAKE_NMC_CROSS_CONFIGS=all")
+# IMPORTANT: Setting RelWithDebInfo as the first item in CMAKE_CONFIGURATION_TYPES
+# generates a build.ninja file with that configuration
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=RelWithDebInfo\\;Debug\\;Release\\;MinSizeRel;-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(Simple)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -113,7 +115,7 @@
 run_ninja(Simple default-build-file-all build.ninja all)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleDefaultBuildAlias-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=Release;-DCMAKE_NMC_DEFAULT_CONFIGS=all;-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=all;-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(SimpleDefaultBuildAlias)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -122,7 +124,7 @@
 run_ninja(SimpleDefaultBuildAlias clean build.ninja clean)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleDefaultBuildAliasList-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=Release;-DCMAKE_NMC_DEFAULT_CONFIGS=Debug\\;Release;-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=Debug\\;Release;-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(SimpleDefaultBuildAliasList)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -133,7 +135,7 @@
 run_ninja(SimpleDefaultBuildAliasList clean-configs build.ninja clean)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleDefaultBuildAliasListCross-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=RelWithDebInfo;-DCMAKE_NMC_DEFAULT_CONFIGS=all;-DCMAKE_NMC_CROSS_CONFIGS=Debug\\;Release")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=RelWithDebInfo;-DCMAKE_DEFAULT_CONFIGS=all;-DCMAKE_CROSS_CONFIGS=Debug\\;Release")
 run_cmake_configure(SimpleDefaultBuildAliasListCross)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -141,27 +143,23 @@
 
 unset(RunCMake_TEST_BINARY_DIR)
 
-set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_NMC_CROSS_CONFIGS=Debug\\;Release\\;RelWithDebInfo")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_CROSS_CONFIGS=Debug\\;Release\\;RelWithDebInfo")
 run_cmake(InvalidCrossConfigs)
 unset(RunCMake_TEST_OPTIONS)
 
-set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=RelWithDebInfo")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_DEFAULT_BUILD_TYPE=RelWithDebInfo")
 run_cmake(InvalidDefaultBuildFileConfig)
 unset(RunCMake_TEST_OPTIONS)
 
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_CROSS_CONFIGS=Debug\\;Release;-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=Release;-DCMAKE_NMC_DEFAULT_CONFIGS=Debug\\;Release\\;RelWithDebInfo")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=Debug\\;Release;-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=Debug\\;Release\\;RelWithDebInfo")
 run_cmake(InvalidDefaultConfigsCross)
 unset(RunCMake_TEST_OPTIONS)
 
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_CROSS_CONFIGS=Debug\\;Release;-DCMAKE_NMC_DEFAULT_CONFIGS=all")
-run_cmake(InvalidDefaultConfigsNoDefaultFile)
-unset(RunCMake_TEST_OPTIONS)
-
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=Release;-DCMAKE_NMC_DEFAULT_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=all")
 run_cmake(InvalidDefaultConfigsNoCross)
 unset(RunCMake_TEST_OPTIONS)
 
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=Release")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=Release")
 run_cmake(DefaultBuildFileConfig)
 unset(RunCMake_TEST_OPTIONS)
 
@@ -178,7 +176,7 @@
 run_cmake_build(SimpleNoCross all-clean Debug clean:all)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleCrossConfigs-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_CROSS_CONFIGS=Debug\\;Release")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=Debug\\;Release")
 run_cmake_configure(SimpleCrossConfigs)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
 run_ninja(SimpleCrossConfigs release-in-release-graph build-Release.ninja simpleexe)
@@ -192,21 +190,21 @@
 run_cmake_build(SimpleCrossConfigs all-relwithdebinfo-in-release-graph Release all:RelWithDebInfo)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Framework-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(Framework)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
 run_cmake_build(Framework framework Debug all)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/FrameworkDependencyAutogen-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(FrameworkDependencyAutogen)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
 run_cmake_build(FrameworkDependencyAutogen framework Release test2:Debug)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandGenerator-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(CustomCommandGenerator)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -223,7 +221,7 @@
 run_cmake_command(CustomCommandGenerator-release-in-debug-graph-generated "${TARGET_FILE_generated_Release}")
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandsAndTargets-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(CustomCommandsAndTargets)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -243,7 +241,7 @@
 run_cmake(CustomCommandDepfile)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/PostfixAndLocation-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(PostfixAndLocation)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -258,14 +256,14 @@
 run_cmake_build(Clean release-clean Release clean)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AdditionalCleanFiles-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(AdditionalCleanFiles)
 unset(RunCMake_TEST_OPTIONS)
 run_cmake_build(AdditionalCleanFiles release-clean Release clean)
 run_ninja(AdditionalCleanFiles all-clean build-Debug.ninja clean:all)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Install-build)
-set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_TEST_BINARY_DIR}/install;-DCMAKE_NMC_CROSS_CONFIGS=all")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_TEST_BINARY_DIR}/install;-DCMAKE_CROSS_CONFIGS=all")
 run_cmake_configure(Install)
 unset(RunCMake_TEST_OPTIONS)
 include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
@@ -287,7 +285,7 @@
 
 if(CMake_TEST_Qt5)
   set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Qt5-build)
-  set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_CROSS_CONFIGS=all")
+  set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
   run_cmake_configure(Qt5)
   unset(RunCMake_TEST_OPTIONS)
   include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)