diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmNinjaTargetGenerator.cxx | 52 | ||||
-rw-r--r-- | Source/cmNinjaTargetGenerator.h | 2 |
2 files changed, 24 insertions, 30 deletions
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index ff41f6d..cfd8937 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -200,21 +200,21 @@ cmNinjaTargetGenerator::ComputeFlagsForObject(cmSourceFile const* source, return flags; } - -bool cmNinjaTargetGenerator::needsDepFile(const std::string& lang) +bool cmNinjaTargetGenerator::NeedDepTypeMSVC(const std::string& lang) const { - cmMakefile* mf = this->GetMakefile(); - - const bool usingMSVC = std::string("MSVC") == - (mf->GetDefinition("CMAKE_C_COMPILER_ID") ? - mf->GetSafeDefinition("CMAKE_C_COMPILER_ID") : - mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID")); - - return !usingMSVC || lang == "RC"; + if (lang == "C" || lang == "CXX") + { + cmMakefile* mf = this->GetMakefile(); + return ( + strcmp(mf->GetSafeDefinition("CMAKE_C_COMPILER_ID"), "MSVC") == 0 || + strcmp(mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID"), "MSVC") == 0 || + strcmp(mf->GetSafeDefinition("CMAKE_C_SIMULATE_ID"), "MSVC") == 0 || + strcmp(mf->GetSafeDefinition("CMAKE_CXX_SIMULATE_ID"), "MSVC") == 0 + ); + } + return false; } - - // TODO: Refactor with // void cmMakefileTargetGenerator::WriteTargetLanguageFlags(). std::string @@ -391,22 +391,22 @@ cmNinjaTargetGenerator cmMakefile* mf = this->GetMakefile(); - const std::string cId = mf->GetDefinition("CMAKE_C_COMPILER_ID") - ? mf->GetSafeDefinition("CMAKE_C_COMPILER_ID") - : mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID"); - const std::string sId = mf->GetDefinition("CMAKE_C_SIMULATE_ID") - ? mf->GetSafeDefinition("CMAKE_C_SIMULATE_ID") - : mf->GetSafeDefinition("CMAKE_CXX_SIMULATE_ID"); - const bool usingMSVC = (cId == "MSVC" || sId == "MSVC"); - // Tell ninja dependency format so all deps can be loaded into a database std::string deptype; std::string depfile; std::string cldeps; std::string flags = "$FLAGS"; - if (usingMSVC) + if (this->NeedDepTypeMSVC(lang)) { - if (!mf->GetIsSourceFileTryCompile() && lang == "RC") + deptype = "msvc"; + depfile = ""; + flags += " /showIncludes"; + } + else if (lang == "RC" && this->NeedDepTypeMSVC("C")) + { + // For the MS resource compiler we need cmcldeps, but skip dependencies + // for source-file try_compile cases because they are always fresh. + if (!mf->GetIsSourceFileTryCompile()) { deptype = "gcc"; depfile = "$DEP_FILE"; @@ -419,12 +419,6 @@ cmNinjaTargetGenerator cldeps += mf->GetSafeDefinition("CMAKE_CL_SHOWINCLUDES_PREFIX"); cldeps += "\" \"" + cl + "\" "; } - else - { - deptype = "msvc"; - depfile = ""; - flags += " /showIncludes"; - } } else { @@ -636,7 +630,7 @@ cmNinjaTargetGenerator cmNinjaVars vars; vars["FLAGS"] = this->ComputeFlagsForObject(source, language); vars["DEFINES"] = this->ComputeDefines(source, language); - if (needsDepFile(language)) { + if (!this->NeedDepTypeMSVC(language)) { vars["DEP_FILE"] = cmGlobalNinjaGenerator::EncodeDepfileSpace(objectFileName + ".d"); } diff --git a/Source/cmNinjaTargetGenerator.h b/Source/cmNinjaTargetGenerator.h index 17cf517..5733fde 100644 --- a/Source/cmNinjaTargetGenerator.h +++ b/Source/cmNinjaTargetGenerator.h @@ -42,7 +42,7 @@ public: std::string GetTargetName() const; - bool needsDepFile(const std::string& lang); + bool NeedDepTypeMSVC(const std::string& lang) const; protected: |