[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: porting to GNUstep from OSX
From: |
Nicola Pero |
Subject: |
Re: porting to GNUstep from OSX |
Date: |
Thu, 10 Jul 2003 15:41:21 +0100 (BST) |
> >> Maybe just some #ifndef's, combined with -D's in the GNUMakefile would
> >> be enough? (I.e., #ifndef GNUSTEP #include <objc/runtime.h> #endif)
> >
> > gnustep-make automatically adds -DGNUSTEP on the command line when
> > compiling for GNUstep.
> >
> > So what I do, and what I guess most people are doing, is
> >
> > #ifndef GNUSTEP
> > /* Apple specific code */
> > #else
> > /* GNUstep specific code */
> > #endif
> >
> > You don't need any autoconf or scripting, this should always work: if
> > you
> > compile GNUstep code using GNUstep, GNUstep is going to be defined; if
> > you
> > compile for Apple (using GNUstep or PBX), GNUstep is not going to be
> > defined.
>
> And if you use the GNUstep make package on OS X (and you know, Helge
> insists on that being ported to OS X every once in a while ;-) you're
> stuck! :-) Because you also need to identify the runtime, because GNUstep
> doesn't
> always mean GNU runtime.
Good point. Which means GNUSTEP might not be enough/the optimal #define
to use if you are interested in runtime details. Thanks for pointing this
out.
> I always define the following in every GNUmakefile of our packages:
>
> ifeq "$(OBJC_RUNTIME_LIB)" "gnu"
> ADDITIONAL_OBJCFLAGS += -DGNU_RUNTIME
> endif
>
> It would be nice and helpful if the GNUstep make package would define
> this automatically.
Yes - nice and helpful; if you look at core/make/library-combo.make you'll
notice that gnustep-make does *already* define this automatically: it
passes -DGNU_RUNTIME=1 if and only if the gnu runtime is used. :-)
Let me sum up the various options then:
#ifdef GNUSTEP
/* Code compiled using gnustep-base/gnustep-gui */
# ifdef GNU_RUNTIME
/* Code compiled using gnustep-base + GNU runtime */
# else
/* Code compiled using gnustep-base + Apple runtime */
# endif
#else
/* Code compiled using Apple Cocoa + Apple runtime */
#endif
(if you want to support libFoundation too, more #ifdef can be used here to
separate that case too).
If only the runtime is relevant, then
#ifdef GNU_RUNTIME
/* Code compiled using gnustep-base + GNU runtime */
#else
/* Code compiled using {Apple Cocoa or gnustep-base} + Apple runtime */
#endif
is the right way of doing it.
May I also point out that newer GCC compilers automatically predefine
__NEXT_RUNTIME__ if and only if the NeXT ObjC runtime is used. Because
older compilers don't predefine it, this test is somewhat less useful for
portable code.
Re: porting to GNUstep from OSX, Chris B. Vetter, 2003/07/09
Re: porting to GNUstep from OSX, Richard Frith-Macdonald, 2003/07/10