[CMake] XCode 2.1 partial support

Mathieu Malaterre mathieu.malaterre at kitware.com
Mon Jul 18 09:47:27 EDT 2005


Results are here:
http://www.cmake.org/Testing/Sites/cg1.eng.uci.edu/Darwin-Xcode21/20050718-0305-Experimental/Test.html

a few of them are failing because of the Carbon code (need to link to Carbon framework).
But SimpleInstall and SimpleInstall-Stage2 are failing even without the Carbon link problem.

Mathieu

> OK,
> 
> So this patch really is not an Xcode 2.1 generator, but rather it modifies
> the cmake Xcode 1.5 generator to produce files that will be correctly
> translated by Xcode 2.x into the 2.x format.   The big difference between
> 1.5 and 2.x is that 2.x uses debug/release directories for placing object code
> and libraries.   Mathieu with this patch do all the cmake tests pass with 2.x?
> 
> -Bill
> 
> 
> 
> At 09:02 PM 7/17/2005, Mathieu Malaterre wrote:
> >Hello,
> >
> >        So I had access(*) to a MacOSX with Tiger+Xcode 2.1 this week end. After playing a while with it I was able to hack the current Xcode15 generator to be compatible with Xcode21, see cmake-xcode.patch attached to this email.
> >
> >        My first problem is that this patch breaks Xcode15 compatibility since I was not able to find a way to retrieve Xcode version. In Xcode15, xcodebuild -version returns an error and on Xcode21 it returns
> >
> >        DevToolsCore-620.0; DevToolsSupport-610.0
> >
> >        Which makes it hard to link to a particular Xcode release (1.5, 2.0 or 2.1). Therefore the only safe way I found to find the version is to read the plist from Xcode:
> >
> >$ grep -A 1 ShortVersion /Developer/Applications/Xcode.app/Contents/Info.plist
> >        <key>CFBundleShortVersionString</key>
> >        <string>2.1</string>
> >
> >I thought then a code like this should work (see patch):
> >
> >std::string cmGlobalXCodeGenerator::GetXCodeVersion()
> >{
> >  CFBundleRef bundle = CFBundleGetBundleWithIdentifier( CFSTR("com.apple.Xcode") );
> >  ...
> >}
> >
> >   Unfortunately `bundle' is null...
> >
> >Could someone comment on a way to reliably find the Xcode version ?
> >
> >
> >        My second problem is a way to tell ctest that Xcode now generate in /Debug or /Deployment subdir (ala Visual Studio). I was not able to make a proper patch to cmCTest.cxx, resulting in a bad hack (that IMHO should break testing with Makefile generator)
> >
> >Comment on the patch are welcome,
> >Mathieu
> >(*) Thanks to Christopher Knox
> >
> >
> >Index: Source/CMakeLists.txt
> >===================================================================
> >RCS file: /cvsroot/CMake/CMake/Source/CMakeLists.txt,v
> >retrieving revision 1.243
> >diff -u -3 -p -r1.243 CMakeLists.txt
> >--- Source/CMakeLists.txt       15 Jul 2005 15:36:22 -0000      1.243
> >+++ Source/CMakeLists.txt       18 Jul 2005 00:31:27 -0000
> >@@ -183,7 +183,7 @@ ENDIF (WIN32)
> > 
> > # create a library used by the command line and the GUI
> > ADD_LIBRARY(CMakeLib ${SRCS})
> >-TARGET_LINK_LIBRARIES(CMakeLib cmsys ${CMAKE_EXPAT_LIBRARIES} ${CMAKE_ZLIB_LIBRARIES})
> >+TARGET_LINK_LIBRARIES(CMakeLib cmsys ${CMAKE_EXPAT_LIBRARIES} ${CMAKE_ZLIB_LIBRARIES} "-framework Carbon")
> > IF (UNIX)
> >   TARGET_LINK_LIBRARIES(CMakeLib ${CMAKE_DL_LIBS})
> > ENDIF (UNIX)
> >Index: Source/cmCTest.cxx
> >===================================================================
> >RCS file: /cvsroot/CMake/CMake/Source/cmCTest.cxx,v
> >retrieving revision 1.277
> >diff -u -3 -p -r1.277 cmCTest.cxx
> >--- Source/cmCTest.cxx  14 Jul 2005 18:15:21 -0000      1.277
> >+++ Source/cmCTest.cxx  18 Jul 2005 00:31:27 -0000
> >@@ -1876,7 +1876,8 @@ std::string cmCTest::GetBinaryDir()
> > //----------------------------------------------------------------------
> > std::string cmCTest::GetConfigType()
> > {
> >-  return m_ConfigType;
> >+  //return m_ConfigType;
> >+  return "Debug"; // BAD HACK
> > }
> > 
> > //----------------------------------------------------------------------
> >Index: Source/cmGlobalXCodeGenerator.cxx
> >===================================================================
> >RCS file: /cvsroot/CMake/CMake/Source/cmGlobalXCodeGenerator.cxx,v
> >retrieving revision 1.61
> >diff -u -3 -p -r1.61 cmGlobalXCodeGenerator.cxx
> >--- Source/cmGlobalXCodeGenerator.cxx   13 Jul 2005 20:23:32 -0000      1.61
> >+++ Source/cmGlobalXCodeGenerator.cxx   18 Jul 2005 00:31:27 -0000
> >@@ -22,6 +22,7 @@
> > #include "cmGeneratedFileStream.h"
> > #include "cmSourceFile.h"
> > #include "cmOrderLinkDirectories.h"
> >+#include <Carbon/Carbon.h>
> > 
> > //TODO
> > // add OSX application stuff
> >@@ -43,7 +44,7 @@ void cmGlobalXCodeGenerator::EnableLangu
> >                                             cmMakefile * mf)
> > { 
> >   mf->AddDefinition("XCODE","1");
> >-  mf->AddDefinition("CMAKE_CFG_INTDIR",".");
> >+  mf->AddDefinition("CMAKE_CFG_INTDIR","Debug");
> >   mf->AddDefinition("CMAKE_GENERATOR_CC", "gcc");
> >   mf->AddDefinition("CMAKE_GENERATOR_CXX", "g++");
> >   mf->AddDefinition("CMAKE_GENERATOR_NO_COMPILER_ENV", "1");
> >@@ -97,7 +98,7 @@ std::string cmGlobalXCodeGenerator::Gene
> >     {
> >     makeCommand += "ALL_BUILD";
> >     }
> >-  makeCommand += " -buildstyle Development ";
> >+  makeCommand += " -configuration Debug";
> >   return makeCommand;
> > }
> > 
> >@@ -1155,7 +1156,8 @@ void cmGlobalXCodeGenerator::AddLinkLibr
> > {
> >   if(dtarget)
> >     {
> >-    target->AddDependLibrary(this->GetTargetFullPath(dtarget).c_str());
> >+    const char *path = this->GetTargetFullPath(dtarget).c_str();
> >+    target->AddDependLibrary(path);
> >     }
> >   
> >   // if the library is not a full path then add it with a -l flag
> >@@ -1252,6 +1254,7 @@ void cmGlobalXCodeGenerator::AddDependAn
> >       {
> >       linkDirs += " ";
> >       linkDirs += this->XCodeEscapePath(libDir->c_str());
> >+      linkDirs += "/Debug";
> >       }
> >     }
> >   cmXCodeObject* bset = target->GetObject("buildSettings");
> >@@ -1692,3 +1695,20 @@ std::string cmGlobalXCodeGenerator::XCod
> >     }
> >   return ret;
> > }
> >+
> >+std::string cmGlobalXCodeGenerator::GetXCodeVersion()
> >+{
> >+  char sz[20];
> >+  CFStringRef versionStr;
> >+  CFBundleRef bundle = CFBundleGetBundleWithIdentifier( CFSTR("com.apple.Xcode") );
> >+  if ( bundle != NULL )
> >+{
> >+    versionStr = (CFStringRef) CFBundleGetValueForInfoDictionaryKey( bundle, CFSTR("CFBundleShortVersionString") );
> >+  if ( versionStr != NULL 
> >+  && CFGetTypeID( versionStr ) == CFStringGetTypeID() )
> >+  {
> >+    CFStringGetCString( versionStr, sz, sizeof( sz ), kCFStringEncodingUTF8 );
> >+  }
> >+}
> >+  return sz;
> >+}
> >Index: Source/cmGlobalXCodeGenerator.h
> >===================================================================
> >RCS file: /cvsroot/CMake/CMake/Source/cmGlobalXCodeGenerator.h,v
> >retrieving revision 1.25
> >diff -u -3 -p -r1.25 cmGlobalXCodeGenerator.h
> >--- Source/cmGlobalXCodeGenerator.h     15 Jul 2005 19:20:52 -0000      1.25
> >+++ Source/cmGlobalXCodeGenerator.h     18 Jul 2005 00:31:27 -0000
> >@@ -133,6 +133,7 @@ private: 
> >                                   cmTarget& cmtarget,
> >                                   const std::vector<cmCustomCommand>&);
> >   void CreateReRunCMakeFile(cmLocalGenerator* root);
> >+  std::string GetXCodeVersion();
> > private:
> >   std::vector<cmXCodeObject*> m_XCodeObjects;
> >   cmXCodeObject* m_RootObject;
> >
> >
> >_______________________________________________
> >CMake mailing list
> >CMake at cmake.org
> >http://www.cmake.org/mailman/listinfo/cmake
> 
> 



More information about the CMake mailing list