From 03bd9c4c10741073e9f39dee6c5ee6000a2b1da2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 29 Jun 2021 14:18:54 -0400 Subject: cmMakefile: Add helper to initialize CMAKE_CONFIGURATION_TYPES Factor out duplicate code from the Ninja Multi-Config, Visual Studio, and Xcode generators. --- Source/cmGlobalNinjaGenerator.cxx | 9 +-------- Source/cmGlobalVisualStudio7Generator.cxx | 9 +-------- Source/cmGlobalXCodeGenerator.cxx | 9 +-------- Source/cmMakefile.cxx | 13 +++++++++++++ Source/cmMakefile.h | 2 ++ 5 files changed, 18 insertions(+), 24 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 2d36fd8..47a931d 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -920,14 +920,7 @@ void cmGlobalNinjaGenerator::EnableLanguage( std::vector const& langs, cmMakefile* mf, bool optional) { if (this->IsMultiConfig()) { - if (!mf->GetDefinition("CMAKE_CONFIGURATION_TYPES")) { - mf->AddCacheDefinition( - "CMAKE_CONFIGURATION_TYPES", "Debug;Release;RelWithDebInfo", - "Semicolon separated list of supported configuration types, only " - "supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything " - "else will be ignored", - cmStateEnums::STRING); - } + mf->InitCMAKE_CONFIGURATION_TYPES("Debug;Release;RelWithDebInfo"); } this->cmGlobalGenerator::EnableLanguage(langs, mf, optional); diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 0c85a044..f8aa172 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -107,14 +107,7 @@ void cmGlobalVisualStudio7Generator::EnableLanguage( { mf->AddDefinition("CMAKE_GENERATOR_RC", "rc"); mf->AddDefinition("CMAKE_GENERATOR_NO_COMPILER_ENV", "1"); - if (!mf->GetDefinition("CMAKE_CONFIGURATION_TYPES")) { - mf->AddCacheDefinition( - "CMAKE_CONFIGURATION_TYPES", "Debug;Release;MinSizeRel;RelWithDebInfo", - "Semicolon separated list of supported configuration types, " - "only supports Debug, Release, MinSizeRel, and RelWithDebInfo, " - "anything else will be ignored.", - cmStateEnums::STRING); - } + mf->InitCMAKE_CONFIGURATION_TYPES("Debug;Release;MinSizeRel;RelWithDebInfo"); // Create list of configurations requested by user's cache, if any. this->cmGlobalVisualStudioGenerator::EnableLanguage(lang, mf, optional); diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 693a11c..f513942 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -431,14 +431,7 @@ void cmGlobalXCodeGenerator::EnableLanguage( { mf->AddDefinition("XCODE", "1"); mf->AddDefinition("XCODE_VERSION", this->VersionString); - if (!mf->GetDefinition("CMAKE_CONFIGURATION_TYPES")) { - mf->AddCacheDefinition( - "CMAKE_CONFIGURATION_TYPES", "Debug;Release;MinSizeRel;RelWithDebInfo", - "Semicolon separated list of supported configuration types, " - "only supports Debug, Release, MinSizeRel, and RelWithDebInfo, " - "anything else will be ignored.", - cmStateEnums::STRING); - } + mf->InitCMAKE_CONFIGURATION_TYPES("Debug;Release;MinSizeRel;RelWithDebInfo"); mf->AddDefinition("CMAKE_GENERATOR_NO_COMPILER_ENV", "1"); this->cmGlobalGenerator::EnableLanguage(lang, mf, optional); this->ComputeArchitectures(mf); diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index c970abe..120cae7 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3182,6 +3182,19 @@ void cmMakefile::RemoveVariablesInString(std::string& source, } } +void cmMakefile::InitCMAKE_CONFIGURATION_TYPES(std::string const& genDefault) +{ + if (this->GetDefinition("CMAKE_CONFIGURATION_TYPES")) { + return; + } + this->AddCacheDefinition( + "CMAKE_CONFIGURATION_TYPES", genDefault, + "Semicolon separated list of supported configuration types, " + "only supports Debug, Release, MinSizeRel, and RelWithDebInfo, " + "anything else will be ignored.", + cmStateEnums::STRING); +} + std::string cmMakefile::GetDefaultConfiguration() const { if (this->GetGlobalGenerator()->IsMultiConfig()) { diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 77e9c74..14c1a0f 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -310,6 +310,8 @@ public: */ void SetProjectName(std::string const& name); + void InitCMAKE_CONFIGURATION_TYPES(std::string const& genDefault); + /* Get the default configuration */ std::string GetDefaultConfiguration() const; -- cgit v0.12 From e96169a3eca6f3cda5aa3e9dac2c7e0b6041b44d Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 29 Jun 2021 13:53:38 -0400 Subject: Help: Cross-reference CMAKE_CONFIGURATION_TYPES from CMAKE_BUILD_TYPE The other direction is already linked. --- Help/variable/CMAKE_BUILD_TYPE.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Help/variable/CMAKE_BUILD_TYPE.rst b/Help/variable/CMAKE_BUILD_TYPE.rst index 405f7d5..dd892fa 100644 --- a/Help/variable/CMAKE_BUILD_TYPE.rst +++ b/Help/variable/CMAKE_BUILD_TYPE.rst @@ -23,3 +23,6 @@ Note that configuration names are case-insensitive. The value of this variable will be the same as it is specified when invoking CMake. For instance, if ``-DCMAKE_BUILD_TYPE=ReLeAsE`` is specified, then the value of ``CMAKE_BUILD_TYPE`` will be ``ReLeAsE``. + +See :variable:`CMAKE_CONFIGURATION_TYPES` for specifying the configuration +with multi-config generators. -- cgit v0.12 From 6986a382a912f4b982f4b20a6e04ff1d773ef1eb Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 29 Jun 2021 13:55:26 -0400 Subject: Help: Document when CMAKE_BUILD_TYPE and CMAKE_CONFIGURATION_TYPES are set Fixes: #19247 --- Help/variable/CMAKE_BUILD_TYPE.rst | 5 +++++ Help/variable/CMAKE_CONFIGURATION_TYPES.rst | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/Help/variable/CMAKE_BUILD_TYPE.rst b/Help/variable/CMAKE_BUILD_TYPE.rst index dd892fa..b29678a 100644 --- a/Help/variable/CMAKE_BUILD_TYPE.rst +++ b/Help/variable/CMAKE_BUILD_TYPE.rst @@ -24,5 +24,10 @@ variable will be the same as it is specified when invoking CMake. For instance, if ``-DCMAKE_BUILD_TYPE=ReLeAsE`` is specified, then the value of ``CMAKE_BUILD_TYPE`` will be ``ReLeAsE``. +This variable is initialized by the first :command:`project` or +:command:`enable_language` command called in a project when a new build +tree is first created. A toolchain-specific default is chosen when a +language is enabled. + See :variable:`CMAKE_CONFIGURATION_TYPES` for specifying the configuration with multi-config generators. diff --git a/Help/variable/CMAKE_CONFIGURATION_TYPES.rst b/Help/variable/CMAKE_CONFIGURATION_TYPES.rst index 8fcc798..15fea4b 100644 --- a/Help/variable/CMAKE_CONFIGURATION_TYPES.rst +++ b/Help/variable/CMAKE_CONFIGURATION_TYPES.rst @@ -8,5 +8,9 @@ such as ``Debug``, ``Release``, ``RelWithDebInfo`` etc. This has reasonable defaults on most platforms, but can be extended to provide other build types. +This variable is initialized by the first :command:`project` or +:command:`enable_language` command called in a project when a new build +tree is first created. The default value is generator-specific. + See :variable:`CMAKE_BUILD_TYPE` for specifying the configuration with single-config generators. -- cgit v0.12 From e216b9bbd331e77e59634690a2be98f087acaf2c Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 29 Jun 2021 13:34:28 -0400 Subject: cmake: Allow CMAKE_BUILD_TYPE to be set by environment variable When no `CMAKE_BUILD_TYPE` is explicitly specified while creating a new build tree, check for an environment variable of the same name. Issue: #20983 --- Help/envvar/CMAKE_BUILD_TYPE.rst | 10 ++++++++++ Help/manual/cmake-env-variables.7.rst | 1 + Help/release/dev/env-init-configs.rst | 5 +++++ Help/variable/CMAKE_BUILD_TYPE.rst | 5 +++-- Source/cmGlobalGenerator.cxx | 12 ++++++++++++ Tests/RunCMake/CommandLine/EnvBuildType-stdout.txt | 2 ++ Tests/RunCMake/CommandLine/EnvBuildType.cmake | 2 ++ Tests/RunCMake/CommandLine/EnvBuildTypeIgnore-stdout.txt | 2 ++ Tests/RunCMake/CommandLine/EnvBuildTypeIgnore.cmake | 1 + Tests/RunCMake/CommandLine/RunCMakeTest.cmake | 11 +++++++++++ 10 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 Help/envvar/CMAKE_BUILD_TYPE.rst create mode 100644 Help/release/dev/env-init-configs.rst create mode 100644 Tests/RunCMake/CommandLine/EnvBuildType-stdout.txt create mode 100644 Tests/RunCMake/CommandLine/EnvBuildType.cmake create mode 100644 Tests/RunCMake/CommandLine/EnvBuildTypeIgnore-stdout.txt create mode 100644 Tests/RunCMake/CommandLine/EnvBuildTypeIgnore.cmake diff --git a/Help/envvar/CMAKE_BUILD_TYPE.rst b/Help/envvar/CMAKE_BUILD_TYPE.rst new file mode 100644 index 0000000..f798aff --- /dev/null +++ b/Help/envvar/CMAKE_BUILD_TYPE.rst @@ -0,0 +1,10 @@ +CMAKE_BUILD_TYPE +---------------- + +.. versionadded:: 3.22 + +.. include:: ENV_VAR.txt + +The ``CMAKE_BUILD_TYPE`` environment variable specifies a default value +for the :variable:`CMAKE_BUILD_TYPE` variable when there is no explicit +configuration given on the first run while creating a new build tree. diff --git a/Help/manual/cmake-env-variables.7.rst b/Help/manual/cmake-env-variables.7.rst index fa38588..ab974a0 100644 --- a/Help/manual/cmake-env-variables.7.rst +++ b/Help/manual/cmake-env-variables.7.rst @@ -30,6 +30,7 @@ Environment Variables that Control the Build /envvar/CMAKE_APPLE_SILICON_PROCESSOR /envvar/CMAKE_BUILD_PARALLEL_LEVEL + /envvar/CMAKE_BUILD_TYPE /envvar/CMAKE_CONFIG_TYPE /envvar/CMAKE_EXPORT_COMPILE_COMMANDS /envvar/CMAKE_GENERATOR diff --git a/Help/release/dev/env-init-configs.rst b/Help/release/dev/env-init-configs.rst new file mode 100644 index 0000000..fe334b7 --- /dev/null +++ b/Help/release/dev/env-init-configs.rst @@ -0,0 +1,5 @@ +env-init-configs +---------------- + +* The :envvar:`CMAKE_BUILD_TYPE` environment variable was added to + provide a default value for the :variable:`CMAKE_BUILD_TYPE` variable. diff --git a/Help/variable/CMAKE_BUILD_TYPE.rst b/Help/variable/CMAKE_BUILD_TYPE.rst index b29678a..9ad1481 100644 --- a/Help/variable/CMAKE_BUILD_TYPE.rst +++ b/Help/variable/CMAKE_BUILD_TYPE.rst @@ -26,8 +26,9 @@ value of ``CMAKE_BUILD_TYPE`` will be ``ReLeAsE``. This variable is initialized by the first :command:`project` or :command:`enable_language` command called in a project when a new build -tree is first created. A toolchain-specific default is chosen when a -language is enabled. +tree is first created. If the :envvar:`CMAKE_BUILD_TYPE` environment +variable is set, its value is used. Otherwise, a toolchain-specific +default is chosen when a language is enabled. See :variable:`CMAKE_CONFIGURATION_TYPES` for specifying the configuration with multi-config generators. diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 9193778..cad7855 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -498,6 +498,18 @@ bool cmGlobalGenerator::CheckLanguages( void cmGlobalGenerator::EnableLanguage( std::vector const& languages, cmMakefile* mf, bool optional) { + if (!this->IsMultiConfig()) { + std::string envBuildType; + if (!mf->GetDefinition("CMAKE_BUILD_TYPE") && + cmSystemTools::GetEnv("CMAKE_BUILD_TYPE", envBuildType)) { + mf->AddCacheDefinition( + "CMAKE_BUILD_TYPE", envBuildType, + "Choose the type of build. Options include: empty, " + "Debug, Release, RelWithDebInfo, MinSizeRel.", + cmStateEnums::STRING); + } + } + if (languages.empty()) { cmSystemTools::Error("EnableLanguage must have a lang specified!"); cmSystemTools::SetFatalErrorOccured(); diff --git a/Tests/RunCMake/CommandLine/EnvBuildType-stdout.txt b/Tests/RunCMake/CommandLine/EnvBuildType-stdout.txt new file mode 100644 index 0000000..03b92a7 --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvBuildType-stdout.txt @@ -0,0 +1,2 @@ +-- ENV{CMAKE_BUILD_TYPE}='BuildTypeEnv' +-- CMAKE_BUILD_TYPE='BuildTypeEnv' diff --git a/Tests/RunCMake/CommandLine/EnvBuildType.cmake b/Tests/RunCMake/CommandLine/EnvBuildType.cmake new file mode 100644 index 0000000..e5e6d04 --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvBuildType.cmake @@ -0,0 +1,2 @@ +message(STATUS "ENV{CMAKE_BUILD_TYPE}='$ENV{CMAKE_BUILD_TYPE}'") +message(STATUS "CMAKE_BUILD_TYPE='${CMAKE_BUILD_TYPE}'") diff --git a/Tests/RunCMake/CommandLine/EnvBuildTypeIgnore-stdout.txt b/Tests/RunCMake/CommandLine/EnvBuildTypeIgnore-stdout.txt new file mode 100644 index 0000000..4a26732 --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvBuildTypeIgnore-stdout.txt @@ -0,0 +1,2 @@ +-- ENV{CMAKE_BUILD_TYPE}='BuildTypeEnv' +-- CMAKE_BUILD_TYPE='BuildTypeOpt' diff --git a/Tests/RunCMake/CommandLine/EnvBuildTypeIgnore.cmake b/Tests/RunCMake/CommandLine/EnvBuildTypeIgnore.cmake new file mode 100644 index 0000000..f21666f --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvBuildTypeIgnore.cmake @@ -0,0 +1 @@ +include(EnvBuildType.cmake) diff --git a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake index c58b1d0..e86e663 100644 --- a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake @@ -344,6 +344,17 @@ if(RunCMake_GENERATOR MATCHES "Unix Makefiles" OR RunCMake_GENERATOR MATCHES "Ni run_EnvironmentExportCompileCommands() endif() +function(run_EnvironmentBuildType) + set(ENV{CMAKE_BUILD_TYPE} "BuildTypeEnv") + run_cmake(EnvBuildType) + run_cmake_with_options(EnvBuildTypeIgnore -DCMAKE_BUILD_TYPE=BuildTypeOpt) + unset(ENV{CMAKE_BUILD_TYPE}) +endfunction() + +if(RunCMake_GENERATOR MATCHES "Make|^Ninja$") + run_EnvironmentBuildType() +endif() + function(run_EnvironmentToolchain) set(ENV{CMAKE_TOOLCHAIN_FILE} "${RunCMake_SOURCE_DIR}/EnvToolchain-toolchain.cmake") run_cmake(EnvToolchainAbsolute) -- cgit v0.12 From ef56eefc9bb9ae0ad23c80c01a3e15086dcf207e Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 29 Jun 2021 16:58:16 -0400 Subject: cmake: Allow CMAKE_CONFIGURATION_TYPES to be set by environment variable When no `CMAKE_CONFIGURATION_TYPES` is explicitly specified while creating a new build tree, check for an environment variable of the same name. Issue: #20983 --- Help/envvar/CMAKE_CONFIGURATION_TYPES.rst | 11 +++++++++++ Help/manual/cmake-env-variables.7.rst | 1 + Help/release/dev/env-init-configs.rst | 4 ++++ Help/variable/CMAKE_CONFIGURATION_TYPES.rst | 4 +++- Source/cmMakefile.cxx | 6 +++++- Tests/RunCMake/CommandLine/EnvConfigTypes-stdout.txt | 2 ++ Tests/RunCMake/CommandLine/EnvConfigTypes.cmake | 2 ++ Tests/RunCMake/CommandLine/EnvConfigTypesIgnore-stdout.txt | 2 ++ Tests/RunCMake/CommandLine/EnvConfigTypesIgnore.cmake | 1 + Tests/RunCMake/CommandLine/RunCMakeTest.cmake | 9 +++++++++ 10 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 Help/envvar/CMAKE_CONFIGURATION_TYPES.rst create mode 100644 Tests/RunCMake/CommandLine/EnvConfigTypes-stdout.txt create mode 100644 Tests/RunCMake/CommandLine/EnvConfigTypes.cmake create mode 100644 Tests/RunCMake/CommandLine/EnvConfigTypesIgnore-stdout.txt create mode 100644 Tests/RunCMake/CommandLine/EnvConfigTypesIgnore.cmake diff --git a/Help/envvar/CMAKE_CONFIGURATION_TYPES.rst b/Help/envvar/CMAKE_CONFIGURATION_TYPES.rst new file mode 100644 index 0000000..833aa4a --- /dev/null +++ b/Help/envvar/CMAKE_CONFIGURATION_TYPES.rst @@ -0,0 +1,11 @@ +CMAKE_CONFIGURATION_TYPES +------------------------- + +.. versionadded:: 3.22 + +.. include:: ENV_VAR.txt + +The ``CMAKE_CONFIGURATION_TYPES`` environment variable specifies a +default value for the :variable:`CMAKE_CONFIGURATION_TYPES` variable +when there is no explicit configuration given on the first run while +creating a new build tree. diff --git a/Help/manual/cmake-env-variables.7.rst b/Help/manual/cmake-env-variables.7.rst index ab974a0..3db189e 100644 --- a/Help/manual/cmake-env-variables.7.rst +++ b/Help/manual/cmake-env-variables.7.rst @@ -31,6 +31,7 @@ Environment Variables that Control the Build /envvar/CMAKE_APPLE_SILICON_PROCESSOR /envvar/CMAKE_BUILD_PARALLEL_LEVEL /envvar/CMAKE_BUILD_TYPE + /envvar/CMAKE_CONFIGURATION_TYPES /envvar/CMAKE_CONFIG_TYPE /envvar/CMAKE_EXPORT_COMPILE_COMMANDS /envvar/CMAKE_GENERATOR diff --git a/Help/release/dev/env-init-configs.rst b/Help/release/dev/env-init-configs.rst index fe334b7..5c9892d 100644 --- a/Help/release/dev/env-init-configs.rst +++ b/Help/release/dev/env-init-configs.rst @@ -3,3 +3,7 @@ env-init-configs * The :envvar:`CMAKE_BUILD_TYPE` environment variable was added to provide a default value for the :variable:`CMAKE_BUILD_TYPE` variable. + +* The :envvar:`CMAKE_CONFIGURATION_TYPES` environment variable was added to + provide a default value for the :variable:`CMAKE_CONFIGURATION_TYPES` + variable. diff --git a/Help/variable/CMAKE_CONFIGURATION_TYPES.rst b/Help/variable/CMAKE_CONFIGURATION_TYPES.rst index 15fea4b..5298a72 100644 --- a/Help/variable/CMAKE_CONFIGURATION_TYPES.rst +++ b/Help/variable/CMAKE_CONFIGURATION_TYPES.rst @@ -10,7 +10,9 @@ types. This variable is initialized by the first :command:`project` or :command:`enable_language` command called in a project when a new build -tree is first created. The default value is generator-specific. +tree is first created. If the :envvar:`CMAKE_CONFIGURATION_TYPES` +environment variable is set, its value is used. Otherwise, the default +value is generator-specific. See :variable:`CMAKE_BUILD_TYPE` for specifying the configuration with single-config generators. diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 120cae7..3c4e9cd 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3187,8 +3187,12 @@ void cmMakefile::InitCMAKE_CONFIGURATION_TYPES(std::string const& genDefault) if (this->GetDefinition("CMAKE_CONFIGURATION_TYPES")) { return; } + std::string initConfigs; + if (!cmSystemTools::GetEnv("CMAKE_CONFIGURATION_TYPES", initConfigs)) { + initConfigs = genDefault; + } this->AddCacheDefinition( - "CMAKE_CONFIGURATION_TYPES", genDefault, + "CMAKE_CONFIGURATION_TYPES", initConfigs, "Semicolon separated list of supported configuration types, " "only supports Debug, Release, MinSizeRel, and RelWithDebInfo, " "anything else will be ignored.", diff --git a/Tests/RunCMake/CommandLine/EnvConfigTypes-stdout.txt b/Tests/RunCMake/CommandLine/EnvConfigTypes-stdout.txt new file mode 100644 index 0000000..bfec18f --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvConfigTypes-stdout.txt @@ -0,0 +1,2 @@ +-- ENV{CMAKE_CONFIGURATION_TYPES}='ConfigTypesEnv' +-- CMAKE_CONFIGURATION_TYPES='ConfigTypesEnv' diff --git a/Tests/RunCMake/CommandLine/EnvConfigTypes.cmake b/Tests/RunCMake/CommandLine/EnvConfigTypes.cmake new file mode 100644 index 0000000..8c9b63a --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvConfigTypes.cmake @@ -0,0 +1,2 @@ +message(STATUS "ENV{CMAKE_CONFIGURATION_TYPES}='$ENV{CMAKE_CONFIGURATION_TYPES}'") +message(STATUS "CMAKE_CONFIGURATION_TYPES='${CMAKE_CONFIGURATION_TYPES}'") diff --git a/Tests/RunCMake/CommandLine/EnvConfigTypesIgnore-stdout.txt b/Tests/RunCMake/CommandLine/EnvConfigTypesIgnore-stdout.txt new file mode 100644 index 0000000..7800a4f --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvConfigTypesIgnore-stdout.txt @@ -0,0 +1,2 @@ +-- ENV{CMAKE_CONFIGURATION_TYPES}='ConfigTypesEnv' +-- CMAKE_CONFIGURATION_TYPES='ConfigTypesOpt' diff --git a/Tests/RunCMake/CommandLine/EnvConfigTypesIgnore.cmake b/Tests/RunCMake/CommandLine/EnvConfigTypesIgnore.cmake new file mode 100644 index 0000000..fcbbaea --- /dev/null +++ b/Tests/RunCMake/CommandLine/EnvConfigTypesIgnore.cmake @@ -0,0 +1 @@ +include(EnvConfigTypes.cmake) diff --git a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake index e86e663..0b26b89 100644 --- a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake @@ -351,8 +351,17 @@ function(run_EnvironmentBuildType) unset(ENV{CMAKE_BUILD_TYPE}) endfunction() +function(run_EnvironmentConfigTypes) + set(ENV{CMAKE_CONFIGURATION_TYPES} "ConfigTypesEnv") + run_cmake(EnvConfigTypes) + run_cmake_with_options(EnvConfigTypesIgnore -DCMAKE_CONFIGURATION_TYPES=ConfigTypesOpt) + unset(ENV{CMAKE_CONFIGURATION_TYPES}) +endfunction() + if(RunCMake_GENERATOR MATCHES "Make|^Ninja$") run_EnvironmentBuildType() +elseif(RunCMake_GENERATOR MATCHES "Ninja Multi-Config|Visual Studio|Xcode") + run_EnvironmentConfigTypes() endif() function(run_EnvironmentToolchain) -- cgit v0.12