Commit 9c5238df authored by Brad King's avatar Brad King 💬
Browse files

project: Fix support for explicit RC language

The check added in commit v3.6.0-rc1~293^2 (Diagnose recursive
project/enable_language without crashing, 2016-03-07) broke support for
enabling `RC` explicitly along with other languages like `C`.  The
reason is that we enable all listed languages at once so the internal
`enable_language(RC)` that we do while enabling `C` or `CXX` on some
platforms triggers the recursion check if `RC` is explicitly listed.

Ideally we should refactor things to only enable one language at a time,
but for now it is simplest to just exclude `RC` from the explicit list
until other languages are enabled, and then enable it.

Closes: #16330
parent 40c04821
Pipeline #28324 passed with stage
...@@ -3142,7 +3142,26 @@ void cmMakefile::EnableLanguage(std::vector<std::string> const& lang, ...@@ -3142,7 +3142,26 @@ void cmMakefile::EnableLanguage(std::vector<std::string> const& lang,
{ {
this->AddDefinition("CMAKE_CFG_INTDIR", this->AddDefinition("CMAKE_CFG_INTDIR",
this->GetGlobalGenerator()->GetCMakeCFGIntDir()); this->GetGlobalGenerator()->GetCMakeCFGIntDir());
this->GetGlobalGenerator()->EnableLanguage(lang, this, optional); // If RC is explicitly listed we need to do it after other languages.
// On some platforms we enable RC implicitly while enabling others.
// Do not let that look like recursive enable_language(RC).
std::vector<std::string> langs;
std::vector<std::string> langsRC;
for (std::vector<std::string>::const_iterator i = lang.begin();
i != lang.end(); ++i) {
if (i->compare("RC") == 0) {
} else {
if (!langs.empty()) {
this->GetGlobalGenerator()->EnableLanguage(langs, this, optional);
if (!langsRC.empty()) {
this->GetGlobalGenerator()->EnableLanguage(langsRC, this, optional);
} }
int cmMakefile::TryCompile(const std::string& srcdir, int cmMakefile::TryCompile(const std::string& srcdir,
...@@ -207,7 +207,7 @@ add_RunCMake_test(include) ...@@ -207,7 +207,7 @@ add_RunCMake_test(include)
add_RunCMake_test(include_directories) add_RunCMake_test(include_directories)
add_RunCMake_test(list) add_RunCMake_test(list)
add_RunCMake_test(message) add_RunCMake_test(message)
add_RunCMake_test(project) add_RunCMake_test(project -DCMake_TEST_RESOURCES=${CMake_TEST_RESOURCES})
add_RunCMake_test(return) add_RunCMake_test(return)
add_RunCMake_test(set_property) add_RunCMake_test(set_property)
add_RunCMake_test(string) add_RunCMake_test(string)
include(RunCMake) include(RunCMake)
run_cmake(LanguagesImplicit) run_cmake(LanguagesImplicit)
run_cmake(LanguagesEmpty) run_cmake(LanguagesEmpty)
run_cmake(LanguagesNONE) run_cmake(LanguagesNONE)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment