|
@@ -9,131 +9,17 @@
|
|
|
#include <cmext/string_view>
|
|
|
|
|
|
#include "cmGlobalGenerator.h"
|
|
|
-#include "cmGlobalGeneratorFactory.h"
|
|
|
#include "cmGlobalVisualStudioGenerator.h"
|
|
|
#include "cmMakefile.h"
|
|
|
#include "cmMessageType.h"
|
|
|
#include "cmStringAlgorithms.h"
|
|
|
#include "cmSystemTools.h"
|
|
|
|
|
|
-static const char vs12generatorName[] = "Visual Studio 12 2013";
|
|
|
-
|
|
|
-// Map generator name without year to name with year.
|
|
|
-static const char* cmVS12GenName(const std::string& name, std::string& genName)
|
|
|
-{
|
|
|
- if (strncmp(name.c_str(), vs12generatorName,
|
|
|
- sizeof(vs12generatorName) - 6) != 0) {
|
|
|
- return nullptr;
|
|
|
- }
|
|
|
- const char* p = name.c_str() + sizeof(vs12generatorName) - 6;
|
|
|
- if (cmHasLiteralPrefix(p, " 2013")) {
|
|
|
- p += 5;
|
|
|
- }
|
|
|
- genName = std::string(vs12generatorName) + p;
|
|
|
- return p;
|
|
|
-}
|
|
|
-
|
|
|
-class cmGlobalVisualStudio12Generator::Factory
|
|
|
- : public cmGlobalGeneratorFactory
|
|
|
-{
|
|
|
-public:
|
|
|
- std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator(
|
|
|
- const std::string& name, bool allowArch, cmake* cm) const override
|
|
|
- {
|
|
|
- std::string genName;
|
|
|
- const char* p = cmVS12GenName(name, genName);
|
|
|
- if (!p) {
|
|
|
- return std::unique_ptr<cmGlobalGenerator>();
|
|
|
- }
|
|
|
- if (!*p) {
|
|
|
- return std::unique_ptr<cmGlobalGenerator>(
|
|
|
- new cmGlobalVisualStudio12Generator(cm, genName, ""));
|
|
|
- }
|
|
|
- if (!allowArch || *p++ != ' ') {
|
|
|
- return std::unique_ptr<cmGlobalGenerator>();
|
|
|
- }
|
|
|
- if (strcmp(p, "Win64") == 0) {
|
|
|
- return std::unique_ptr<cmGlobalGenerator>(
|
|
|
- new cmGlobalVisualStudio12Generator(cm, genName, "x64"));
|
|
|
- }
|
|
|
- if (strcmp(p, "ARM") == 0) {
|
|
|
- return std::unique_ptr<cmGlobalGenerator>(
|
|
|
- new cmGlobalVisualStudio12Generator(cm, genName, "ARM"));
|
|
|
- }
|
|
|
- return std::unique_ptr<cmGlobalGenerator>();
|
|
|
- }
|
|
|
-
|
|
|
- cmDocumentationEntry GetDocumentation() const override
|
|
|
- {
|
|
|
- return { cmStrCat(vs12generatorName, " [arch]"),
|
|
|
- "Deprecated. Generates Visual Studio 2013 project files. "
|
|
|
- "Optional [arch] can be \"Win64\" or \"ARM\"." };
|
|
|
- }
|
|
|
-
|
|
|
- std::vector<std::string> GetGeneratorNames() const override
|
|
|
- {
|
|
|
- std::vector<std::string> names;
|
|
|
- names.push_back(vs12generatorName);
|
|
|
- return names;
|
|
|
- }
|
|
|
-
|
|
|
- std::vector<std::string> GetGeneratorNamesWithPlatform() const override
|
|
|
- {
|
|
|
- std::vector<std::string> names;
|
|
|
- names.emplace_back(cmStrCat(vs12generatorName, " ARM"));
|
|
|
- names.emplace_back(cmStrCat(vs12generatorName, " Win64"));
|
|
|
- return names;
|
|
|
- }
|
|
|
-
|
|
|
- bool SupportsToolset() const override { return true; }
|
|
|
- bool SupportsPlatform() const override { return true; }
|
|
|
-
|
|
|
- std::vector<std::string> GetKnownPlatforms() const override
|
|
|
- {
|
|
|
- std::vector<std::string> platforms;
|
|
|
- platforms.emplace_back("x64");
|
|
|
- platforms.emplace_back("Win32");
|
|
|
- platforms.emplace_back("ARM");
|
|
|
- return platforms;
|
|
|
- }
|
|
|
-
|
|
|
- std::string GetDefaultPlatformName() const override { return "Win32"; }
|
|
|
-};
|
|
|
-
|
|
|
-std::unique_ptr<cmGlobalGeneratorFactory>
|
|
|
-cmGlobalVisualStudio12Generator::NewFactory()
|
|
|
-{
|
|
|
- return std::unique_ptr<cmGlobalGeneratorFactory>(new Factory);
|
|
|
-}
|
|
|
-
|
|
|
cmGlobalVisualStudio12Generator::cmGlobalVisualStudio12Generator(
|
|
|
cmake* cm, const std::string& name,
|
|
|
std::string const& platformInGeneratorName)
|
|
|
: cmGlobalVisualStudio11Generator(cm, name, platformInGeneratorName)
|
|
|
{
|
|
|
- std::string vc12Express;
|
|
|
- this->ExpressEdition = cmSystemTools::ReadRegistryValue(
|
|
|
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\12.0\\Setup\\VC;"
|
|
|
- "ProductDir",
|
|
|
- vc12Express, cmSystemTools::KeyWOW64_32);
|
|
|
- this->DefaultPlatformToolset = "v120";
|
|
|
- this->DefaultCLFlagTableName = "v12";
|
|
|
- this->DefaultCSharpFlagTableName = "v12";
|
|
|
- this->DefaultLibFlagTableName = "v12";
|
|
|
- this->DefaultLinkFlagTableName = "v12";
|
|
|
- this->DefaultMasmFlagTableName = "v12";
|
|
|
- this->DefaultRCFlagTableName = "v12";
|
|
|
- this->Version = VSVersion::VS12;
|
|
|
-}
|
|
|
-
|
|
|
-bool cmGlobalVisualStudio12Generator::MatchesGeneratorName(
|
|
|
- const std::string& name) const
|
|
|
-{
|
|
|
- std::string genName;
|
|
|
- if (cmVS12GenName(name, genName)) {
|
|
|
- return genName == this->GetName();
|
|
|
- }
|
|
|
- return false;
|
|
|
}
|
|
|
|
|
|
bool cmGlobalVisualStudio12Generator::ProcessGeneratorToolsetField(
|