VS11: Add support for Windows CE SDKs

Allow additional generator platforms for the installed WinCE SDKs.
This commit is contained in:
Patrick Gansterer 2013-08-04 20:15:35 +02:00 committed by Brad King
parent 8fcf0ab020
commit 0416a0e6d8
2 changed files with 81 additions and 12 deletions

View File

@ -13,31 +13,56 @@
#include "cmLocalVisualStudio10Generator.h" #include "cmLocalVisualStudio10Generator.h"
#include "cmMakefile.h" #include "cmMakefile.h"
static const char vs11Win32generatorName[] = "Visual Studio 11"; static const char vs11generatorName[] = "Visual Studio 11";
static const char vs11Win64generatorName[] = "Visual Studio 11 Win64";
static const char vs11ARMgeneratorName[] = "Visual Studio 11 ARM";
class cmGlobalVisualStudio11Generator::Factory class cmGlobalVisualStudio11Generator::Factory
: public cmGlobalGeneratorFactory : public cmGlobalGeneratorFactory
{ {
public: public:
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const { virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const {
if(!strcmp(name, vs11Win32generatorName)) if(strstr(name, vs11generatorName) != name)
{
return 0;
}
const char* p = name + sizeof(vs11generatorName) - 1;
if(p[0] == '\0')
{ {
return new cmGlobalVisualStudio11Generator( return new cmGlobalVisualStudio11Generator(
name, NULL, NULL); name, NULL, NULL);
} }
if(!strcmp(name, vs11Win64generatorName))
if(p[0] != ' ')
{ {
return new cmGlobalVisualStudio11Generator( return 0;
name, "x64", "CMAKE_FORCE_WIN64");
} }
if(!strcmp(name, vs11ARMgeneratorName))
++p;
if(!strcmp(p, "ARM"))
{ {
return new cmGlobalVisualStudio11Generator( return new cmGlobalVisualStudio11Generator(
name, "ARM", NULL); name, "ARM", NULL);
} }
return 0;
if(!strcmp(p, "Win64"))
{
return new cmGlobalVisualStudio11Generator(
name, "x64", "CMAKE_FORCE_WIN64");
}
std::set<std::string> installedSDKs =
cmGlobalVisualStudio11Generator::GetInstalledWindowsCESDKs();
if(installedSDKs.find(p) == installedSDKs.end())
{
return 0;
}
cmGlobalVisualStudio11Generator* ret =
new cmGlobalVisualStudio11Generator(name, p, NULL);
ret->WindowsCEVersion = "8.00";
return ret;
} }
virtual void GetDocumentation(cmDocumentationEntry& entry) const { virtual void GetDocumentation(cmDocumentationEntry& entry) const {
@ -51,9 +76,18 @@ public:
} }
virtual void GetGenerators(std::vector<std::string>& names) const { virtual void GetGenerators(std::vector<std::string>& names) const {
names.push_back(vs11Win32generatorName); names.push_back(vs11generatorName);
names.push_back(vs11Win64generatorName); names.push_back(vs11generatorName + std::string(" ARM"));
names.push_back(vs11ARMgeneratorName); } names.push_back(vs11generatorName + std::string(" Win64"));
std::set<std::string> installedSDKs =
cmGlobalVisualStudio11Generator::GetInstalledWindowsCESDKs();
for(std::set<std::string>::const_iterator i =
installedSDKs.begin(); i != installedSDKs.end(); ++i)
{
names.push_back("Visual Studio 11 " + *i);
}
}
}; };
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -109,3 +143,36 @@ bool cmGlobalVisualStudio11Generator::UseFolderProperty()
// Express editions in VS10 and earlier, but they are in VS11 Express. // Express editions in VS10 and earlier, but they are in VS11 Express.
return cmGlobalVisualStudio8Generator::UseFolderProperty(); return cmGlobalVisualStudio8Generator::UseFolderProperty();
} }
//----------------------------------------------------------------------------
std::set<std::string>
cmGlobalVisualStudio11Generator::GetInstalledWindowsCESDKs()
{
const char sdksKey[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
"Windows CE Tools\\SDKs";
std::vector<std::string> subkeys;
cmSystemTools::GetRegistrySubKeys(sdksKey, subkeys,
cmSystemTools::KeyWOW64_32);
std::set<std::string> ret;
for(std::vector<std::string>::const_iterator i =
subkeys.begin(); i != subkeys.end(); ++i)
{
std::string key = sdksKey;
key += '\\';
key += *i;
key += ';';
std::string path;
if(cmSystemTools::ReadRegistryValue(key.c_str(),
path,
cmSystemTools::KeyWOW64_32) &&
!path.empty())
{
ret.insert(*i);
}
}
return ret;
}

View File

@ -34,7 +34,9 @@ public:
protected: protected:
virtual const char* GetIDEVersion() { return "11.0"; } virtual const char* GetIDEVersion() { return "11.0"; }
bool UseFolderProperty(); bool UseFolderProperty();
static std::set<std::string> GetInstalledWindowsCESDKs();
private: private:
class Factory; class Factory;
friend class Factory;
}; };
#endif #endif