summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-09-23 08:48:39 -0400
committerBrad King <brad.king@kitware.com>2009-09-23 08:48:39 -0400
commite55bbab88bb93a51e29f6e4831f238b1c218e9b1 (patch)
tree629b2add65dc54795c711a5c487a025bd63f5f08
parentb7142e9214b05aa793d6ad12ce1eb7caa234539d (diff)
downloadcmake-e55bbab88bb93a51e29f6e4831f238b1c218e9b1.tar.gz
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.
-rw-r--r--Source/cmDocumentVariables.cxx7
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx23
-rw-r--r--Source/cmGlobalXCodeGenerator.h6
-rw-r--r--Tests/SystemInformation/SystemInformation.in1
4 files changed, 27 insertions, 10 deletions
diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx
index d6d62676ba..ea07da46f5 100644
--- a/Source/cmDocumentVariables.cxx
+++ b/Source/cmDocumentVariables.cxx
@@ -785,6 +785,13 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"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.",
"Set to true when the host system is Apple OSX.",
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 225d271837..e6957490ee 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -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)
{
}
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index 189d7fb4ad..adc675b6d0 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -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:
diff --git a/Tests/SystemInformation/SystemInformation.in b/Tests/SystemInformation/SystemInformation.in
index 477dea0749..d2e4de44bd 100644
--- a/Tests/SystemInformation/SystemInformation.in
+++ b/Tests/SystemInformation/SystemInformation.in
@@ -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}"