summaryrefslogtreecommitdiff
path: root/Source/cmVisualStudioWCEPlatformParser.cxx
diff options
context:
space:
mode:
authorPatrick Gansterer <paroga@paroga.com>2012-11-20 13:12:27 +0100
committerBrad King <brad.king@kitware.com>2012-11-27 08:31:17 -0500
commit6fe4fcba787e4e27a4863faa28aa41ae11026d6b (patch)
tree9c8059ebf44b70194a71f6e777de6befac1896be /Source/cmVisualStudioWCEPlatformParser.cxx
parent2118a2016f69f3c7cdb711eaaa2f6ca9374103ce (diff)
downloadcmake-6fe4fcba787e4e27a4863faa28aa41ae11026d6b.tar.gz
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.
Diffstat (limited to 'Source/cmVisualStudioWCEPlatformParser.cxx')
-rw-r--r--Source/cmVisualStudioWCEPlatformParser.cxx139
1 files changed, 139 insertions, 0 deletions
diff --git a/Source/cmVisualStudioWCEPlatformParser.cxx b/Source/cmVisualStudioWCEPlatformParser.cxx
new file mode 100644
index 0000000000..0afcf678e4
--- /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);
+}