VS11: Add support for Windows CE SDKs
Allow additional generator platforms for the installed WinCE SDKs.
This commit is contained in:
parent
8fcf0ab020
commit
0416a0e6d8
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue