diff options
-rw-r--r-- | Source/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio10Generator.cxx | 25 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio10Generator.h | 2 | ||||
-rw-r--r-- | Source/cmVisualStudio10ToolsetOptions.cxx | 134 | ||||
-rw-r--r-- | Source/cmVisualStudio10ToolsetOptions.h | 33 |
5 files changed, 191 insertions, 5 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 09c0acf..cf9dbb8 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -680,6 +680,8 @@ if (WIN32) cmVisualStudioGeneratorOptions.cxx cmVisualStudio10TargetGenerator.h cmVisualStudio10TargetGenerator.cxx + cmVisualStudio10ToolsetOptions.h + cmVisualStudio10ToolsetOptions.cxx cmLocalVisualStudio10Generator.cxx cmLocalVisualStudio10Generator.h cmGlobalVisualStudio10Generator.h diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 6075e2c..7d91740 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -617,25 +617,40 @@ std::string cmGlobalVisualStudio10Generator::GetInstalledNsightTegraVersion() cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetClFlagTable() const { - return this->DefaultClFlagTable; + cmIDEFlagTable const* table = this->ToolsetOptions.GetClFlagTable( + this->GetPlatformName(), this->GetPlatformToolsetString()); + + return (table != CM_NULLPTR) ? table : this->DefaultClFlagTable; } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetRcFlagTable() const { - return this->DefaultRcFlagTable; + cmIDEFlagTable const* table = this->ToolsetOptions.GetRcFlagTable( + this->GetPlatformName(), this->GetPlatformToolsetString()); + + return (table != CM_NULLPTR) ? table : this->DefaultRcFlagTable; } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetLibFlagTable() const { - return this->DefaultLibFlagTable; + cmIDEFlagTable const* table = this->ToolsetOptions.GetLibFlagTable( + this->GetPlatformName(), this->GetPlatformToolsetString()); + + return (table != CM_NULLPTR) ? table : this->DefaultLibFlagTable; } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetLinkFlagTable() const { - return this->DefaultLinkFlagTable; + cmIDEFlagTable const* table = this->ToolsetOptions.GetLinkFlagTable( + this->GetPlatformName(), this->GetPlatformToolsetString()); + + return (table != CM_NULLPTR) ? table : this->DefaultLinkFlagTable; } cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetMasmFlagTable() const { - return this->DefaultMasmFlagTable; + cmIDEFlagTable const* table = this->ToolsetOptions.GetMasmFlagTable( + this->GetPlatformName(), this->GetPlatformToolsetString()); + + return (table != CM_NULLPTR) ? table : this->DefaultMasmFlagTable; } diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index 8418480..4175104 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -4,6 +4,7 @@ #define cmGlobalVisualStudio10Generator_h #include "cmGlobalVisualStudio8Generator.h" +#include "cmVisualStudio10ToolsetOptions.h" /** \class cmGlobalVisualStudio10Generator * \brief Write a Unix makefiles. @@ -146,6 +147,7 @@ private: std::string MSBuildCommand; bool MSBuildCommandInitialized; + cmVisualStudio10ToolsetOptions ToolsetOptions; virtual std::string FindMSBuildCommand(); virtual std::string FindDevEnvCommand(); virtual std::string GetVSMakeProgram() { return this->GetMSBuildCommand(); } diff --git a/Source/cmVisualStudio10ToolsetOptions.cxx b/Source/cmVisualStudio10ToolsetOptions.cxx new file mode 100644 index 0000000..b928f43 --- /dev/null +++ b/Source/cmVisualStudio10ToolsetOptions.cxx @@ -0,0 +1,134 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#include "cmVisualStudio10ToolsetOptions.h" + +#include "cmAlgorithms.h" +#include "cmIDEFlagTable.h" +#include "cmVisualStudioGeneratorOptions.h" + +#include "cmVS10CLFlagTable.h" +#include "cmVS10LibFlagTable.h" +#include "cmVS10LinkFlagTable.h" +#include "cmVS10MASMFlagTable.h" +#include "cmVS10RCFlagTable.h" +#include "cmVS11CLFlagTable.h" +#include "cmVS11LibFlagTable.h" +#include "cmVS11LinkFlagTable.h" +#include "cmVS11MASMFlagTable.h" +#include "cmVS11RCFlagTable.h" +#include "cmVS12CLFlagTable.h" +#include "cmVS12LibFlagTable.h" +#include "cmVS12LinkFlagTable.h" +#include "cmVS12MASMFlagTable.h" +#include "cmVS12RCFlagTable.h" +#include "cmVS140CLFlagTable.h" +#include "cmVS141CLFlagTable.h" +#include "cmVS14LibFlagTable.h" +#include "cmVS14LinkFlagTable.h" +#include "cmVS14MASMFlagTable.h" +#include "cmVS14RCFlagTable.h" + +cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetClFlagTable( + std::string const& name, std::string const& toolset) const +{ + std::string const useToolset = this->GetToolsetName(name, toolset); + + if (toolset == "v141") { + return cmVS141CLFlagTable; + } else if (useToolset == "v140") { + return cmVS140CLFlagTable; + } else if (useToolset == "v120") { + return cmVS12CLFlagTable; + } else if (useToolset == "v110") { + return cmVS11CLFlagTable; + } else if (useToolset == "v100") { + return cmVS10CLFlagTable; + } else { + return 0; + } +} + +cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetRcFlagTable( + std::string const& name, std::string const& toolset) const +{ + std::string const useToolset = this->GetToolsetName(name, toolset); + + if ((useToolset == "v140") || (useToolset == "v141")) { + return cmVS14RCFlagTable; + } else if (useToolset == "v120") { + return cmVS12RCFlagTable; + } else if (useToolset == "v110") { + return cmVS11RCFlagTable; + } else if (useToolset == "v100") { + return cmVS10RCFlagTable; + } else { + return 0; + } +} + +cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetLibFlagTable( + std::string const& name, std::string const& toolset) const +{ + std::string const useToolset = this->GetToolsetName(name, toolset); + + if ((useToolset == "v140") || (useToolset == "v141")) { + return cmVS14LibFlagTable; + } else if (useToolset == "v120") { + return cmVS12LibFlagTable; + } else if (useToolset == "v110") { + return cmVS11LibFlagTable; + } else if (useToolset == "v100") { + return cmVS10LibFlagTable; + } else { + return 0; + } +} + +cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetLinkFlagTable( + std::string const& name, std::string const& toolset) const +{ + std::string const useToolset = this->GetToolsetName(name, toolset); + + if ((useToolset == "v140") || (useToolset == "v141")) { + return cmVS14LinkFlagTable; + } else if (useToolset == "v120") { + return cmVS12LinkFlagTable; + } else if (useToolset == "v110") { + return cmVS11LinkFlagTable; + } else if (useToolset == "v100") { + return cmVS10LinkFlagTable; + } else { + return 0; + } +} + +cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetMasmFlagTable( + std::string const& name, std::string const& toolset) const +{ + std::string const useToolset = this->GetToolsetName(name, toolset); + + if ((useToolset == "v140") || (useToolset == "v141")) { + return cmVS14MASMFlagTable; + } else if (useToolset == "v120") { + return cmVS12MASMFlagTable; + } else if (useToolset == "v110") { + return cmVS11MASMFlagTable; + } else if (useToolset == "v100") { + return cmVS10MASMFlagTable; + } else { + return 0; + } +} + +std::string cmVisualStudio10ToolsetOptions::GetToolsetName( + std::string const& name, std::string const& toolset) const +{ + static_cast<void>(name); + std::size_t length = toolset.length(); + + if (cmHasLiteralSuffix(toolset, "_xp")) { + length -= 3; + } + + return toolset.substr(0, length); +} diff --git a/Source/cmVisualStudio10ToolsetOptions.h b/Source/cmVisualStudio10ToolsetOptions.h new file mode 100644 index 0000000..ea6c9c8 --- /dev/null +++ b/Source/cmVisualStudio10ToolsetOptions.h @@ -0,0 +1,33 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#ifndef cmVisualStudio10ToolsetOptions_h +#define cmVisualStudio10ToolsetOptions_h + +#include "cmStandardIncludes.h" + +struct cmIDEFlagTable; + +/** \class cmVisualStudio10ToolsetOptions + * \brief Retrieves toolset options for MSBuild. + * + * cmVisualStudio10ToolsetOptions manages toolsets within MSBuild + */ +class cmVisualStudio10ToolsetOptions +{ +public: + cmIDEFlagTable const* GetClFlagTable(std::string const& name, + std::string const& toolset) const; + cmIDEFlagTable const* GetRcFlagTable(std::string const& name, + std::string const& toolset) const; + cmIDEFlagTable const* GetLibFlagTable(std::string const& name, + std::string const& toolset) const; + cmIDEFlagTable const* GetLinkFlagTable(std::string const& name, + std::string const& toolset) const; + cmIDEFlagTable const* GetMasmFlagTable(std::string const& name, + std::string const& toolset) const; + +private: + std::string GetToolsetName(std::string const& name, + std::string const& toolset) const; +}; +#endif |