From a67cd9c39cc82fa934cc047c719fae8995ff215c Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 27 Mar 2023 18:16:37 -0400 Subject: Ninja: Restore slash style for MinGW tools when extra languages are enabled Since commit f3ca199c9b (cmGlobalNinjaGenerator: Factor out GNU-like command-line detection on Windows, 2023-03-18, v3.26.1~2^2~6), we accidentally "unrecognize" MinGW tools on Windows if a language other than C or CXX is enabled. This causes the wrong slash style to be generated in paths in `build.ninja`. Fixes: #24642 --- Source/cmGlobalNinjaGenerator.cxx | 10 ++++++---- Source/cmGlobalNinjaGenerator.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 914d1c7..f8e97db 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -956,8 +956,9 @@ void cmGlobalNinjaGenerator::EnableLanguage( mf->GetSafeDefinition(cmStrCat("CMAKE_", l, "_SIMULATE_ID")); std::string const& compilerFrontendVariant = mf->GetSafeDefinition( cmStrCat("CMAKE_", l, "_COMPILER_FRONTEND_VARIANT")); - this->SetUsingGCCOnWindows( - DetectGCCOnWindows(compilerId, simulateId, compilerFrontendVariant)); + if (DetectGCCOnWindows(compilerId, simulateId, compilerFrontendVariant)) { + this->MarkAsGCCOnWindows(); + } #endif } } @@ -2843,8 +2844,9 @@ int cmcmd_cmake_ninja_dyndep(std::vector::const_iterator argBeg, cmGlobalNinjaGenerator& gg = cm::static_reference_cast(ggd); # ifdef _WIN32 - gg.SetUsingGCCOnWindows( - DetectGCCOnWindows(compilerId, simulateId, compilerFrontendVariant)); + if (DetectGCCOnWindows(compilerId, simulateId, compilerFrontendVariant)) { + gg.MarkAsGCCOnWindows(); + } # endif return gg.WriteDyndepFile(dir_top_src, dir_top_bld, dir_cur_src, dir_cur_bld, arg_dd, arg_ddis, module_dir, linked_target_dirs, diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index 68b26cc..7f01b09 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -169,7 +169,7 @@ public: const std::string& comment = ""); bool IsGCCOnWindows() const { return this->UsingGCCOnWindows; } - void SetUsingGCCOnWindows(bool b) { this->UsingGCCOnWindows = b; } + void MarkAsGCCOnWindows() { this->UsingGCCOnWindows = true; } cmGlobalNinjaGenerator(cmake* cm); -- cgit v0.12