I think the build is currently broken on OS X 10.8 and I think there are typos so I was just asking for experienced advice what path to take to fix it. I guess it's also possible it is not broken for other people on their 10.8 systems but if that's the case, I'd like to hear about it.
Thanks, -Frank On Mon, Jun 3, 2013 at 6:00 PM, Maxthon Chan <[email protected]> wrote: > Don't panic, as Apple will switch back in no more than 2 years - when they > reached OS X 10.10 (OS X 10.9 is pretty much confirmed in this year's WWDC > - I am a paid iOS developer so I have access to these "Apple Prerelease" > information. Or maybe at that time there will be no more OS X, and the new > OS is called iOS 11 all across desktop and mobile devices). > > 在 2013-6-4,上午5:55,Frank Rehwinkel <[email protected]> 写道: > > I'm confused by GNUstep's use of the MAC_OS_X_VERSION macros which are > similar but not identical to Apple's and by what appear > to be typos in some of their use. > > The system headers in my OS X 10.8 system define four digit version > numbers but > GNUstep is built on six digit version numbers. Also Apple's documentation > gives an example of using a four digit number, 1050, to represent the 10.5 > version of OS X. > > > http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-SW6 > > Was Apple's version number once six digits or was it always four and > GNUstep > needed/wanted to use six? At the moment, the test for OS X version is > broken > because the four digit value is being picked up from the system header > (1080) > and it works out to be less than an old version number because fewer > digits are > being used (100500 in the first case I tracked down). > > The simplest fix would seem to be to stick with six digits for > GNUstep-base but fix > the one header that was responsible for pulling in a value of 1080 as the > current > max value. We could hardcode a current max value of 100800. > > Also it appears there are some symbols being tested against that aren't > even > declared in the headers. They appear to be typos because they are so > similar > to valid symbols. > > And it appears GNUstep-base hasn't been updated for OS X since 10.6 or > 10.7. The > file GNUstepBase/GSVersionMacros.h defines these constants, among others. > There are no constants that would map to 10.7 or 10.8, but NSCalender.h > does > use MAC_OS_X_VERSION_10_7. So these tests appear to be broken at the > moment. > > GNUstepBase/GSVersionMacros.h: > #ifndef MAC_OS_X_VERSION_10_0 > #define MAC_OS_X_VERSION_10_0 100000 > #define MAC_OS_X_VERSION_10_1 100100 > #define MAC_OS_X_VERSION_10_2 100200 > #define MAC_OS_X_VERSION_10_3 100300 > #define MAC_OS_X_VERSION_10_4 100400 > #define MAC_OS_X_VERSION_10_5 100500 > #define MAC_OS_X_VERSION_10_6 100600 > #endif /* MAC_OS_X_VERSION_10_0 */ > > Note: these symbols are defined in /usr/include/AvailabilityMacros.h. I > can't > imagine Apple switched from a six digit scheme to a four digit scheme > without > changing the symbol names because their own documentation advises using > hardcoded numbers instead of symbol names. But I also can't imagine > GNUstep > would have used the same symbol names in a different manor. It would have > been > just as easy to use a different symbol name pattern to represent GNUstep's > version of the OS version. I can't find a reference to such a change > happening > so maybe GNUstep code was always doing its own thing. > > /usr/include/AvailabilityMacros.h: > /* > * Set up standard Mac OS X versions > */ > #define MAC_OS_X_VERSION_10_0 1000 > #define MAC_OS_X_VERSION_10_1 1010 > #define MAC_OS_X_VERSION_10_2 1020 > #define MAC_OS_X_VERSION_10_3 1030 > #define MAC_OS_X_VERSION_10_4 1040 > #define MAC_OS_X_VERSION_10_5 1050 > #define MAC_OS_X_VERSION_10_6 1060 > #define MAC_OS_X_VERSION_10_7 1070 > #define MAC_OS_X_VERSION_10_8 1080 > > The place where this bites us now when building for OS X is that Apple's > symbol, MAC_OS_X_VERSION_MAX_ALLOWED, gets pulled in from a system header, > AvailabilityInternal.h and is used to test against the six digit values. > > /usr/include/AvailabilityInternal.h: #define > __MAC_OS_X_VERSION_MAX_ALLOWED __MAC_10_8 > > But Apple defines __MAC_10_8 like this: > > /usr/include/Availability.h:#define __MAC_10_8 1080 > > And defining it as 1080 instead of 100800 breaks the assumptions in the > GNUstep-base code. Examples: > > NSPointerFunctions.h: #if OS_API_VERSION(100500, GS_API_LATEST) > > 100500 would be less than 100800 but it is not less than 1080, so code that > should be expanded by the preprocessor is not, and the build fails. > > All these OS X version checks in the code could be changed from the > hardcoded > numbers like the example above in NSPointerFunctions.h to use symbol names > if > we wanted to support some systems where the digits were four and others > where > they were six. But that would mess up anyone who had defined the current > symbol > in their build script. > > Grep'ing through the -base code for OS_API_VERSION, there are over 300 > uses of > the macro, but only 20 unique forms really: > > #if OS_API_VERSION(100200, GS_API_LATEST) > #if OS_API_VERSION(100300, GS_API_LATEST) > #if OS_API_VERSION(100400, GS_API_LATEST) > #if OS_API_VERSION(100500, GS_API_LATEST) > #if OS_API_VERSION(100600, GS_API_LATEST) > #if OS_API_VERSION(100700, GS_API_LATEST) > #if OS_API_VERSION(GSAPI_MACOSX, GS_API_LATEST) > #if OS_API_VERSION(GSAPI_NONE, GSAPI_NONE) > #if OS_API_VERSION(GS_API_MACOSX, GS_API_LATEST) > #if OS_API_VERSION(GS_API_MACOSX, HS_API_LATEST) > #if OS_API_VERSION(GS_API_NONE, GS_API_LATEST) > #if OS_API_VERSION(GS_API_NONE, GS_API_NONE) > #if OS_API_VERSION(GS_API_OPENSTEP, GS_API_MACOSX) > #if OS_API_VERSION(GS_API_OSSPEC, GS_API_LATEST) > #if OS_API_VERSION(MAC_OS_X_VERSION_10_2, GS_API_LATEST) > #if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST) > #if OS_API_VERSION(MAC_OS_X_VERSION_10_4, OS_API_LATEST) > #if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST) > #if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST) > #if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST) > > > Here are the unique definitions for the symbols used in the GNUstep calls > to > OS_API_VERSION(), listed in order of there constant values. > > *** GS_API_NONE > ./Headers/GNUstepBase/GSVersionMacros.h:#define GS_API_NONE 0 > > *** GS_API_OSSPEC > ./Headers/GNUstepBase/GSVersionMacros.h:#define GS_API_OSSPEC 10000 > ./Tools/AGSHtml.m:#define GS_API_OSSPEC 10000 > > *** GS_API_OPENSTEP > ./Headers/GNUstepBase/GSVersionMacros.h:#define GS_API_OPENSTEP 40000 > ./Tools/AGSHtml.m:#define GS_API_OPENSTEP 40000 > > *** GS_API_MACOSX > ./Headers/GNUstepBase/GSVersionMacros.h:#define GS_API_MACOSX 100000 > ./Tools/AGSHtml.m:#define GS_API_MACOSX 100000 > (Could change this to MAC_OS_X_VERSION_10_0 to make it more readable but > probably that's getting carried away.) > > *** GS_API_LATEST > ./Headers/GNUstepBase/GSVersionMacros.h:#define GS_API_LATEST 999999 > > ***** And four symbols used a handful of times that look in error. > > *** OS_API_LATEST - only appears in Foundation/NSZone.h > (no definition found - perhaps typo in Foundation/NSZone.h - > could change OS_... to GS_...) > > *** GSAPI_MACOSX - only appears in Foundation/NSUserDefaults.h > (no definition found - perhaps typos in Foundation/NSUserDefaults.h - could > change GSAPI_... to GS_API_...) > > *** GSAPI_NONE - also only appears in Foundation/NSUserDefaults.h > (no definition found - perhaps typo in Foundation/NSUserDefaults.h - could > change GSAPI_... to GS_API_...) > > *** HS_API_LATEST - only used in Headers/Foundation/NSPortNameServer.h > (no definition found - probably a typo of GS_API_LATEST) > > Should the GNUstep-base macros be based on four digit OS X version numbers > or six digit? > If left as six digits, should the lines that use symbols like > MAC_OS_X_VERSION_10_7 > be changed to use the hard coded numbers like 100700? To avoid any > possible ambiguity > later on from the four digit symbols appearing in the Apple headers? > > Thanks, > -Frank > > _______________________________________________ > Gnustep-dev mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/gnustep-dev > > >
_______________________________________________ Gnustep-dev mailing list [email protected] https://lists.gnu.org/mailman/listinfo/gnustep-dev
