Hi Eric, > Hi Frank, > Thanks for bringing this up - it's indeed a nasty problem (although hopefully > pretty easy to fix :) > > A year or two ago I was working on updating macports patches for building > GNUstep on OS X 10.6/10.7, and ran in to an instance of this here: > https://github.com/ericwa/gnustep-macports-fixes/blob/master/gnustep/gnustep-back/files/patch-CairoFaceInfo.h > I forget the details but I think I was working around GNUstep pulling in OS > X's MAC_OS_X_VERSION_MAX_ALLOWED. > > > My take on it is, we (GNUstep) should avoid using symbols that Apple is > shipping in their availability macros, since the availability macros on OS X > are included in standard C headers (e.g. /usr/include/stdlib.h). > > > I'd propose modifying this section of > base/Headers/GNUstepBase/GSVersionMacros.h: > > /* > * For MacOS-X compatibility, we define the MacOS-X version constants and > * we allow MAC_OS_X_VERSION_MIN_ALLOWED or MAC_OS_X_VERSION_MAX_ALLOWED > * instead of GS_OPENSTEP_V > */ > > #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 */ > > #ifndef GS_OPENSTEP_V > #ifdef MAC_OS_X_VERSION_MIN_ALLOWED > #define GS_OPENSTEP_V MAC_OS_X_VERSION_MIN_ALLOWED > #else > #ifdef MAC_OS_X_VERSION_MAX_ALLOWED > #define GS_OPENSTEP_V MAC_OS_X_VERSION_MAX_ALLOWED > #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ > #endif /* MAC_OS_X_VERSION_MIN_ALLOWED */ > #endif /* GS_OPENSTEP_V */ > > We could rename the MAC_OS_X_VERSION_* to GS_OS_X_VERSION_*, and eliminate > the section below that makes MAC_OS_X_VERSION_MIN_ALLOWED or > MAC_OS_X_VERSION_MAX_ALLOWED an alias for GS_OPENSTEP_V. > > Maybe someone who has more background on the history of these macros in GS > can chime in?
I'm not fully familiar with the history of these macros, but part of the reason for them being there is that some people (including myself) write code that depends on the OS X version and they use the MAC_OS_X_VERSION macros to conditionally compile parts of the program depending on the target. Renaming those macros to GS_OS_X_VERSION will break all such version checks when porting such code to GNUstep. At present, I'm using the following workaround in GSVersionMacros.h (before the section you quoted) to compile GNUstep on OS X: #if defined(__APPLE__) && defined(GNUSTEP) && MAC_OS_X_VERSION_10_0 == 1000 /* Workaround for the incompatible version numbering scheme used by Apple * FIXME undefining MAC_OS_X_VERSION_{MIN_REQUIRED,MAX_ALLOWED} probably * is not a good idea. However, keep these defined can cause compile errors * when we use tests like OS_API_VERSION(GS_API_NONE, GS_API_NONE). */ #undef MAC_OS_X_VERSION_10_0 #undef MAC_OS_X_VERSION_10_1 #undef MAC_OS_X_VERSION_10_2 #undef MAC_OS_X_VERSION_10_3 #undef MAC_OS_X_VERSION_10_4 #undef MAC_OS_X_VERSION_10_5 #undef MAC_OS_X_VERSION_10_6 #undef MAC_OS_X_VERSION_10_7 #undef MAC_OS_X_VERSION_MIN_REQUIRED #undef MAC_OS_X_VERSION_MAX_ALLOWED #endif I did not commit this change because I never got around to testing whether this works correctly when compiling the base additions on OS X (i.e., with the apple-apple-apple combo) and because I wasn't aware that there would be sufficient interest for this outside my home :-) Wolfgang _______________________________________________ Gnustep-dev mailing list Gnustep-dev@gnu.org https://lists.gnu.org/mailman/listinfo/gnustep-dev