diff options
-rw-r--r-- | Modules/CMakeVS12FindMake.cmake | 27 | ||||
-rw-r--r-- | Modules/InstallRequiredSystemLibraries.cmake | 8 | ||||
-rw-r--r-- | Modules/Platform/Windows-MSVC.cmake | 5 | ||||
-rw-r--r-- | Source/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Source/cmDocumentVariables.cxx | 3 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio12Generator.cxx | 111 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio12Generator.h | 40 | ||||
-rw-r--r-- | Source/cmLocalVisualStudioGenerator.h | 3 | ||||
-rw-r--r-- | Source/cmVisualStudioGeneratorOptions.cxx | 1 | ||||
-rw-r--r-- | Source/cmake.cxx | 4 | ||||
-rw-r--r-- | Tests/CheckCompilerRelatedVariables/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/Preprocess/CMakeLists.txt | 6 | ||||
-rw-r--r-- | Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake | 2 | ||||
-rw-r--r-- | Tests/VSExternalInclude/CMakeLists.txt | 4 |
14 files changed, 213 insertions, 7 deletions
diff --git a/Modules/CMakeVS12FindMake.cmake b/Modules/CMakeVS12FindMake.cmake new file mode 100644 index 0000000..338d9a2 --- /dev/null +++ b/Modules/CMakeVS12FindMake.cmake @@ -0,0 +1,27 @@ + +#============================================================================= +# Copyright 2007-2013 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Always use MSBuild because: +# - devenv treats command-line builds as recently-loaded projects in the IDE +# - devenv does not appear to support non-standard platform toolsets +# If we need devenv for Intel Fortran in the future we should add +# a special case when Fortran is enabled. +find_program(CMAKE_MAKE_PROGRAM + NAMES MSBuild + HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\12.0;MSBuildToolsPath]" + ) + +mark_as_advanced(CMAKE_MAKE_PROGRAM) +set(MSVC12 1) +set(MSVC_VERSION 1800) diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake index bd97501..2479d68 100644 --- a/Modules/InstallRequiredSystemLibraries.cmake +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -182,6 +182,10 @@ if(MSVC) MSVCRT_FILES_FOR_VERSION(11) endif() + if(MSVC12) + MSVCRT_FILES_FOR_VERSION(12) + endif() + if(CMAKE_INSTALL_MFC_LIBRARIES) if(MSVC70) set(__install__libs ${__install__libs} @@ -330,6 +334,10 @@ if(MSVC) if(MSVC11) MFC_FILES_FOR_VERSION(11) endif() + + if(MSVC12) + MFC_FILES_FOR_VERSION(12) + endif() endif() foreach(lib diff --git a/Modules/Platform/Windows-MSVC.cmake b/Modules/Platform/Windows-MSVC.cmake index f9df6d8..e03b601 100644 --- a/Modules/Platform/Windows-MSVC.cmake +++ b/Modules/Platform/Windows-MSVC.cmake @@ -81,6 +81,7 @@ if(NOT MSVC_VERSION) set(MSVC10) set(MSVC11) + set(MSVC12) set(MSVC60) set(MSVC70) set(MSVC71) @@ -88,7 +89,9 @@ if(NOT MSVC_VERSION) set(MSVC90) set(CMAKE_COMPILER_2005) set(CMAKE_COMPILER_SUPPORTS_PDBTYPE) - if(NOT "${_compiler_version}" VERSION_LESS 17) + if(NOT "${_compiler_version}" VERSION_LESS 18) + set(MSVC12 1) + elseif(NOT "${_compiler_version}" VERSION_LESS 17) set(MSVC11 1) elseif(NOT "${_compiler_version}" VERSION_LESS 16) set(MSVC10 1) diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index ab62d2b..f0519fe 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -345,6 +345,8 @@ if (WIN32) cmGlobalVisualStudio10Generator.cxx cmGlobalVisualStudio11Generator.h cmGlobalVisualStudio11Generator.cxx + cmGlobalVisualStudio12Generator.h + cmGlobalVisualStudio12Generator.cxx cmGlobalVisualStudioGenerator.cxx cmGlobalVisualStudioGenerator.h cmGlobalWatcomWMakeGenerator.cxx diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx index 50509a0..61f9f5a 100644 --- a/Source/cmDocumentVariables.cxx +++ b/Source/cmDocumentVariables.cxx @@ -1022,7 +1022,7 @@ void cmDocumentVariables::DefineVariables(cmake* cm) false, "Variables That Describe the System"); - int msvc_versions[] = { 60, 70, 71, 80, 90, 100, 110, 0 }; + int msvc_versions[] = { 60, 70, 71, 80, 90, 100, 110, 120, 0 }; for (int i = 0; msvc_versions[i] != 0; i ++) { const char minor = (char)('0' + (msvc_versions[i] % 10)); @@ -1069,6 +1069,7 @@ void cmDocumentVariables::DefineVariables(cmake* cm) " 1500 = VS 9.0\n" " 1600 = VS 10.0\n" " 1700 = VS 11.0\n" + " 1800 = VS 12.0\n" "", false, "Variables That Describe the System"); diff --git a/Source/cmGlobalVisualStudio12Generator.cxx b/Source/cmGlobalVisualStudio12Generator.cxx new file mode 100644 index 0000000..6468b9a --- /dev/null +++ b/Source/cmGlobalVisualStudio12Generator.cxx @@ -0,0 +1,111 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2011 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmGlobalVisualStudio12Generator.h" +#include "cmLocalVisualStudio10Generator.h" +#include "cmMakefile.h" + +static const char vs12Win32generatorName[] = "Visual Studio 12"; +static const char vs12Win64generatorName[] = "Visual Studio 12 Win64"; +static const char vs12ARMgeneratorName[] = "Visual Studio 12 ARM"; + +class cmGlobalVisualStudio12Generator::Factory + : public cmGlobalGeneratorFactory +{ +public: + virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const { + if(!strcmp(name, vs12Win32generatorName)) + { + return new cmGlobalVisualStudio12Generator( + vs12Win32generatorName, NULL, NULL); + } + if(!strcmp(name, vs12Win64generatorName)) + { + return new cmGlobalVisualStudio12Generator( + vs12Win64generatorName, "x64", "CMAKE_FORCE_WIN64"); + } + if(!strcmp(name, vs12ARMgeneratorName)) + { + return new cmGlobalVisualStudio12Generator( + vs12ARMgeneratorName, "ARM", NULL); + } + return 0; + } + + virtual void GetDocumentation(cmDocumentationEntry& entry) const { + entry.Name = "Visual Studio 12"; + entry.Brief = "Generates Visual Studio 12 project files."; + entry.Full = + "It is possible to append a space followed by the platform name " + "to create project files for a specific target platform. E.g. " + "\"Visual Studio 12 Win64\" will create project files for " + "the x64 processor; \"Visual Studio 12 ARM\" for ARM."; + } + + virtual void GetGenerators(std::vector<std::string>& names) const { + names.push_back(vs12Win32generatorName); + names.push_back(vs12Win64generatorName); + names.push_back(vs12ARMgeneratorName); } +}; + +//---------------------------------------------------------------------------- +cmGlobalGeneratorFactory* cmGlobalVisualStudio12Generator::NewFactory() +{ + return new Factory; +} + +//---------------------------------------------------------------------------- +cmGlobalVisualStudio12Generator::cmGlobalVisualStudio12Generator( + const char* name, const char* architectureId, + const char* additionalPlatformDefinition) + : cmGlobalVisualStudio11Generator(name, architectureId, + additionalPlatformDefinition) +{ + this->FindMakeProgramFile = "CMakeVS12FindMake.cmake"; + std::string vc12Express; + this->ExpressEdition = cmSystemTools::ReadRegistryValue( + "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\12.0\\Setup\\VC;" + "ProductDir", vc12Express, cmSystemTools::KeyWOW64_32); + this->PlatformToolset = "v120"; +} + +//---------------------------------------------------------------------------- +void cmGlobalVisualStudio12Generator::WriteSLNHeader(std::ostream& fout) +{ + fout << "Microsoft Visual Studio Solution File, Format Version 12.00\n"; + if (this->ExpressEdition) + { + fout << "# Visual Studio Express 2013 for Windows Desktop\n"; + } + else + { + fout << "# Visual Studio 2013\n"; + } +} + +//---------------------------------------------------------------------------- +cmLocalGenerator *cmGlobalVisualStudio12Generator::CreateLocalGenerator() +{ + cmLocalVisualStudio10Generator* lg = + new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS12); + lg->SetPlatformName(this->GetPlatformName()); + lg->SetGlobalGenerator(this); + return lg; +} + +//---------------------------------------------------------------------------- +bool cmGlobalVisualStudio12Generator::UseFolderProperty() +{ + // Intentionally skip over the parent class implementation and call the + // grand-parent class's implementation. Folders are not supported by the + // Express editions in VS10 and earlier, but they are in VS12 Express. + return cmGlobalVisualStudio8Generator::UseFolderProperty(); +} diff --git a/Source/cmGlobalVisualStudio12Generator.h b/Source/cmGlobalVisualStudio12Generator.h new file mode 100644 index 0000000..5844ee0 --- /dev/null +++ b/Source/cmGlobalVisualStudio12Generator.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2011 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmGlobalVisualStudio12Generator_h +#define cmGlobalVisualStudio12Generator_h + +#include "cmGlobalVisualStudio11Generator.h" + + +/** \class cmGlobalVisualStudio12Generator */ +class cmGlobalVisualStudio12Generator: + public cmGlobalVisualStudio11Generator +{ +public: + cmGlobalVisualStudio12Generator(const char* name, + const char* architectureId, const char* additionalPlatformDefinition); + static cmGlobalGeneratorFactory* NewFactory(); + + virtual void WriteSLNHeader(std::ostream& fout); + + ///! create the correct local generator + virtual cmLocalGenerator *CreateLocalGenerator(); + + /** TODO: VS 12 user macro support. */ + virtual std::string GetUserMacrosDirectory() { return ""; } +protected: + virtual const char* GetIDEVersion() { return "12.0"; } + bool UseFolderProperty(); +private: + class Factory; +}; +#endif diff --git a/Source/cmLocalVisualStudioGenerator.h b/Source/cmLocalVisualStudioGenerator.h index 9968592..1a3499a 100644 --- a/Source/cmLocalVisualStudioGenerator.h +++ b/Source/cmLocalVisualStudioGenerator.h @@ -38,7 +38,8 @@ public: VS8 = 80, VS9 = 90, VS10 = 100, - VS11 = 110 + VS11 = 110, + VS12 = 120 }; cmLocalVisualStudioGenerator(VSVersion v); diff --git a/Source/cmVisualStudioGeneratorOptions.cxx b/Source/cmVisualStudioGeneratorOptions.cxx index 1df0d9e..01950e1 100644 --- a/Source/cmVisualStudioGeneratorOptions.cxx +++ b/Source/cmVisualStudioGeneratorOptions.cxx @@ -66,6 +66,7 @@ void cmVisualStudioGeneratorOptions::FixExceptionHandlingDefault() break; case cmLocalVisualStudioGenerator::VS10: case cmLocalVisualStudioGenerator::VS11: + case cmLocalVisualStudioGenerator::VS12: // by default VS puts <ExceptionHandling></ExceptionHandling> empty // for a project, to make our projects look the same put a new line // and space over for the closing </ExceptionHandling> as the default diff --git a/Source/cmake.cxx b/Source/cmake.cxx index e2f80d1..376758e 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -65,6 +65,7 @@ # include "cmGlobalVisualStudio9Generator.h" # include "cmGlobalVisualStudio10Generator.h" # include "cmGlobalVisualStudio11Generator.h" +# include "cmGlobalVisualStudio12Generator.h" # include "cmGlobalBorlandMakefileGenerator.h" # include "cmGlobalNMakeMakefileGenerator.h" # include "cmGlobalJOMMakefileGenerator.h" @@ -2244,6 +2245,7 @@ int cmake::ActualConfigure() {"9.0", "Visual Studio 9 2008"}, {"10.0", "Visual Studio 10"}, {"11.0", "Visual Studio 11"}, + {"12.0", "Visual Studio 12"}, {0, 0}}; for(int i=0; version[i].MSVersion != 0; i++) { @@ -2653,6 +2655,8 @@ void cmake::AddDefaultGenerators() this->Generators.push_back( cmGlobalVisualStudio11Generator::NewFactory()); this->Generators.push_back( + cmGlobalVisualStudio12Generator::NewFactory()); + this->Generators.push_back( cmGlobalVisualStudio71Generator::NewFactory()); this->Generators.push_back( cmGlobalVisualStudio8Generator::NewFactory()); diff --git a/Tests/CheckCompilerRelatedVariables/CMakeLists.txt b/Tests/CheckCompilerRelatedVariables/CMakeLists.txt index 20001e6..69cfdb8 100644 --- a/Tests/CheckCompilerRelatedVariables/CMakeLists.txt +++ b/Tests/CheckCompilerRelatedVariables/CMakeLists.txt @@ -37,6 +37,9 @@ endif() if(DEFINED MSVC11) math(EXPR msvc_total "${msvc_total} + 1") endif() +if(DEFINED MSVC12) + math(EXPR msvc_total "${msvc_total} + 1") +endif() echo_var(MSVC) echo_var(MSVC60) @@ -46,6 +49,7 @@ echo_var(MSVC80) echo_var(MSVC90) echo_var(MSVC10) echo_var(MSVC11) +echo_var(MSVC12) echo_var(MSVC_IDE) if(MSVC) diff --git a/Tests/Preprocess/CMakeLists.txt b/Tests/Preprocess/CMakeLists.txt index 78746e7..ad119cc 100644 --- a/Tests/Preprocess/CMakeLists.txt +++ b/Tests/Preprocess/CMakeLists.txt @@ -40,6 +40,9 @@ endif() if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 11") set(PP_VS110 1) endif() +if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 12") + set(PP_VS120 1) +endif() # Some tests below check the PP_* variables set above. They are meant # to test the case that the build tool is at fault. Other tests below @@ -55,7 +58,8 @@ endif() # must not have it escaped inside the configured header. set(STRING_EXTRA "") -if(NOT BORLAND AND NOT PP_VS70 AND NOT PP_VS100 AND NOT PP_VS110) +if(NOT BORLAND AND NOT PP_VS70 + AND NOT PP_VS100 AND NOT PP_VS110 AND NOT PP_VS120) # Borland, VS70 IDE: ; # The Borland compiler will simply not accept a non-escaped semicolon # on the command line. If it is escaped \; then the escape character diff --git a/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake index 09375d9..1ccc1ad 100644 --- a/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake +++ b/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake @@ -3,7 +3,7 @@ include(RunCMake) set(RunCMake_GENERATOR_TOOLSET "") run_cmake(NoToolset) -if("${RunCMake_GENERATOR}" MATCHES "Visual Studio 1[01]|Xcode" AND NOT XCODE_BELOW_3) +if("${RunCMake_GENERATOR}" MATCHES "Visual Studio 1[012]|Xcode" AND NOT XCODE_BELOW_3) set(RunCMake_GENERATOR_TOOLSET "Test Toolset") run_cmake(TestToolset) else() diff --git a/Tests/VSExternalInclude/CMakeLists.txt b/Tests/VSExternalInclude/CMakeLists.txt index 5ce15e0..8fc2871 100644 --- a/Tests/VSExternalInclude/CMakeLists.txt +++ b/Tests/VSExternalInclude/CMakeLists.txt @@ -6,7 +6,7 @@ if(${CMAKE_GENERATOR} MATCHES "Visual Studio 6") else() set(PROJECT_EXT vcproj) endif() -if(${CMAKE_GENERATOR} MATCHES "Visual Studio 1[01]") +if(${CMAKE_GENERATOR} MATCHES "Visual Studio 1[012]") set(PROJECT_EXT vcxproj) endif() @@ -54,7 +54,7 @@ add_dependencies(VSExternalInclude lib2) # and the sln file can no longer be the only source # of that depend. So, for VS 10 make the executable # depend on lib1 and lib2 -if(${CMAKE_GENERATOR} MATCHES "Visual Studio 1[01]") +if(${CMAKE_GENERATOR} MATCHES "Visual Studio 1[012]") add_dependencies(VSExternalInclude lib1) endif() |