diff options
author | Brad King <brad.king@kitware.com> | 2009-09-23 12:48:39 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-09-23 12:48:39 (GMT) |
commit | e55bbab88bb93a51e29f6e4831f238b1c218e9b1 (patch) | |
tree | 629b2add65dc54795c711a5c487a025bd63f5f08 /Source/cmGlobalXCodeGenerator.cxx | |
parent | b7142e9214b05aa793d6ad12ce1eb7caa234539d (diff) | |
download | CMake-e55bbab88bb93a51e29f6e4831f238b1c218e9b1.zip CMake-e55bbab88bb93a51e29f6e4831f238b1c218e9b1.tar.gz CMake-e55bbab88bb93a51e29f6e4831f238b1c218e9b1.tar.bz2 |
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.
Diffstat (limited to 'Source/cmGlobalXCodeGenerator.cxx')
-rw-r--r-- | Source/cmGlobalXCodeGenerator.cxx | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 225d271..e695749 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) { } |