summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalXCodeGenerator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmGlobalXCodeGenerator.cxx')
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx23
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)
{
}