From c8ba777f6dfd7a5d8a4c4fa7b420bbdb5b93b366 Mon Sep 17 00:00:00 2001 From: Stephan Szabo Date: Thu, 3 Jan 2019 12:54:24 -0800 Subject: GlobalVisualStudio10Generator: Support non-standard toolset json flag files. If given a toolset that does not have an explicit mapping in cmVisualStudio10ToolsetOptions, check for a json flag file using the toolset name before trying the default toolset for the generator. --- Source/cmGlobalVisualStudio10Generator.cxx | 116 ++++++++++++++++++++--------- Source/cmGlobalVisualStudio10Generator.h | 4 +- Source/cmVisualStudio10ToolsetOptions.cxx | 30 +++----- Source/cmVisualStudio10ToolsetOptions.h | 20 ++--- 4 files changed, 100 insertions(+), 70 deletions(-) diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index c9c6938..f18798d 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -1123,14 +1123,32 @@ static cmIDEFlagTable const* cmLoadFlagTableJson( return ret; } +static std::string cmGetFlagTableName(std::string const& toolsetName, + std::string const& table) +{ + return cmSystemTools::GetCMakeRoot() + "/Templates/MSBuild/FlagTables/" + + toolsetName + "_" + table + ".json"; +} + cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable( - std::string const& flagTableName, std::string const& table) const + std::string const& optionsName, std::string const& toolsetName, + std::string const& defaultName, std::string const& table) const { cmIDEFlagTable const* ret = nullptr; - std::string filename = cmSystemTools::GetCMakeRoot() + - "/Templates/MSBuild/FlagTables/" + flagTableName + "_" + table + ".json"; - ret = cmLoadFlagTableJson(filename); + std::string filename; + if (!optionsName.empty()) { + filename = cmGetFlagTableName(optionsName, table); + ret = cmLoadFlagTableJson(filename); + } else { + filename = cmGetFlagTableName(toolsetName, table); + if (cmSystemTools::FileExists(filename)) { + ret = cmLoadFlagTableJson(filename); + } else { + filename = cmGetFlagTableName(defaultName, table); + ret = cmLoadFlagTableJson(filename); + } + } if (!ret) { cmMakefile* mf = this->GetCurrentMakefile(); @@ -1147,71 +1165,95 @@ cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable( cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetClFlagTable() const { - std::string flagTableName = this->ToolsetOptions.GetClFlagTableName( - this->GetPlatformName(), this->GetPlatformToolsetString(), - this->DefaultCLFlagTableName); - - return LoadFlagTable(flagTableName, "CL"); + std::string optionsName = this->ToolsetOptions.GetClFlagTableName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultCLFlagTableName); + return LoadFlagTable(optionsName, toolsetName, defaultName, "CL"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetCSharpFlagTable() const { - std::string flagTableName = this->ToolsetOptions.GetCSharpFlagTableName( - this->GetPlatformName(), this->GetPlatformToolsetString(), - this->DefaultCSharpFlagTableName); - - return LoadFlagTable(flagTableName, "CSharp"); + std::string optionsName = this->ToolsetOptions.GetCSharpFlagTableName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultCSharpFlagTableName); + return LoadFlagTable(optionsName, toolsetName, defaultName, "CSharp"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetRcFlagTable() const { - std::string flagTableName = this->ToolsetOptions.GetRcFlagTableName( - this->GetPlatformName(), this->GetPlatformToolsetString(), - this->DefaultRCFlagTableName); - - return LoadFlagTable(flagTableName, "RC"); + std::string optionsName = this->ToolsetOptions.GetRcFlagTableName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultRCFlagTableName); + return LoadFlagTable(optionsName, toolsetName, defaultName, "RC"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetLibFlagTable() const { - std::string flagTableName = this->ToolsetOptions.GetLibFlagTableName( - this->GetPlatformName(), this->GetPlatformToolsetString(), - this->DefaultLibFlagTableName); - - return LoadFlagTable(flagTableName, "LIB"); + std::string optionsName = this->ToolsetOptions.GetLibFlagTableName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultLibFlagTableName); + return LoadFlagTable(optionsName, toolsetName, defaultName, "LIB"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetLinkFlagTable() const { - std::string flagTableName = this->ToolsetOptions.GetLinkFlagTableName( - this->GetPlatformName(), this->GetPlatformToolsetString(), - this->DefaultLinkFlagTableName); - - return LoadFlagTable(flagTableName, "Link"); + std::string optionsName = this->ToolsetOptions.GetLinkFlagTableName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultLinkFlagTableName); + return LoadFlagTable(optionsName, toolsetName, defaultName, "Link"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetCudaFlagTable() const { - return LoadFlagTable(this->DefaultCudaFlagTableName, "Cuda"); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultCudaFlagTableName); + return LoadFlagTable("", toolsetName, defaultName, "Cuda"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetCudaHostFlagTable() const { - return LoadFlagTable(this->DefaultCudaHostFlagTableName, "CudaHost"); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultCudaHostFlagTableName); + return LoadFlagTable("", toolsetName, defaultName, "CudaHost"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetMasmFlagTable() const { - std::string flagTableName = this->ToolsetOptions.GetMasmFlagTableName( - this->GetPlatformName(), this->GetPlatformToolsetString(), - this->DefaultMasmFlagTableName); - - return LoadFlagTable(flagTableName, "MASM"); + std::string optionsName = this->ToolsetOptions.GetMasmFlagTableName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultMasmFlagTableName); + return LoadFlagTable(optionsName, toolsetName, defaultName, "MASM"); } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetNasmFlagTable() const { - return LoadFlagTable(this->DefaultNasmFlagTableName, "NASM"); + std::string toolsetName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->GetPlatformToolsetString()); + std::string defaultName = this->ToolsetOptions.GetToolsetName( + this->GetPlatformName(), this->DefaultNasmFlagTableName); + return LoadFlagTable("", toolsetName, defaultName, "NASM"); } diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index 15244ac..ab55f06 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -144,7 +144,9 @@ protected: std::string const& GetMSBuildCommand(); - cmIDEFlagTable const* LoadFlagTable(std::string const& flagTableName, + cmIDEFlagTable const* LoadFlagTable(std::string const& optionsName, + std::string const& toolsetName, + std::string const& defaultName, std::string const& table) const; std::string GeneratorToolset; diff --git a/Source/cmVisualStudio10ToolsetOptions.cxx b/Source/cmVisualStudio10ToolsetOptions.cxx index f71b8b7..39063ed 100644 --- a/Source/cmVisualStudio10ToolsetOptions.cxx +++ b/Source/cmVisualStudio10ToolsetOptions.cxx @@ -7,8 +7,7 @@ #include "cmVisualStudioGeneratorOptions.h" std::string cmVisualStudio10ToolsetOptions::GetClFlagTableName( - std::string const& name, std::string const& toolset, - std::string const& defaultToolset) const + std::string const& name, std::string const& toolset) const { std::string const useToolset = this->GetToolsetName(name, toolset); @@ -23,13 +22,12 @@ std::string cmVisualStudio10ToolsetOptions::GetClFlagTableName( } else if (useToolset == "v100") { return "v10"; } else { - return this->GetToolsetName(name, defaultToolset); + return ""; } } std::string cmVisualStudio10ToolsetOptions::GetCSharpFlagTableName( - std::string const& name, std::string const& toolset, - std::string const& defaultToolset) const + std::string const& name, std::string const& toolset) const { std::string const useToolset = this->GetToolsetName(name, toolset); @@ -44,13 +42,12 @@ std::string cmVisualStudio10ToolsetOptions::GetCSharpFlagTableName( } else if (useToolset == "v100") { return "v10"; } else { - return this->GetToolsetName(name, defaultToolset); + return ""; } } std::string cmVisualStudio10ToolsetOptions::GetRcFlagTableName( - std::string const& name, std::string const& toolset, - std::string const& defaultToolset) const + std::string const& name, std::string const& toolset) const { std::string const useToolset = this->GetToolsetName(name, toolset); @@ -63,13 +60,12 @@ std::string cmVisualStudio10ToolsetOptions::GetRcFlagTableName( } else if (useToolset == "v100") { return "v10"; } else { - return this->GetToolsetName(name, defaultToolset); + return ""; } } std::string cmVisualStudio10ToolsetOptions::GetLibFlagTableName( - std::string const& name, std::string const& toolset, - std::string const& defaultToolset) const + std::string const& name, std::string const& toolset) const { std::string const useToolset = this->GetToolsetName(name, toolset); @@ -82,13 +78,12 @@ std::string cmVisualStudio10ToolsetOptions::GetLibFlagTableName( } else if (useToolset == "v100") { return "v10"; } else { - return this->GetToolsetName(name, defaultToolset); + return ""; } } std::string cmVisualStudio10ToolsetOptions::GetLinkFlagTableName( - std::string const& name, std::string const& toolset, - std::string const& defaultToolset) const + std::string const& name, std::string const& toolset) const { std::string const useToolset = this->GetToolsetName(name, toolset); @@ -103,13 +98,12 @@ std::string cmVisualStudio10ToolsetOptions::GetLinkFlagTableName( } else if (useToolset == "v100") { return "v10"; } else { - return this->GetToolsetName(name, defaultToolset); + return ""; } } std::string cmVisualStudio10ToolsetOptions::GetMasmFlagTableName( - std::string const& name, std::string const& toolset, - std::string const& defaultToolset) const + std::string const& name, std::string const& toolset) const { std::string const useToolset = this->GetToolsetName(name, toolset); @@ -122,7 +116,7 @@ std::string cmVisualStudio10ToolsetOptions::GetMasmFlagTableName( } else if (useToolset == "v100") { return "v10"; } else { - return this->GetToolsetName(name, defaultToolset); + return ""; } } diff --git a/Source/cmVisualStudio10ToolsetOptions.h b/Source/cmVisualStudio10ToolsetOptions.h index 43946f0..875a35b 100644 --- a/Source/cmVisualStudio10ToolsetOptions.h +++ b/Source/cmVisualStudio10ToolsetOptions.h @@ -16,25 +16,17 @@ class cmVisualStudio10ToolsetOptions { public: std::string GetClFlagTableName(std::string const& name, - std::string const& toolset, - std::string const& defaultToolset) const; + std::string const& toolset) const; std::string GetCSharpFlagTableName(std::string const& name, - std::string const& toolset, - std::string const& defaultToolset) const; + std::string const& toolset) const; std::string GetRcFlagTableName(std::string const& name, - std::string const& toolset, - std::string const& defaultToolset) const; + std::string const& toolset) const; std::string GetLibFlagTableName(std::string const& name, - std::string const& toolset, - std::string const& defaultToolset) const; + std::string const& toolset) const; std::string GetLinkFlagTableName(std::string const& name, - std::string const& toolset, - std::string const& defaultToolset) const; + std::string const& toolset) const; std::string GetMasmFlagTableName(std::string const& name, - std::string const& toolset, - std::string const& defaultToolset) const; - -private: + std::string const& toolset) const; std::string GetToolsetName(std::string const& name, std::string const& toolset) const; }; -- cgit v0.12