diff --git a/Modules/Platform/Windows-cl.cmake b/Modules/Platform/Windows-cl.cmake index 92e4e414c..5dffeb4e0 100644 --- a/Modules/Platform/Windows-cl.cmake +++ b/Modules/Platform/Windows-cl.cmake @@ -67,8 +67,8 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 6") SET (CMAKE_NO_BUILD_TYPE 1) ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") - SET (CMAKE_CONFIGURATION_TYPES "Debug Release MinSizeRel RelWithDebInfo" CACHE STRING - "Space separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.") + SET (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING + "Semicolon separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.") SET (CMAKE_CXX_WARNING_LEVEL "3" CACHE STRING "Size of stack for programs.") SET (CMAKE_CXX_STACK_SIZE "10000000" CACHE STRING diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index c19ba046e..111a0a23f 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -30,9 +30,40 @@ void cmGlobalVisualStudio6Generator::EnableLanguage(const char* lang, mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)"); mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl"); + this->GenerateConfigurations(mf); this->cmGlobalGenerator::EnableLanguage(lang, mf); } +void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf) +{ + std::string fname= mf->GetDefinition("CMAKE_ROOT"); + const char* def= mf->GetDefinition( "MSPROJECT_TEMPLATE_DIRECTORY"); + if(def) + { + fname = def; + } + else + { + fname += "/Templates"; + } + fname += "/CMakeVisualStudio6Configurations.cmake"; + if(!mf->ReadListFile(mf->GetCurrentListFile(), fname.c_str())) + { + cmSystemTools::Error("Cannot open ", fname.c_str(), + ". Please copy this file from the main " + "CMake/Templates directory and edit it for " + "your build configurations."); + } + else if(!mf->GetDefinition("CMAKE_CONFIGURATION_TYPES")) + { + cmSystemTools::Error("CMAKE_CONFIGURATION_TYPES not set by ", + fname.c_str(), + ". Please copy this file from the main " + "CMake/Templates directory and edit it for " + "your build configurations."); + } +} + int cmGlobalVisualStudio6Generator::TryCompile(const char *, const char *bindir, const char *projectName, diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index 9e72b85ae..be2dfd992 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -66,6 +66,7 @@ public: virtual void OutputDSWFile(); private: + void GenerateConfigurations(cmMakefile* mf); void SetupTests(); void WriteDSWFile(std::ostream& fout); void WriteDSWHeader(std::ostream& fout); diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 7e62e21b5..f7a0a452f 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -33,11 +33,12 @@ void cmGlobalVisualStudio7Generator::EnableLanguage(const char* lang, mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)"); mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl"); + + // Create list of configurations requested by user's cache, if any. + this->GenerateConfigurations(mf); this->cmGlobalGenerator::EnableLanguage(lang, mf); } - - int cmGlobalVisualStudio7Generator::TryCompile(const char *, const char *bindir, const char *projectName, @@ -150,7 +151,7 @@ void cmGlobalVisualStudio7Generator::SetupTests() } } -void cmGlobalVisualStudio7Generator::GenerateConfigurations() +void cmGlobalVisualStudio7Generator::GenerateConfigurations(cmMakefile* mf) { // process the configurations const char* ct @@ -163,7 +164,7 @@ void cmGlobalVisualStudio7Generator::GenerateConfigurations() std::string::size_type endpos = 0; while(endpos != std::string::npos) { - endpos = configTypes.find(' ', start); + endpos = configTypes.find_first_of(" ;", start); std::string config; std::string::size_type len; if(endpos != std::string::npos) @@ -200,13 +201,26 @@ void cmGlobalVisualStudio7Generator::GenerateConfigurations() m_Configurations.push_back("Debug"); m_Configurations.push_back("Release"); } + + // Reset the entry to have a semi-colon separated list. + std::string configs = m_Configurations[0]; + for(unsigned int i=1; i < m_Configurations.size(); ++i) + { + configs += ";"; + configs += m_Configurations[i]; + } + + mf->AddCacheDefinition( + "CMAKE_CONFIGURATION_TYPES", + configs.c_str(), + "Semicolon separated list of supported configuration types, " + "only supports Debug, Release, MinSizeRel, and RelWithDebInfo, " + "anything else will be ignored.", + cmCacheManager::STRING); } void cmGlobalVisualStudio7Generator::Generate() { - // Generate the possible configuraitons - this->GenerateConfigurations(); - // add a special target that depends on ALL projects for easy build // of Debug only m_LocalGenerators[0]->GetMakefile()-> @@ -580,8 +594,6 @@ std::string cmGlobalVisualStudio7Generator::CreateGUID(const char* name) void cmGlobalVisualStudio7Generator::LocalGenerate() { - // load the possible configuraitons - this->GenerateConfigurations(); this->cmGlobalGenerator::LocalGenerate(); } diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index ce87c6b23..2fa8ca68a 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -78,7 +78,7 @@ public: private: void SetupTests(); - void GenerateConfigurations(); + void GenerateConfigurations(cmMakefile* mf); void WriteSLNFile(std::ostream& fout); void WriteSLNHeader(std::ostream& fout); void WriteProject(std::ostream& fout, diff --git a/Templates/CMakeVisualStudio6Configurations.cmake b/Templates/CMakeVisualStudio6Configurations.cmake new file mode 100644 index 000000000..a9db2eeba --- /dev/null +++ b/Templates/CMakeVisualStudio6Configurations.cmake @@ -0,0 +1,3 @@ +# When the dll templates are changed, this list should be +# updated with the list of possible configurations. +SET(CMAKE_CONFIGURATION_TYPES Debug Release MinSizeRel RelWithDebInfo)