Teach Xcode generator to set XCODE_VERSION
We set the variable 'XCODE_VERSION' in the CMake language to the Xcode version string (e.g. "3.1.2"). Platform config files may use it later.
This commit is contained in:
parent
b7142e9214
commit
e55bbab88b
|
@ -784,6 +784,13 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
|
|||
"Set to true when the target system is Windows and on cygwin.",false,
|
||||
"Variables That Describe the System");
|
||||
|
||||
cm->DefineProperty
|
||||
("XCODE_VERSION", cmProperty::VARIABLE,
|
||||
"Version of Xcode (Xcode generator only).",
|
||||
"Under the Xcode generator, this is the version of Xcode as specified in "
|
||||
"\"Xcode.app/Contents/version.plist\" (such as \"3.1.2\").",false,
|
||||
"Variables That Describe the System");
|
||||
|
||||
cm->DefineProperty
|
||||
("CMAKE_HOST_APPLE", cmProperty::VARIABLE,
|
||||
"True for Apple OSXoperating systems.",
|
||||
|
|
|
@ -35,6 +35,7 @@ PURPOSE. See the above copyright notices for more information.
|
|||
class cmXcodeVersionParser : public cmXMLParser
|
||||
{
|
||||
public:
|
||||
cmXcodeVersionParser(): Version("1.5") {}
|
||||
void StartElement(const char* , const char** )
|
||||
{
|
||||
this->Data = "";
|
||||
|
@ -49,7 +50,7 @@ public:
|
|||
{
|
||||
if(this->Key == "CFBundleShortVersionString")
|
||||
{
|
||||
this->Version = (int)(10.0 * atof(this->Data.c_str()));
|
||||
this->Version = this->Data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -57,7 +58,7 @@ public:
|
|||
{
|
||||
this->Data.append(data, length);
|
||||
}
|
||||
int Version;
|
||||
std::string Version;
|
||||
std::string Key;
|
||||
std::string Data;
|
||||
};
|
||||
|
@ -115,8 +116,15 @@ public:
|
|||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmGlobalXCodeGenerator::cmGlobalXCodeGenerator()
|
||||
cmGlobalXCodeGenerator::cmGlobalXCodeGenerator(std::string const& version)
|
||||
{
|
||||
this->VersionString = version;
|
||||
|
||||
// Compute an integer form of the version number.
|
||||
unsigned int v[2] = {0,0};
|
||||
sscanf(this->VersionString.c_str(), "%u.%u", &v[0], &v[1]);
|
||||
this->XcodeVersion = 10*v[0] + v[1];
|
||||
|
||||
this->FindMakeProgramFile = "CMakeFindXCode.cmake";
|
||||
this->RootObject = 0;
|
||||
this->MainGroupChildren = 0;
|
||||
|
@ -124,7 +132,6 @@ cmGlobalXCodeGenerator::cmGlobalXCodeGenerator()
|
|||
this->ResourcesGroupChildren = 0;
|
||||
this->CurrentMakefile = 0;
|
||||
this->CurrentLocalGenerator = 0;
|
||||
this->XcodeVersion = 15;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -134,13 +141,14 @@ cmGlobalGenerator* cmGlobalXCodeGenerator::New()
|
|||
cmXcodeVersionParser parser;
|
||||
parser.ParseFile
|
||||
("/Developer/Applications/Xcode.app/Contents/version.plist");
|
||||
cmsys::auto_ptr<cmGlobalXCodeGenerator> gg(new cmGlobalXCodeGenerator);
|
||||
if (parser.Version == 20)
|
||||
cmsys::auto_ptr<cmGlobalXCodeGenerator>
|
||||
gg(new cmGlobalXCodeGenerator(parser.Version));
|
||||
if (gg->XcodeVersion == 20)
|
||||
{
|
||||
cmSystemTools::Message("Xcode 2.0 not really supported by cmake, "
|
||||
"using Xcode 15 generator\n");
|
||||
gg->XcodeVersion = 15;
|
||||
}
|
||||
gg->SetVersion(parser.Version);
|
||||
return gg.release();
|
||||
#else
|
||||
std::cerr << "CMake should be built with cmake to use XCode, "
|
||||
|
@ -155,6 +163,7 @@ void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const&
|
|||
cmMakefile * mf, bool optional)
|
||||
{
|
||||
mf->AddDefinition("XCODE","1");
|
||||
mf->AddDefinition("XCODE_VERSION", this->VersionString.c_str());
|
||||
if(this->XcodeVersion == 15)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -33,10 +33,9 @@ class cmSourceGroup;
|
|||
class cmGlobalXCodeGenerator : public cmGlobalGenerator
|
||||
{
|
||||
public:
|
||||
cmGlobalXCodeGenerator();
|
||||
cmGlobalXCodeGenerator(std::string const& version);
|
||||
static cmGlobalGenerator* New();
|
||||
|
||||
void SetVersion(int v) { this->XcodeVersion = v;}
|
||||
///! Get the name for the generator.
|
||||
virtual const char* GetName() const {
|
||||
return cmGlobalXCodeGenerator::GetActualName();}
|
||||
|
@ -193,7 +192,8 @@ protected:
|
|||
virtual const char* GetInstallTargetName() { return "install"; }
|
||||
virtual const char* GetPackageTargetName() { return "package"; }
|
||||
|
||||
int XcodeVersion;
|
||||
unsigned int XcodeVersion;
|
||||
std::string VersionString;
|
||||
std::vector<cmXCodeObject*> XCodeObjects;
|
||||
cmXCodeObject* RootObject;
|
||||
private:
|
||||
|
|
|
@ -93,3 +93,4 @@ CMAKE_C_IMPLICIT_LINK_DIRECTORIES == "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}"
|
|||
CMAKE_CXX_IMPLICIT_LINK_LIBRARIES == "${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}"
|
||||
CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES == "${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES}"
|
||||
|
||||
XCODE_VERSION == "${XCODE_VERSION}"
|
||||
|
|
Loading…
Reference in New Issue