mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-07 14:50:15 -05:00
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.
This commit is contained in:
committed by
Brad King
parent
2118a2016f
commit
6fe4fcba78
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user