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
This commit is contained in:
parent
40c0482153
commit
9c5238dfd6
|
@ -3142,7 +3142,26 @@ void cmMakefile::EnableLanguage(std::vector<std::string> const& lang,
|
|||
{
|
||||
this->AddDefinition("CMAKE_CFG_INTDIR",
|
||||
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;
|
||||
langs.reserve(lang.size());
|
||||
for (std::vector<std::string>::const_iterator i = lang.begin();
|
||||
i != lang.end(); ++i) {
|
||||
if (i->compare("RC") == 0) {
|
||||
langsRC.push_back(*i);
|
||||
} else {
|
||||
langs.push_back(*i);
|
||||
}
|
||||
}
|
||||
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,
|
||||
|
|
|
@ -207,7 +207,7 @@ add_RunCMake_test(include)
|
|||
add_RunCMake_test(include_directories)
|
||||
add_RunCMake_test(list)
|
||||
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(set_property)
|
||||
add_RunCMake_test(string)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
project(ExplicitRC C RC)
|
|
@ -1,5 +1,8 @@
|
|||
include(RunCMake)
|
||||
|
||||
if(CMake_TEST_RESOURCES)
|
||||
run_cmake(ExplicitRC)
|
||||
endif()
|
||||
run_cmake(LanguagesImplicit)
|
||||
run_cmake(LanguagesEmpty)
|
||||
run_cmake(LanguagesNONE)
|
||||
|
|
Loading…
Reference in New Issue