This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, next has been updated via eb7dd113fdad7fe38a516f2c325718d320a8d3e2 (commit) via 3a1006e41fd7be22c415d1de45364f0c8ff4b697 (commit) via 40c36c9f7bd101185b06ddf2aee079ccbe7634d3 (commit) via 038df9e49e6fcb54d6f6a1bcfb09f6a0e5ec0c2e (commit) via 6fe4fcba787e4e27a4863faa28aa41ae11026d6b (commit) from 1026cf2f724b1ad7cc712de53e14ab636318b07d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=eb7dd113fdad7fe38a516f2c325718d320a8d3e2 commit eb7dd113fdad7fe38a516f2c325718d320a8d3e2 Merge: 1026cf2 3a1006e Author: Brad King <brad.k...@kitware.com> AuthorDate: Tue Nov 27 08:31:45 2012 -0500 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Tue Nov 27 08:31:45 2012 -0500 Merge topic 'windows-ce' into next 3a1006e VS: Added "Deploy" at project configuration for WindowsCE targets 40c36c9 VS: Make DetermineCompilerId working with WinCE too 038df9e VS: Allow setting the name of the target platform 6fe4fcb VS: Add parser for WCE.VCPlatform.config to read WinCE platforms http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3a1006e41fd7be22c415d1de45364f0c8ff4b697 commit 3a1006e41fd7be22c415d1de45364f0c8ff4b697 Author: Patrick Gansterer <par...@paroga.com> AuthorDate: Fri Sep 14 12:06:57 2012 +0200 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue Nov 27 08:31:20 2012 -0500 VS: Added "Deploy" at project configuration for WindowsCE targets diff --git a/Source/cmGlobalVisualStudio71Generator.cxx b/Source/cmGlobalVisualStudio71Generator.cxx index db584b8..2494f55 100644 --- a/Source/cmGlobalVisualStudio71Generator.cxx +++ b/Source/cmGlobalVisualStudio71Generator.cxx @@ -277,7 +277,7 @@ void cmGlobalVisualStudio71Generator // executables to the libraries it uses are also done here void cmGlobalVisualStudio71Generator ::WriteProjectConfigurations( - std::ostream& fout, const char* name, + std::ostream& fout, const char* name, cmTarget::TargetType, const std::set<std::string>& configsPartOfDefaultBuild, const char* platformMapping) { diff --git a/Source/cmGlobalVisualStudio71Generator.h b/Source/cmGlobalVisualStudio71Generator.h index e9cab06..6d91f97 100644 --- a/Source/cmGlobalVisualStudio71Generator.h +++ b/Source/cmGlobalVisualStudio71Generator.h @@ -63,7 +63,7 @@ protected: virtual void WriteProjectDepends(std::ostream& fout, const char* name, const char* path, cmTarget &t); virtual void WriteProjectConfigurations( - std::ostream& fout, const char* name, + std::ostream& fout, const char* name, cmTarget::TargetType type, const std::set<std::string>& configsPartOfDefaultBuild, const char* platformMapping = NULL); virtual void WriteExternalProject(std::ostream& fout, diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index b82a4f4..71d79a1 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -247,7 +247,7 @@ void cmGlobalVisualStudio7Generator::WriteTargetConfigurations( std::set<std::string> allConfigurations(this->Configurations.begin(), this->Configurations.end()); this->WriteProjectConfigurations( - fout, target->GetName(), + fout, target->GetName(), target->GetType(), allConfigurations, target->GetProperty("VS_PLATFORM_MAPPING")); } else @@ -259,7 +259,7 @@ void cmGlobalVisualStudio7Generator::WriteTargetConfigurations( target->GetProperty("GENERATOR_FILE_NAME"); if (vcprojName) { - this->WriteProjectConfigurations(fout, vcprojName, + this->WriteProjectConfigurations(fout, vcprojName, target->GetType(), configsPartOfDefaultBuild); } } @@ -587,7 +587,7 @@ cmGlobalVisualStudio7Generator // executables to the libraries it uses are also done here void cmGlobalVisualStudio7Generator ::WriteProjectConfigurations( - std::ostream& fout, const char* name, + std::ostream& fout, const char* name, cmTarget::TargetType, const std::set<std::string>& configsPartOfDefaultBuild, const char* platformMapping) { diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index 9eb9687..6e78620 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -108,7 +108,7 @@ protected: virtual void WriteProjectDepends(std::ostream& fout, const char* name, const char* path, cmTarget &t); virtual void WriteProjectConfigurations( - std::ostream& fout, const char* name, + std::ostream& fout, const char* name, cmTarget::TargetType type, const std::set<std::string>& configsPartOfDefaultBuild, const char* platformMapping = NULL); virtual void WriteSLNGlobalSections(std::ostream& fout, diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index 21c82b7..864e8db 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -374,7 +374,7 @@ cmGlobalVisualStudio8Generator void cmGlobalVisualStudio8Generator ::WriteProjectConfigurations( - std::ostream& fout, const char* name, + std::ostream& fout, const char* name, cmTarget::TargetType type, const std::set<std::string>& configsPartOfDefaultBuild, const char* platformMapping) { @@ -395,6 +395,15 @@ cmGlobalVisualStudio8Generator << (platformMapping ? platformMapping : this->GetPlatformName()) << "\n"; } + bool needsDeploy = (type == cmTarget::EXECUTABLE || + type == cmTarget::SHARED_LIBRARY); + if(this->TargetsWindowsCE() && needsDeploy) + { + fout << "\t\t{" << guid << "}." << *i + << "|" << this->GetPlatformName() << ".Deploy.0 = " << *i << "|" + << (platformMapping ? platformMapping : this->GetPlatformName()) + << "\n"; + } } } diff --git a/Source/cmGlobalVisualStudio8Generator.h b/Source/cmGlobalVisualStudio8Generator.h index 4dd2b4b..bcbd7a0 100644 --- a/Source/cmGlobalVisualStudio8Generator.h +++ b/Source/cmGlobalVisualStudio8Generator.h @@ -79,7 +79,7 @@ protected: virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSolutionConfigurations(std::ostream& fout); virtual void WriteProjectConfigurations( - std::ostream& fout, const char* name, + std::ostream& fout, const char* name, cmTarget::TargetType type, const std::set<std::string>& configsPartOfDefaultBuild, const char* platformMapping = NULL); virtual bool ComputeTargetDepends(); http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=40c36c9f7bd101185b06ddf2aee079ccbe7634d3 commit 40c36c9f7bd101185b06ddf2aee079ccbe7634d3 Author: Patrick Gansterer <par...@paroga.com> AuthorDate: Tue Nov 20 13:37:50 2012 +0100 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue Nov 27 08:31:19 2012 -0500 VS: Make DetermineCompilerId working with WinCE too Add a dummy mainCRTStartup() function, since the linker searches for it instead of main() and set the CMAKE_SYSTEM_* variables depending on the MSVC_C_ARCHITECTURE_ID and CMAKE_VS_WINCE_VERSION variables. diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in index 2d76c7a..3d1380c 100644 --- a/Modules/CMakeCCompilerId.c.in +++ b/Modules/CMakeCCompilerId.c.in @@ -228,3 +228,7 @@ int main(int argc, char* argv[]) return require; } #endif + +#ifdef ADD_MAINCRTSTARTUP +void mainCRTStartup() {} +#endif diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in index 5e70a41..142a5c5 100644 --- a/Modules/CMakeCXXCompilerId.cpp.in +++ b/Modules/CMakeCXXCompilerId.cpp.in @@ -210,3 +210,7 @@ int main(int argc, char* argv[]) (void)argv; return require; } + +#ifdef ADD_MAINCRTSTARTUP +extern "C" void mainCRTStartup() {} +#endif diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 05430a6..43469ea 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -140,6 +140,9 @@ Id flags: ${testflags} else() set(id_toolset "") endif() + if(CMAKE_VS_WINCE_VERSION) + set(id_definitions "ADD_MAINCRTSTARTUP") + endif() if("${CMAKE_MAKE_PROGRAM}" MATCHES "[Mm][Ss][Bb][Uu][Ii][Ll][Dd]") set(build /p:Configuration=Debug /p:Platform=@id_arch@ /p:VisualStudioVersion=${vs_version}.0) elseif("${CMAKE_MAKE_PROGRAM}" MATCHES "[Mm][Ss][Dd][Ee][Vv]") diff --git a/Modules/CMakeDetermineSystem.cmake b/Modules/CMakeDetermineSystem.cmake index cd33447..c7f9c32 100644 --- a/Modules/CMakeDetermineSystem.cmake +++ b/Modules/CMakeDetermineSystem.cmake @@ -106,6 +106,12 @@ if(CMAKE_SYSTEM_NAME) set(CMAKE_CROSSCOMPILING TRUE) endif() set(PRESET_CMAKE_SYSTEM_NAME TRUE) +elseif(CMAKE_VS_WINCE_VERSION) + set(CMAKE_SYSTEM_NAME "WindowsCE") + set(CMAKE_SYSTEM_VERSION "${CMAKE_VS_WINCE_VERSION}") + set(CMAKE_SYSTEM_PROCESSOR "${MSVC_C_ARCHITECTURE_ID}") + set(CMAKE_CROSSCOMPILING TRUE) + set(PRESET_CMAKE_SYSTEM_NAME TRUE) else() set(CMAKE_SYSTEM_NAME "${CMAKE_HOST_SYSTEM_NAME}") set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}") diff --git a/Modules/CompilerId/VS-7.vcproj.in b/Modules/CompilerId/VS-7.vcproj.in index bcb18a5..b1449e4 100644 --- a/Modules/CompilerId/VS-7.vcproj.in +++ b/Modules/CompilerId/VS-7.vcproj.in @@ -24,7 +24,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - PreprocessorDefinitions="" + PreprocessorDefinitions="@id_definitions@" MinimalRebuild="false" BasicRuntimeChecks="3" RuntimeLibrary="3" diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index a482d46..21c82b7 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -143,6 +143,12 @@ void cmGlobalVisualStudio8Generator::AddPlatformDefinitions(cmMakefile* mf) { cmGlobalVisualStudio71Generator::AddPlatformDefinitions(mf); mf->AddDefinition("CMAKE_VS_PLATFORM_NAME", this->GetPlatformName()); + + if(this->TargetsWindowsCE()) + { + mf->AddDefinition("CMAKE_VS_WINCE_VERSION", + this->WindowsCEVersion.c_str()); + } } //---------------------------------------------------------------------------- http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=038df9e49e6fcb54d6f6a1bcfb09f6a0e5ec0c2e commit 038df9e49e6fcb54d6f6a1bcfb09f6a0e5ec0c2e Author: Patrick Gansterer <par...@paroga.com> AuthorDate: Tue Nov 20 13:16:36 2012 +0100 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue Nov 27 08:31:18 2012 -0500 VS: Allow setting the name of the target platform Since the name for a target platform is independent of its cpu architecture an additional option is required to set it correctly. diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index 39b31a0..a482d46 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -58,6 +58,7 @@ public: cmGlobalVisualStudio8Generator* ret = new cmGlobalVisualStudio8Generator( name, parser.GetArchitectureFamily(), NULL); + ret->PlatformName = p; ret->WindowsCEVersion = parser.GetOSVersion(); return ret; } @@ -114,6 +115,10 @@ cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator( //---------------------------------------------------------------------------- const char* cmGlobalVisualStudio8Generator::GetPlatformName() const { + if (!this->PlatformName.empty()) + { + return this->PlatformName.c_str(); + } if (this->ArchitectureId == "X86") { return "Win32"; diff --git a/Source/cmGlobalVisualStudio8Generator.h b/Source/cmGlobalVisualStudio8Generator.h index 08674cd..4dd2b4b 100644 --- a/Source/cmGlobalVisualStudio8Generator.h +++ b/Source/cmGlobalVisualStudio8Generator.h @@ -87,6 +87,7 @@ protected: const char* path, cmTarget &t); std::string Name; + std::string PlatformName; std::string WindowsCEVersion; private: diff --git a/Source/cmGlobalVisualStudio9Generator.cxx b/Source/cmGlobalVisualStudio9Generator.cxx index dbe093e..2082384 100644 --- a/Source/cmGlobalVisualStudio9Generator.cxx +++ b/Source/cmGlobalVisualStudio9Generator.cxx @@ -63,6 +63,7 @@ public: cmGlobalVisualStudio9Generator* ret = new cmGlobalVisualStudio9Generator( name, parser.GetArchitectureFamily(), NULL); + ret->PlatformName = p; ret->WindowsCEVersion = parser.GetOSVersion(); return ret; } http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6fe4fcba787e4e27a4863faa28aa41ae11026d6b commit 6fe4fcba787e4e27a4863faa28aa41ae11026d6b Author: Patrick Gansterer <par...@paroga.com> AuthorDate: Tue Nov 20 13:12:27 2012 +0100 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue Nov 27 08:31:17 2012 -0500 VS: Add parser for WCE.VCPlatform.config to read WinCE platforms Parse the WCE.VCPlatform.config file, which contains the installed WindowsCE SDKs in XML format, and add possibility to generate Visual Studio generators for them. diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index fa174bc..4de20c9 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -353,6 +353,8 @@ if (WIN32) cmLocalVisualStudio7Generator.h cmLocalVisualStudioGenerator.cxx cmLocalVisualStudioGenerator.h + cmVisualStudioWCEPlatformParser.h + cmVisualStudioWCEPlatformParser.cxx cmWin32ProcessExecution.cxx cmWin32ProcessExecution.h ) diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index be1bedc..39b31a0 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -13,32 +13,57 @@ #include "cmGlobalVisualStudio8Generator.h" #include "cmLocalVisualStudio7Generator.h" #include "cmMakefile.h" +#include "cmVisualStudioWCEPlatformParser.h" #include "cmake.h" #include "cmGeneratedFileStream.h" -static const char vs8Win32generatorName[] = "Visual Studio 8 2005"; -static const char vs8Win64generatorName[] = "Visual Studio 8 2005 Win64"; +static const char vs8generatorName[] = "Visual Studio 8 2005"; class cmGlobalVisualStudio8Generator::Factory : public cmGlobalGeneratorFactory { public: virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const { - if(!strcmp(name, vs8Win32generatorName)) + if(strstr(name, vs8generatorName) != name) + { + return 0; + } + + const char* p = name + sizeof(vs8generatorName) - 1; + if(p[0] == '\0') { return new cmGlobalVisualStudio8Generator( - vs8Win32generatorName, NULL, NULL); + name, NULL, NULL); + } + + if(p[0] != ' ') + { + return 0; } - if(!strcmp(name, vs8Win64generatorName)) + + ++p; + + if(!strcmp(p, "Win64")) { return new cmGlobalVisualStudio8Generator( - vs8Win64generatorName, "x64", "CMAKE_FORCE_WIN64"); + name, "x64", "CMAKE_FORCE_WIN64"); } - return 0; + + cmVisualStudioWCEPlatformParser parser(p); + parser.ParseVersion("8.0"); + if (!parser.Found()) + { + return 0; + } + + cmGlobalVisualStudio8Generator* ret = new cmGlobalVisualStudio8Generator( + name, parser.GetArchitectureFamily(), NULL); + ret->WindowsCEVersion = parser.GetOSVersion(); + return ret; } virtual void GetDocumentation(cmDocumentationEntry& entry) const { - entry.Name = "Visual Studio 8 2005"; + entry.Name = vs8generatorName; entry.Brief = "Generates Visual Studio 8 2005 project files."; entry.Full = "It is possible to append a space followed by the platform name " @@ -48,8 +73,18 @@ public: } virtual void GetGenerators(std::vector<std::string>& names) const { - names.push_back(vs8Win32generatorName); - names.push_back(vs8Win64generatorName); } + names.push_back(vs8generatorName); + names.push_back(vs8generatorName + std::string(" Win64")); + cmVisualStudioWCEPlatformParser parser; + parser.ParseVersion("8.0"); + const std::vector<std::string>& availablePlatforms = + parser.GetAvailablePlatforms(); + for(std::vector<std::string>::const_iterator i = + availablePlatforms.begin(); i != availablePlatforms.end(); ++i) + { + names.push_back("Visual Studio 8 2005 " + *i); + } + } }; //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalVisualStudio8Generator.h b/Source/cmGlobalVisualStudio8Generator.h index 8163d6a..08674cd 100644 --- a/Source/cmGlobalVisualStudio8Generator.h +++ b/Source/cmGlobalVisualStudio8Generator.h @@ -64,6 +64,10 @@ public: LinkLibraryDependencies and link to .sln dependencies. */ virtual bool NeedLinkLibraryDependencies(cmTarget& target); + /** Return true if building for Windows CE */ + virtual bool TargetsWindowsCE() const { + return !this->WindowsCEVersion.empty(); } + protected: virtual const char* GetIDEVersion() { return "8.0"; } @@ -83,8 +87,10 @@ protected: const char* path, cmTarget &t); std::string Name; + std::string WindowsCEVersion; private: class Factory; + friend class Factory; }; #endif diff --git a/Source/cmGlobalVisualStudio9Generator.cxx b/Source/cmGlobalVisualStudio9Generator.cxx index 87599ef..dbe093e 100644 --- a/Source/cmGlobalVisualStudio9Generator.cxx +++ b/Source/cmGlobalVisualStudio9Generator.cxx @@ -13,37 +13,62 @@ #include "cmGlobalVisualStudio9Generator.h" #include "cmLocalVisualStudio7Generator.h" #include "cmMakefile.h" +#include "cmVisualStudioWCEPlatformParser.h" #include "cmake.h" -static const char vs9Win32generatorName[] = "Visual Studio 9 2008"; -static const char vs9Win64generatorName[] = "Visual Studio 8 2005 Win64"; -static const char vs9IA64generatorName[] = "Visual Studio 9 2008 IA64"; +static const char vs9generatorName[] = "Visual Studio 9 2008"; class cmGlobalVisualStudio9Generator::Factory : public cmGlobalGeneratorFactory { public: virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const { - if(!strcmp(name, vs9Win32generatorName)) + if(strstr(name, vs9generatorName) != name) + { + return 0; + } + + const char* p = name + sizeof(vs9generatorName) - 1; + if(p[0] == '\0') { return new cmGlobalVisualStudio9Generator( - vs9Win32generatorName, NULL, NULL); + name, NULL, NULL); + } + + if(p[0] != ' ') + { + return 0; } - if(!strcmp(name, vs9Win64generatorName)) + + ++p; + + if(!strcmp(p, "IA64")) { return new cmGlobalVisualStudio9Generator( - vs9Win64generatorName, "x64", "CMAKE_FORCE_WIN64"); + name, "Itanium", "CMAKE_FORCE_IA64"); } - if(!strcmp(name, vs9IA64generatorName)) + + if(!strcmp(p, "Win64")) { return new cmGlobalVisualStudio9Generator( - vs9IA64generatorName, "Itanium", "CMAKE_FORCE_IA64"); + name, "x64", "CMAKE_FORCE_WIN64"); + } + + cmVisualStudioWCEPlatformParser parser(p); + parser.ParseVersion("9.0"); + if (!parser.Found()) + { + return 0; } - return 0; + + cmGlobalVisualStudio9Generator* ret = new cmGlobalVisualStudio9Generator( + name, parser.GetArchitectureFamily(), NULL); + ret->WindowsCEVersion = parser.GetOSVersion(); + return ret; } virtual void GetDocumentation(cmDocumentationEntry& entry) const { - entry.Name = "Visual Studio 9 2008"; + entry.Name = vs9generatorName; entry.Brief = "Generates Visual Studio 9 2008 project files."; entry.Full = "It is possible to append a space followed by the platform name " @@ -53,9 +78,19 @@ public: } virtual void GetGenerators(std::vector<std::string>& names) const { - names.push_back(vs9Win32generatorName); - names.push_back(vs9Win64generatorName); - names.push_back(vs9IA64generatorName); } + names.push_back(vs9generatorName); + names.push_back(vs9generatorName + std::string(" Win64")); + names.push_back(vs9generatorName + std::string(" IA64")); + cmVisualStudioWCEPlatformParser parser; + parser.ParseVersion("9.0"); + const std::vector<std::string>& availablePlatforms = + parser.GetAvailablePlatforms(); + for(std::vector<std::string>::const_iterator i = + availablePlatforms.begin(); i != availablePlatforms.end(); ++i) + { + names.push_back("Visual Studio 9 2008 " + *i); + } + } }; //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalVisualStudio9Generator.h b/Source/cmGlobalVisualStudio9Generator.h index f05d377..1310a93 100644 --- a/Source/cmGlobalVisualStudio9Generator.h +++ b/Source/cmGlobalVisualStudio9Generator.h @@ -55,5 +55,6 @@ protected: virtual const char* GetIDEVersion() { return "9.0"; } private: class Factory; + friend class Factory; }; #endif diff --git a/Source/cmVisualStudioWCEPlatformParser.cxx b/Source/cmVisualStudioWCEPlatformParser.cxx new file mode 100644 index 0000000..0afcf67 --- /dev/null +++ b/Source/cmVisualStudioWCEPlatformParser.cxx @@ -0,0 +1,139 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2012 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 "cmVisualStudioWCEPlatformParser.h" +#include "cmGlobalVisualStudioGenerator.h" +#include "cmXMLParser.h" + +int cmVisualStudioWCEPlatformParser::ParseVersion(const char* version) +{ + std::string vskey = cmGlobalVisualStudioGenerator::GetRegistryBase(version); + vskey += "\\Setup\\VS;ProductDir"; + + std::string vsInstallPath; + if(!cmSystemTools::ReadRegistryValue(vskey.c_str(), vsInstallPath)) + { + return 0; + } + cmSystemTools::ConvertToUnixSlashes(vsInstallPath); + + const std::string configFilename = + vsInstallPath + "/VC/vcpackages/WCE.VCPlatform.config"; + + return this->ParseFile(configFilename.c_str()); +} + +std::string cmVisualStudioWCEPlatformParser::GetOSVersion() const +{ + if (this->OSMinorVersion.empty()) + { + return OSMajorVersion; + } + + return OSMajorVersion + "." + OSMinorVersion; +} + +const char* cmVisualStudioWCEPlatformParser::GetArchitectureFamily() const +{ + std::map<std::string, std::string>::const_iterator it = + this->Macros.find("ARCHFAM"); + if (it != this->Macros.end()) + { + return it->second.c_str(); + } + + return 0; +} + +void cmVisualStudioWCEPlatformParser::StartElement(const char* name, + const char** attributes) +{ + if(this->FoundRequiredName) + { + return; + } + + this->CharacterData = ""; + + if(strcmp(name, "PlatformData") == 0) + { + this->PlatformName = ""; + this->OSMajorVersion = ""; + this->OSMinorVersion = ""; + this->Macros.clear(); + } + + if(strcmp(name, "Macro") == 0) + { + std::string macroName; + std::string macroValue; + + for(const char** attr = attributes; *attr; attr += 2) + { + if(strcmp(attr[0], "Name") == 0) + { + macroName = attr[1]; + } + else if(strcmp(attr[0], "Value") == 0) + { + macroValue = attr[1]; + } + } + + if(!macroName.empty()) + { + this->Macros[macroName] = macroValue; + } + } +} + +void cmVisualStudioWCEPlatformParser::EndElement(const char* name) +{ + if(!this->RequiredName) + { + if(strcmp(name, "PlatformName") == 0) + { + this->AvailablePlatforms.push_back(this->CharacterData); + } + return; + } + + if(this->FoundRequiredName) + { + return; + } + + if(strcmp(name, "PlatformName") == 0) + { + this->PlatformName = this->CharacterData; + } + else if(strcmp(name, "OSMajorVersion") == 0) + { + this->OSMajorVersion = this->CharacterData; + } + else if(strcmp(name, "OSMinorVersion") == 0) + { + this->OSMinorVersion = this->CharacterData; + } + else if(strcmp(name, "Platform") == 0) + { + if(this->PlatformName == this->RequiredName) + { + this->FoundRequiredName = true; + } + } +} + +void cmVisualStudioWCEPlatformParser::CharacterDataHandler(const char* data, + int length) +{ + this->CharacterData.append(data, length); +} diff --git a/Source/cmVisualStudioWCEPlatformParser.h b/Source/cmVisualStudioWCEPlatformParser.h new file mode 100644 index 0000000..28061fd --- /dev/null +++ b/Source/cmVisualStudioWCEPlatformParser.h @@ -0,0 +1,55 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2012 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 cmVisualStudioWCEPlatformParser_h +#define cmVisualStudioWCEPlatformParser_h +#include "cmStandardIncludes.h" + +#include "cmXMLParser.h" + +// This class is used to parse XML with configuration +// of installed SDKs in system +class cmVisualStudioWCEPlatformParser : public cmXMLParser +{ +public: + cmVisualStudioWCEPlatformParser(const char* name = NULL) + : RequiredName(name) + , FoundRequiredName(false) + { + } + + int ParseVersion(const char* version); + + bool Found() const {return this->FoundRequiredName;} + const char* GetArchitectureFamily() const; + std::string GetOSVersion() const; + const std::vector<std::string>& GetAvailablePlatforms() const { + return this->AvailablePlatforms; } + +protected: + virtual void StartElement(const char* name, const char** attributes); + void EndElement(const char* name); + void CharacterDataHandler(const char* data, int length); + +private: + std::string CharacterData; + + std::string PlatformName; + std::string OSMajorVersion; + std::string OSMinorVersion; + std::map<std::string, std::string> Macros; + std::vector<std::string> AvailablePlatforms; + + const char* RequiredName; + bool FoundRequiredName; +}; + +#endif ----------------------------------------------------------------------- Summary of changes: hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-commits