]> err.no Git - sope/blob - gnustep-make/target.make
replaced usage of getCString on MacOS >= 10.4
[sope] / gnustep-make / target.make
1 #
2 #   target.make
3 #
4 #   Determine target specific settings
5 #
6 #   Copyright (C) 1997 Free Software Foundation, Inc.
7 #
8 #   Author:  Scott Christley <scottc@net-community.com>
9 #   Author:  Ovidiu Predescu <ovidiu@net-community.com>
10 #
11 #   This file is part of the GNUstep Makefile Package.
12 #
13 #   This library is free software; you can redistribute it and/or
14 #   modify it under the terms of the GNU General Public License
15 #   as published by the Free Software Foundation; either version 2
16 #   of the License, or (at your option) any later version.
17 #   
18 #   You should have received a copy of the GNU General Public
19 #   License along with this library; see the file COPYING.LIB.
20 #   If not, write to the Free Software Foundation,
21 #   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
23 # This file should not contain any conditional based on the value of
24 # the 'shared' variable, because we have not set it up yet when this
25 # file is processed!
26
27 #
28 # Host and target specific settings
29 #
30 ifeq ($(findstring solaris, $(GNUSTEP_TARGET_OS)), solaris)
31 X_INCLUDES := $(X_INCLUDES)/X11
32 endif
33
34 #
35 # Target specific libraries
36 #
37 TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) -lm
38 ifneq ("$(objc_threaded)","")
39   INTERNAL_CFLAGS = -D_REENTRANT
40   INTERNAL_OBJCFLAGS = -D_REENTRANT
41   AUXILIARY_OBJC_LIBS += $(objc_threaded)
42 ifeq ($(shared), no)
43   TARGET_SYSTEM_LIBS += $(objc_threaded)
44 endif
45 endif
46
47 ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
48   TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) \
49         -lws2_32 -ladvapi32 -lcomctl32 -luser32 -lcomdlg32 \
50         -lmpr -lnetapi32 -lm -I. # the -I is a dummy to avoid -lm^M
51 endif
52 ifeq ($(findstring cygwin, $(GNUSTEP_TARGET_OS)), cygwin)
53   TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) -lm -I. 
54 endif
55 ifeq ($(findstring solaris, $(GNUSTEP_TARGET_OS)), solaris)
56   TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) -lsocket -lnsl -lm
57 endif
58 ifeq ($(findstring sysv4.2, $(GNUSTEP_TARGET_OS)), sysv4.2)
59   TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) -lsocket -lnsl -lm
60 endif
61
62 #
63 # Specific settings for building shared libraries, static libraries,
64 # and bundles on various systems
65 #
66
67 #
68 # For each target, a few target-specific variables need to be set.
69 #
70 # The first one is SHARED_LIB_LINK_CMD - which should be set to the
71 # command(s) to use to link a shared library on that platform.  Please
72 # note that the variables (stuff like $(CC)) in it are not expanded
73 # until SHARED_LIB_LINK_CMD is actually used (STATIC_LIB_LINK_CMD is
74 # the equivalent variable, used for static libraries).
75 #
76 # SHARED_LIB_LINK_CMD will be used to link standard shared libraries,
77 # and frameworks.  It should use the following variables (which are set
78 # by library.make or framework.make before executing
79 # SHARED_LIB_LINK_CMD) to refer to what it needs to link (please note
80 # that STATIC_LIB_LINK_CMD will also use these variables with similar
81 # meanings; but not all of them, as noted):
82 #
83 #  LIB_LINK_OBJ_DIR: where the newly created library should be. 
84 #    Usually GNUSTEP_OBJ_DIR for libraries, and FRAMEWORK_LIBRARY_DIR_NAME 
85 #    for frameworks.
86 #  LIB_LINK_VERSION_FILE: the final file to create, having full
87 #     version information: typically `libgnustep-base.so.1.5.3' for shared
88 #     libraries, and `libgnustep-base.a' for static libraries.  For DLL
89 #     libraries, this is the import library libgnustep-base.dll.a.  The
90 #     reason we use the import library is because that is the code which
91 #     needs to be installed in the library path.  So by setting
92 #     LIB_LINK_VERSION_FILE to the import library, the standard code to
93 #     install it in the library path will work for Windows.  The DLL
94 #     library instead needs to be installed in the PATH, so we have separate
95 #     code for that one.
96 #  LIB_LINK_SONAME_FILE: this is only used for shared libraries; it 
97 #    should be passed in the -Wl,-soname argument of most linkers when 
98 #    building the LIB_LINK_VERSION_FILE. Typically `libgnustep-base.so.1' 
99 #    (but might also be `libgnustep-base.so.1.0' if INTERFACE_VERSION
100 #    has been manually changed when using library.make).  On many
101 #    platforms, it's appropriate/standard to also create this file as
102 #    a symlink to LIB_LINK_VERSION_FILE.  If LIB_LINK_VERSION_FILE is
103 #    the same as LIB_LINK_SONAME_FILE, then the symlink should not be
104 #    created.
105 #  LIB_LINK_FILE: this is only used for shared libraries; it should
106 #    be created as a symlink to LIB_LINK_VERSION_FILE (or to 
107 #    LIB_LINK_SONAME_FILE if it's created on that platform).
108 #    Typically `libgnustep-base.so'.
109 #  LIB_LINK_INSTALL_NAME: on some platforms, when a shared library is
110 #    linked, a default install name of the library is hardcoded into
111 #    the library.  This is that name.
112 #  LIB_LINK_DLL_FILE: on Windows, this is the DLL that gets created
113 #    and installed in the Tools/ directory (eg, gnustep-base.dll).
114 #    Please note that while this is the main file you need to use the
115 #    library at runtime, on Windows we treat this as a side-effect of
116 #    the compilation; the compilation target for make is
117 #    LIB_LINK_VERSION_FILE, which is the import library.
118
119 # AFTER_INSTALL_SHARED_LIB_CMD provides commands to be executed after
120 # installation (at least for libraries, not for frameworks at the
121 # moment), and is supposed to setup symlinks properly in the
122 # installation directory.  It uses the same variables, except for
123 # LIB_LINK_INSTALL_DIR which is the full final path to where the
124 # library (and symlinks) is going to be installed.
125 #
126 # AFTER_INSTALL_STATIC_LIB_CMD is similar.
127 #
128
129 # For frameworks on unusual platforms, you might also need to set
130 # EXTRACT_CLASS_NAMES_COMMAND.  This should be a command which is
131 # evaluated on $(object_file) and returns a list of classes
132 # implemented in the object_file.  Our default command is the
133 # following (you can override it with another one in your target's
134 # section if you need), which runs 'nm' on the object file, and
135 # retrieve all symbols of the form __objc_class_name_NSObject which
136 # are not 'U' (undefined) ... an __objc_class_name_NSObject is defined
137 # in the module implementing the class, and referenced by all other
138 # modules needing to use the class.  So if we have an
139 # __objc_class_name_XXX which is not 'U' (which would be a reference
140 # to a class implemented elsewhere), it must be a class implemented in
141 # this module.
142 #
143 # The 'sed' command parses a set of lines, and extracts lines starting
144 # with __objc_class_name_XXXX Y, where XXXX is a string of characters
145 # from A-Za-z_. and Y is not 'U'.  It then replaces the whole line
146 # with XXXX, and prints the result. '-n' disables automatic printing
147 # for portability, so we are sure we only print what we want on all
148 # platforms.
149 EXTRACT_CLASS_NAMES_COMMAND = nm -Pg $$object_file | sed -n -e '/^__objc_class_name_[A-Za-z_.]* [^U]/ {s/^__objc_class_name_\([A-Za-z_.]*\) [^U].*/\1/p;}'
150
151 #
152 # This is the generic version - if the target is not in the following list,
153 # this setup will be used.  It the target does not override variables here
154 # with its own version, these generic definitions will be used.
155 #
156 HAVE_SHARED_LIBS = no
157 STATIC_LIB_LINK_CMD = \
158         $(AR) $(ARFLAGS) $(AROUT)$(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^;\
159         $(RANLIB) $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE)
160 AFTER_INSTALL_STATIC_LIB_CMD = \
161         (cd $(LIB_LINK_INSTALL_DIR); \
162         $(RANLIB) $(LIB_LINK_VERSION_FILE))
163 SHARED_LIB_LINK_CMD =
164 SHARED_CFLAGS =
165 SHARED_LIBEXT =
166 AFTER_INSTALL_SHARED_LIB_CMD = \
167         (cd $(LIB_LINK_INSTALL_DIR); \
168          $(RM_LN_S) $(LIB_LINK_FILE); \
169          $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
170 AFTER_INSTALL_SHARED_LIB_CHOWN = \
171         (cd $(LIB_LINK_INSTALL_DIR); \
172         chown $(CHOWN_TO) $(LIB_LINK_FILE))
173 HAVE_BUNDLES = no
174 BUNDLE_LINK_CMD = $(BUNDLE_LD) $(BUNDLE_LDFLAGS) $(ALL_LDFLAGS) \
175                 -o $(LDOUT)$(BUNDLE_FILE) $(OBJ_FILES_TO_LINK) \
176                 $(ALL_BUNDLE_LIBS)
177
178 ####################################################
179 #
180 # Start of system specific settings
181 #
182 ####################################################
183
184 ####################################################
185 #
186 # MacOSX-Server 1.0
187 #
188 ifeq ($(findstring rhapsody5, $(GNUSTEP_TARGET_OS)), rhapsody5)
189 ifeq ($(OBJC_RUNTIME_LIB), apple)
190 HAVE_BUNDLES     = yes
191 endif
192
193 HAVE_SHARED_LIBS = yes
194 SHARED_LIBEXT    = .dylib
195
196 ifeq ($(FOUNDATION_LIB), apple)
197   # Use the NeXT compiler
198   CC = cc
199   OBJC_COMPILER = NeXT
200   ifneq ($(arch),)
201     ARCH_FLAGS = $(foreach a, $(arch), -arch $(a))
202     INTERNAL_OBJCFLAGS += $(ARCH_FLAGS)
203     INTERNAL_CFLAGS    += $(ARCH_FLAGS)
204     INTERNAL_LDFLAGS   += $(ARCH_FLAGS)
205   endif
206 endif
207
208 TARGET_LIB_DIR = \
209     Library/Libraries/$(GNUSTEP_TARGET_LDIR)
210
211 ifneq ($(OBJC_COMPILER), NeXT)
212 SHARED_LIB_LINK_CMD     = \
213         $(CC) $(SHARED_LD_PREFLAGS) \
214                 -dynamiclib $(ARCH_FLAGS) -dynamic \
215                 -compatibility_version 1 -current_version 1 \
216                 -install_name $(GNUSTEP_SYSTEM_ROOT)/$(TARGET_LIB_DIR)/$(LIB_LINK_FILE) \
217                 $(ALL_LDFLAGS) -o $@ \
218                 -framework Foundation \
219                 -framework System \
220                 $(INTERNAL_LIBRARIES_DEPEND_UPON) $(LIBRARIES_FOUNDATION_DEPEND_UPON) \
221                 -lobjc -lgcc $^ $(SHARED_LD_POSTFLAGS); \
222         (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
223           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
224 else # OBJC_COMPILER=NeXT
225 SHARED_LIB_LINK_CMD     = \
226         $(CC) $(SHARED_LD_PREFLAGS) \
227                 -dynamiclib $(ARCH_FLAGS) -dynamic \
228                 -compatibility_version 1 -current_version 1 \
229                 -read_only_relocs warning -undefined warning \
230                 -install_name $(GNUSTEP_SYSTEM_ROOT)/$(TARGET_LIB_DIR)/$(LIB_LINK_FILE) \
231                 $(ALL_LDFLAGS) -o $@ \
232                 $(INTERNAL_LIBRARIES_DEPEND_UPON) $(LIBRARIES_FOUNDATION_DEPEND_UPON) \
233                 -framework Foundation \
234                 $^ $(SHARED_LD_POSTFLAGS); \
235         (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
236           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
237 endif # OBJC_COMPILER
238
239 OBJ_MERGE_CMD = \
240         $(CC) -nostdlib -r -d $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
241
242 STATIC_LIB_LINK_CMD     = \
243         /usr/bin/libtool $(STATIC_LD_PREFLAGS) -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ \
244         $(STATIC_LD_POSTFLAGS)
245
246 # This doesn't work with 4.1, what about others?
247 #ADDITIONAL_LDFLAGS += -Wl,-read_only_relocs,suppress
248
249 AFTER_INSTALL_STATIC_LIB_CMD =
250
251 SHARED_CFLAGS   += -dynamic
252 SHARED_LIBEXT   = .dylib
253
254 BUNDLE_LD       =  $(CC)
255 BUNDLE_LDFLAGS  += -bundle -undefined suppress $(ARCH_FLAGS)
256 endif
257 #
258 # end MacOSX-Server 1.0
259 #
260 ####################################################
261
262 ####################################################
263 #
264 # MacOSX, darwin
265 #
266 ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin)
267 ifeq ($(OBJC_RUNTIME_LIB), apple)
268   HAVE_BUNDLES     = yes
269   # Set flags to ignore the MacOSX headers
270   ifneq ($(FOUNDATION_LIB), apple)
271     INTERNAL_OBJCFLAGS += -no-cpp-precomp -nostdinc -I/usr/include
272   endif
273 endif
274
275 HAVE_SHARED_LIBS = yes
276 SHARED_LIBEXT    = .dylib
277
278 # The output of nm is slightly different on Darwin, it doesn't support -P
279 EXTRACT_CLASS_NAMES_COMMAND = nm  -g $$object_file | sed -n -e '/[^U] ___objc_class_name_/ {s/[0-9a-f]* [^U] ___objc_class_name_//p;}'
280
281 ifeq ($(FOUNDATION_LIB), apple)
282   ifneq ($(arch),)
283     ARCH_FLAGS = $(foreach a, $(arch), -arch $(a))
284     INTERNAL_OBJCFLAGS += $(ARCH_FLAGS)
285     INTERNAL_CFLAGS    += $(ARCH_FLAGS)
286     INTERNAL_LDFLAGS   += $(ARCH_FLAGS)
287   endif
288 endif
289
290 # The developer should set this explicitly
291 #DYLIB_COMPATIBILITY_VERSION = -compatibility_version $(VERSION)
292 DYLIB_CURRENT_VERSION       = -current_version $(VERSION)
293
294 # Remove empty dirs from the compiler/linker flags (ie, remove -Idir and 
295 # -Ldir flags where dir is empty).
296 REMOVE_EMPTY_DIRS = yes
297
298 ifeq ($(FOUNDATION_LIB), apple)
299 DYLIB_DEF_FRAMEWORKS += -framework Foundation
300 endif
301
302 ifeq ($(CC_BUNDLE), no)
303 # GNU compiler
304
305 INTERNAL_LDFLAGS += -flat_namespace -undefined warning
306
307 SHARED_LD_PREFLAGS += -Wl,-noall_load -read_only_relocs warning $(CC_LDFLAGS)
308 # Useful flag: -Wl,-single_module.  This flag only
309 # works starting with 10.3. libs w/ffcall don't link on darwin/ix86 without it.
310 ifeq ($(findstring darwin7, $(GNUSTEP_TARGET_OS)), darwin7)
311   SHARED_LD_PREFLAGS += -single_module
312 endif
313 ifeq ($(findstring darwin8, $(GNUSTEP_TARGET_OS)), darwin8)
314   SHARED_LD_PREFLAGS += -single_module
315   BUNDLE_LIBS += -lSystemStubs
316 endif
317 SHARED_LIB_LINK_CMD     = \
318         $(CC) \
319                 $(SHARED_LD_PREFLAGS) \
320                 $(ARCH_FLAGS) -dynamic -dynamiclib      \
321                 $(DYLIB_COMPATIBILITY_VERSION)          \
322                 $(DYLIB_CURRENT_VERSION)                \
323                 -install_name $(LIB_LINK_INSTALL_NAME)  \
324                 $(ALL_LDFLAGS) -o $@                                    \
325                 $(DYLIB_DEF_FRAMEWORKS)                 \
326                 $^ $(INTERNAL_LIBRARIES_DEPEND_UPON) $(LIBRARIES_FOUNDATION_DEPEND_UPON) \
327                 $(SHARED_LD_POSTFLAGS); \
328         (cd $(LIB_LINK_OBJ_DIR); \
329           $(RM_LN_S) $(LIB_LINK_FILE); \
330           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
331             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
332             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
333           fi; \
334           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
335
336 BUNDLE_LD       =  /usr/bin/ld
337 BUNDLE_LDFLAGS  += -bundle /usr/lib/bundle1.o
338
339 else 
340 # Apple Compiler
341
342 #DYLIB_EXTRA_FLAGS    = -read_only_relocs warning -undefined warning -fno-common
343 DYLIB_EXTRA_FLAGS    = -flat_namespace -undefined warning 
344 # Useful optimization flag: -Wl,-single_module.  This flag only
345 # works starting with 10.3.
346 ifeq ($(findstring darwin7, $(GNUSTEP_TARGET_OS)), darwin7)
347   DYLIB_EXTRA_FLAGS    += -Wl,-single_module
348 endif
349
350 SHARED_LIB_LINK_CMD     = \
351         $(CC) $(SHARED_LD_PREFLAGS) \
352                 -dynamiclib $(ARCH_FLAGS) \
353                 $(DYLIB_COMPATIBILITY_VERSION)          \
354                 $(DYLIB_CURRENT_VERSION)                \
355                 -install_name $(LIB_LINK_INSTALL_NAME)  \
356                 $(DYLIB_EXTRA_FLAGS)                    \
357                 $(ALL_LDFLAGS) -o $@                                    \
358                 $(INTERNAL_LIBRARIES_DEPEND_UPON) $(LIBRARIES_FOUNDATION_DEPEND_UPON) \
359                 $^ $(SHARED_LD_POSTFLAGS); \
360         (cd $(LIB_LINK_OBJ_DIR); \
361           $(RM_LN_S) $(LIB_LINK_FILE); \
362           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
363             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
364             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
365           fi; \
366           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
367
368 SHARED_CFLAGS   += -dynamic
369
370 BUNDLE_LD       =  $(CC)
371 BUNDLE_LDFLAGS  += -bundle -undefined error $(ARCH_FLAGS)
372
373 endif # CC_TYPE
374
375 AFTER_INSTALL_SHARED_LIB_CMD = \
376         (cd $(LIB_LINK_INSTALL_DIR); \
377          $(RM_LN_S) $(LIB_LINK_FILE); \
378          if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
379             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
380            $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
381          fi; \
382          $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE) )
383
384 OBJ_MERGE_CMD = \
385         $(CC) -nostdlib -r -d $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
386
387 STATIC_LIB_LINK_CMD     = \
388         /usr/bin/libtool $(STATIC_LD_PREFLAGS) -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ \
389         $(STATIC_LD_POSTFLAGS)
390
391 AFTER_INSTALL_STATIC_LIB_CMD = \
392         (cd $(LIB_LINK_INSTALL_DIR); \
393         $(RANLIB) $(LIB_LINK_VERSION_FILE))
394
395 SHARED_CFLAGS   += -fno-common
396
397 endif
398 #
399 # end MacOSX, darwin
400 #
401 ####################################################
402
403 ####################################################
404 #
405 # OpenStep 4.x
406 #
407 ifeq ($(GNUSTEP_TARGET_OS), nextstep4)
408 ifeq ($(OBJC_RUNTIME_LIB), nx)
409   HAVE_BUNDLES  = yes
410   OBJC_COMPILER = NeXT
411 endif
412
413 HAVE_SHARED_LIBS = yes
414
415 ifeq ($(FOUNDATION_LIB), nx)
416   # Use the NeXT compiler
417   CC = cc
418   ifneq ($(arch),)
419     ARCH_FLAGS = $(foreach a, $(arch), -arch $(a))
420     INTERNAL_OBJCFLAGS += $(ARCH_FLAGS)
421     INTERNAL_CFLAGS += $(ARCH_FLAGS)
422     INTERNAL_LDFLAGS += $(ARCH_FLAGS)
423   endif
424 endif
425
426 TARGET_LIB_DIR = \
427     Library/Libraries/$(GNUSTEP_TARGET_LDIR)
428
429 ifneq ($(OBJC_COMPILER), NeXT)
430 SHARED_LIB_LINK_CMD     = \
431         /bin/libtool $(SHARED_LD_PREFLAGS) \
432                 -dynamic -read_only_relocs suppress $(ARCH_FLAGS) \
433                 -install_name $(GNUSTEP_SYSTEM_ROOT)/$(TARGET_LIB_DIR)/$(LIB_LINK_FILE) \
434                 $(ALL_LDFLAGS) -o $@ \
435                 -framework System \
436                 $(INTERNAL_LIBRARIES_DEPEND_UPON) $(LIBRARIES_FOUNDATION_DEPEND_UPON) \
437                 -lobjc -lgcc $^ $(SHARED_LD_POSTFLAGS); \
438         (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
439           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
440 else
441 SHARED_LIB_LINK_CMD     = \
442         /bin/libtool $(SHARED_LD_PREFLAGS) \
443                 -dynamic -read_only_relocs suppress $(ARCH_FLAGS) \
444                 -install_name $(GNUSTEP_SYSTEM_ROOT)/$(TARGET_LIB_DIR)/$(LIB_LINK_FILE) \
445                 $(ALL_LDFLAGS) $@ \
446                 -framework System \
447                 $(INTERNAL_LIBRARIES_DEPEND_UPON) \
448                 $(LIBRARIES_FOUNDATION_DEPEND_UPON) $^ \
449                 $(SHARED_LD_POSTFLAGS); \
450         (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
451           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
452 endif
453
454 STATIC_LIB_LINK_CMD     = \
455         /bin/libtool $(STATIC_LD_PREFLAGS) -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ \
456         $(STATIC_LD_POSTFLAGS)
457
458 # This doesn't work with 4.1, what about others?
459 #ADDITIONAL_LDFLAGS += -Wl,-read_only_relocs,suppress
460
461 AFTER_INSTALL_STATIC_LIB_CMD =
462
463 SHARED_CFLAGS   += -dynamic
464 SHARED_LIBEXT   = .a
465
466 BUNDLE_LD       = ld
467 BUNDLE_LDFLAGS  += -r $(ARCH_FLAGS)
468 endif
469 #
470 # end OpenStep 4.x
471 #
472 ####################################################
473
474 ####################################################
475 #
476 # NEXTSTEP 3.x
477 #
478 ifeq ($(GNUSTEP_TARGET_OS), nextstep3)
479 ifeq ($(OBJC_RUNTIME_LIB), nx)
480   HAVE_BUNDLES            = yes
481   OBJC_COMPILER = NeXT
482 endif
483
484 HAVE_SHARED_LIBS        = yes
485
486 ifeq ($(FOUNDATION_LIB), nx)
487   # Use the NeXT compiler
488   CC = cc
489   ifneq ($(arch),)
490     ARCH_FLAGS = $(foreach a, $(arch), -arch $(a))
491     INTERNAL_OBJCFLAGS += $(ARCH_FLAGS)
492     INTERNAL_CFLAGS += $(ARCH_FLAGS)
493     INTERNAL_LDFLAGS += $(ARCH_FLAGS)
494   endif
495 endif
496
497 TARGET_LIB_DIR = \
498     Library/Libraries/$(GNUSTEP_TARGET_LDIR)
499
500 ifneq ($(OBJC_COMPILER), NeXT)
501 SHARED_LIB_LINK_CMD     = \
502         /bin/libtool $(SHARED_LD_PREFLAGS) -dynamic -read_only_relocs suppress \
503                  $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ -framework System \
504                 $(INTERNAL_LIBRARIES_DEPEND_UPON) -lobjc -lgcc -undefined warning $^ \
505                 $(SHARED_LD_POSTFLAGS); \
506         (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
507           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
508 else
509 SHARED_LIB_LINK_CMD     = \
510         /bin/libtool $(SHARED_LD_PREFLAGS) \
511                 -dynamic -read_only_relocs suppress $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ \
512                 -framework System \
513                 $(INTERNAL_LIBRARIES_DEPEND_UPON) $^ \
514                 $(SHARED_LD_POSTFLAGS); \
515         (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
516           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
517 endif
518
519 STATIC_LIB_LINK_CMD     = \
520         /bin/libtool $(STATIC_LD_PREFLAGS) \
521         -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ $(STATIC_LD_POSTFLAGS)
522
523 ADDITIONAL_LDFLAGS += -Wl,-read_only_relocs,suppress
524
525 AFTER_INSTALL_STATIC_LIB_CMD =
526
527 SHARED_CFLAGS   += -dynamic
528 SHARED_LIBEXT   = .a
529
530 BUNDLE_LD       = ld
531 BUNDLE_LDFLAGS  += -r $(ARCH_FLAGS)
532 endif
533 #
534 # end NEXTSTEP 3.x
535 #
536 ####################################################
537
538 ####################################################
539 #
540 # Linux ELF or GNU/Hurd
541 #
542 # The following ifeq matches both 'linux-gnu' (which is GNU/Linux ELF)
543 # and 'gnu0.3' (I've been told GNUSTEP_TARGET_OS is 'gnu0.3' on
544 # GNU/Hurd at the moment).  We want the same code in both cases.
545 ifeq ($(findstring gnu, $(GNUSTEP_TARGET_OS)), gnu)
546 HAVE_SHARED_LIBS        = yes
547 SHARED_LIB_LINK_CMD     = \
548         $(CC) $(SHARED_LD_PREFLAGS) -shared -Wl,-soname,$(LIB_LINK_SONAME_FILE) \
549            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ \
550            $(INTERNAL_LIBRARIES_DEPEND_UPON) \
551            $(SHARED_LD_POSTFLAGS);\
552         (cd $(LIB_LINK_OBJ_DIR); \
553           $(RM_LN_S) $(LIB_LINK_FILE); \
554           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
555             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
556             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
557           fi; \
558           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
559         )
560 AFTER_INSTALL_SHARED_LIB_CMD = \
561         (cd $(LIB_LINK_INSTALL_DIR); \
562           $(RM_LN_S) $(LIB_LINK_FILE); \
563           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
564             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
565             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
566           fi; \
567           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
568         )
569 AFTER_INSTALL_SHARED_LIB_CHOWN = \
570         (cd $(LIB_LINK_INSTALL_DIR); \
571         chown $(CHOWN_TO) $(LIB_LINK_SONAME_FILE); \
572         chown $(CHOWN_TO) $(LIB_LINK_FILE))
573
574 OBJ_MERGE_CMD           = \
575         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
576
577 SHARED_CFLAGS      += -fPIC
578 SHARED_LIBEXT      =  .so
579
580 HAVE_BUNDLES       =  yes
581 BUNDLE_LD          =  $(CC)
582 BUNDLE_LDFLAGS     += -shared
583 ADDITIONAL_LDFLAGS += -rdynamic
584 STATIC_LDFLAGS += -static
585 endif
586 #
587 # end Linux ELF
588 #
589 ####################################################
590
591 ####################################################
592 #
593 # FreeBSD a.out (2.2.x)
594 #
595 ifeq ($(findstring freebsdaout, $(GNUSTEP_TARGET_OS)), freebsdaout)
596 freebsdaout = yes
597
598 HAVE_SHARED_LIBS        = no
599 SHARED_LIB_LINK_CMD = \
600         $(CC) -shared -Wl,-soname,$(LIB_LINK_VERSION_FILE) \
601            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ /usr/lib/c++rt0.o;\
602         (cd $(LIB_LINK_OBJ_DIR); \
603           $(RM_LN_S) $(LIB_LINK_FILE); \
604           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
605
606 SHARED_CFLAGS   += -fPIC
607 SHARED_LIBEXT   = .so
608
609 HAVE_BUNDLES    = yes
610 BUNDLE_LD       = $(CC)
611 BUNDLE_LDFLAGS  += -shared
612 ADDITIONAL_LDFLAGS += -rdynamic
613 STATIC_LDFLAGS += -static
614 endif
615 #
616 # end FreeBSD A.out
617 #
618 ####################################################
619
620 ####################################################
621 #
622 # FreeBSD ELF
623 #
624 ifeq ($(findstring freebsd, $(GNUSTEP_TARGET_OS)), freebsd)
625 ifneq ($(freebsdaout), yes)
626 HAVE_SHARED_LIBS        = yes
627 SHARED_LIB_LINK_CMD = \
628         $(CC) -shared -Wl,-soname,$(LIB_LINK_SONAME_FILE) \
629            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ \
630            $(INTERNAL_LIBRARIES_DEPEND_UPON) \
631            $(SHARED_LD_POSTFLAGS);\
632         (cd $(LIB_LINK_OBJ_DIR); \
633           $(RM_LN_S) $(LIB_LINK_FILE); \
634           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
635             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
636             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
637           fi; \
638           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE))
639 AFTER_INSTALL_SHARED_LIB_CMD = \
640         (cd $(LIB_LINK_INSTALL_DIR); \
641           $(RM_LN_S) $(LIB_LINK_FILE); \
642           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
643             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
644             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
645           fi; \
646           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
647         )
648 AFTER_INSTALL_SHARED_LIB_CHOWN = \
649         (cd $(LIB_LINK_INSTALL_DIR); \
650         chown $(CHOWN_TO) $(LIB_LINK_SONAME_FILE); \
651         chown $(CHOWN_TO) $(LIB_LINK_FILE))
652 OBJ_MERGE_CMD           = \
653         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
654
655 SHARED_CFLAGS   += -fPIC
656 SHARED_LIBEXT   = .so
657
658 HAVE_BUNDLES    = yes
659 BUNDLE_LD       = $(CC)
660 BUNDLE_LDFLAGS  += -shared
661 ADDITIONAL_LDFLAGS += -rdynamic
662 STATIC_LDFLAGS += -static
663
664 ##
665 ## The -pthread flag must be passed to all compilation/link commands.
666 ##
667 ifeq ($(objc_threaded), -pthread)
668   INTERNAL_CFLAGS += -pthread
669   INTERNAL_OBJCFLAGS += -pthread
670   INTERNAL_LDFLAGS += -pthread
671 endif
672 endif
673 endif
674 #
675 # end FreeBSD
676 #
677 ####################################################
678
679 ####################################################
680 #
681 # NetBSD (ELF)
682 #
683 ifeq ($(findstring netbsd, $(GNUSTEP_TARGET_OS)), netbsd)
684 HAVE_SHARED_LIBS    = yes
685 SHARED_LD_POSTFLAGS = -Wl,-R/usr/pkg/lib -L/usr/pkg/lib
686 SHARED_LIB_LINK_CMD = \
687         $(CC) -shared -Wl,-soname,$(LIB_LINK_VERSION_FILE) \
688               $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) \
689                  $^ $(INTERNAL_LIBRARIES_DEPEND_UPON) \
690                  $(SHARED_LD_POSTFLAGS); \
691         (cd $(LIB_LINK_OBJ_DIR); \
692           $(RM_LN_S) $(LIB_LINK_FILE); \
693           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
694 OBJ_MERGE_CMD           = \
695         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
696
697 SHARED_CFLAGS   += -fPIC
698 SHARED_LIBEXT   = .so
699
700 HAVE_BUNDLES    = yes
701 BUNDLE_LD       = $(CC)
702 BUNDLE_LDFLAGS  += -shared
703 ADDITIONAL_LDFLAGS += -rdynamic -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -Wl,-R/usr/X11R6/lib -L/usr/X11R6/lib
704 ADDITIONAL_INCLUDE_DIRS += -I/usr/pkg/include
705 STATIC_LDFLAGS += -static
706 endif
707 #
708 # end NetBSD
709 #
710 ####################################################
711
712 ####################################################
713 #
714 # DragonFly
715 #
716 ifeq ($(findstring dragonfly, $(GNUSTEP_TARGET_OS)), dragonfly)
717 HAVE_SHARED_LIBS    = yes
718 SHARED_LD_POSTFLAGS = -Wl,-R/usr/pkg/lib -L/usr/pkg/lib
719 SHARED_LIB_LINK_CMD = \
720         $(CC) -shared -Wl,-soname,$(LIB_LINK_VERSION_FILE) \
721               $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) \
722                  $^ $(INTERNAL_LIBRARIES_DEPEND_UPON) \
723                  $(SHARED_LD_POSTFLAGS); \
724         (cd $(LIB_LINK_OBJ_DIR); \
725           $(RM_LN_S) $(LIB_LINK_FILE); \
726           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
727 OBJ_MERGE_CMD           = \
728         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
729
730 SHARED_CFLAGS   += -fPIC
731 SHARED_LIBEXT   = .so
732
733 HAVE_BUNDLES    = yes
734 BUNDLE_LD       = $(CC)
735 BUNDLE_LDFLAGS  += -shared
736 ADDITIONAL_LDFLAGS += -rdynamic -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -Wl,-R/usr/X11R6/lib -L/usr/X11R6/lib
737 ADDITIONAL_INCLUDE_DIRS += -I/usr/pkg/include
738 STATIC_LDFLAGS += -static
739 endif
740 #
741 # end DragonFly
742 #
743 ####################################################
744
745 ####################################################
746 #
747 # OpenBSD 3.x (though set for 3.3)
748 #
749 ifeq ($(findstring openbsd, $(GNUSTEP_TARGET_OS)), openbsd)
750 HAVE_SHARED_LIBS        = yes
751 SHARED_LIB_LINK_CMD = \
752         $(CC) -shared -Wl,-soname,$(LIB_LINK_SONAME_FILE) \
753            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ \
754            $(INTERNAL_LIBRARIES_DEPEND_UPON) \
755            $(SHARED_LD_POSTFLAGS);\
756         (cd $(LIB_LINK_OBJ_DIR); \
757           $(RM_LN_S) $(LIB_LINK_FILE); \
758           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
759             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
760             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
761           fi; \
762           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE))
763 AFTER_INSTALL_SHARED_LIB_CMD = \
764         (cd $(LIB_LINK_INSTALL_DIR); \
765           $(RM_LN_S) $(LIB_LINK_FILE); \
766           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
767             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
768             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
769           fi; \
770           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
771         )
772
773 OBJ_MERGE_CMD           = \
774         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
775
776 SHARED_CFLAGS   += -fPIC
777 SHARED_LIBEXT   = .so
778
779 HAVE_BUNDLES    = yes
780 BUNDLE_LD       = $(CC)
781 BUNDLE_LDFLAGS  += -shared -fPIC
782 ADDITIONAL_LDFLAGS += -Wl,-E
783 STATIC_LDFLAGS += -static
784
785 # nm on OpenBSD is rather like on Darwin
786 EXTRACT_CLASS_NAMES_COMMAND = nm  -g $$object_file | sed -n -e '/[^U] __objc_class_name_/ {s/[0-9a-f]* [^U] __objc_class_name_//p;}'
787 endif
788 #
789 # end OpenBSD 3.x
790 #
791 ####################################################
792
793 ####################################################
794 #
795 # OSF
796 #
797 ifeq ($(findstring osf, $(GNUSTEP_TARGET_OS)), osf)
798 HAVE_SHARED_LIBS        = yes
799 SHARED_LIB_LINK_CMD = \
800         $(CC) -shared -Wl,-soname,$(LIB_LINK_VERSION_FILE) \
801            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ ;\
802         (cd $(LIB_LINK_OBJ_DIR); \
803           $(RM_LN_S) $(LIB_LINK_FILE); \
804           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
805 OBJ_MERGE_CMD           = \
806         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
807
808 SHARED_CFLAGS   += -fPIC
809 SHARED_LIBEXT   = .so
810
811 HAVE_BUNDLES    = yes
812 BUNDLE_LD       = $(CC)
813 BUNDLE_LDFLAGS  += -shared
814 ADDITIONAL_LDFLAGS += -rdynamic
815 STATIC_LDFLAGS += -static
816 # Newer gcc's don't define this in Objective-C programs:
817 AUXILIARY_CPPFLAGS += -D__LANGUAGES_C__
818 endif
819 #
820 # end OSF
821 #
822 ####################################################
823
824 ####################################################
825 #
826 # IRIX
827 #
828 ifeq ($(findstring irix, $(GNUSTEP_TARGET_OS)), irix)
829 HAVE_SHARED_LIBS        = yes
830
831 SHARED_LIB_LINK_CMD     = \
832         $(CC) $(SHARED_LD_PREFLAGS) -shared -Wl,-soname,$(LIB_LINK_SONAME_FILE) \
833            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ \
834            -Wl,-rpath,$(LIB_LINK_INSTALL_DIR) \
835            $(INTERNAL_LIBRARIES_DEPEND_UPON) \
836            $(SHARED_LD_POSTFLAGS);\
837         (cd $(LIB_LINK_OBJ_DIR); \
838           $(RM_LN_S) $(LIB_LINK_FILE); \
839           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
840             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
841             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
842           fi; \
843           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
844         )
845 AFTER_INSTALL_SHARED_LIB_CMD = \
846         (cd $(LIB_LINK_INSTALL_DIR); \
847           $(RM_LN_S) $(LIB_LINK_FILE); \
848           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
849             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
850             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
851           fi; \
852           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
853         )
854 AFTER_INSTALL_SHARED_LIB_CHOWN = \
855         (cd $(LIB_LINK_INSTALL_DIR); \
856         chown $(CHOWN_TO) $(LIB_LINK_SONAME_FILE); \
857         chown $(CHOWN_TO) $(LIB_LINK_FILE))
858
859 SHARED_CFLAGS     += -fPIC
860 SHARED_LIBEXT   = .so
861
862 OBJ_MERGE_CMD           = \
863         /usr/bin/ld -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
864
865 ADDITIONAL_LDFLAGS +=
866 STATIC_LDFLAGS +=
867
868 HAVE_BUNDLES    = yes
869 BUNDLE_LD       = $(CC)
870 BUNDLE_LDFLAGS  += -shared
871 endif
872
873 # end IRIX
874 #
875 ####################################################
876
877 ####################################################
878 #
879 # Mingw32
880 #
881 ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
882 shared = yes
883 HAVE_SHARED_LIBS = yes
884 # This command links the library, generates automatically the list of
885 # symbols to export, creates the DLL (eg, obj/gnustep-base.dll) and 
886 # the import library (eg, obj/libgnustep-base.dll.a).
887 SHARED_LIB_LINK_CMD     = \
888         $(CC) $(SHARED_LD_PREFLAGS) -shared \
889         -Wl,--enable-auto-image-base \
890         -Wl,--out-implib,$(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) \
891            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_DLL_FILE) $^ \
892            $(INTERNAL_LIBRARIES_DEPEND_UPON) \
893            $(SHARED_LD_POSTFLAGS)
894
895 AFTER_INSTALL_SHARED_LIB_CMD = 
896 AFTER_INSTALL_SHARED_LIB_CHOWN =
897
898 BUILD_DLL        = yes
899 LIBEXT           = .a
900 # Technically, in this Unix-inspired building system, a DLL is
901 # composed of a .dll file which goes in the executable path and is the
902 # one which is loaded at runtime, and a .dll.a file which goes in the
903 # library path and which is linked into the application in order to
904 # enable it use the .dll.  Anything in gnustep-make which is looking
905 # for shared libs should detect / look for the .dll.a as that's what
906 # we link applications against.
907 SHARED_LIBEXT    = .dll.a
908 DLL_LIBEXT       = .dll
909 #SHARED_CFLAGS   += 
910
911 OBJ_MERGE_CMD = \
912         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
913
914 HAVE_BUNDLES   = yes
915 BUNDLE_LD      = $(CC)
916 BUNDLE_LDFLAGS     += -shared -Wl,--enable-auto-image-base
917 ADDITIONAL_LDFLAGS += -Wl,--enable-auto-import
918
919 # On Mingw32, it looks like the class name symbols start with '___' rather 
920 # than '__'
921 EXTRACT_CLASS_NAMES_COMMAND = nm -Pg $$object_file | sed -n -e '/^___objc_class_name_[A-Za-z_.]* [^U]/ {s/^___objc_class_name_\([A-Za-z_.]*\) [^U].*/\1/p;}'
922
923 endif
924
925 # end Mingw32
926 #
927 ####################################################
928
929 ####################################################
930 #
931 # Cygwin
932 #
933 ifeq ($(findstring cygwin, $(GNUSTEP_TARGET_OS)), cygwin)
934 shared = yes
935 HAVE_SHARED_LIBS = yes
936 # This command links the library, generates automatically the list of
937 # symbols to export, creates the DLL (eg, obj/gnustep-base.dll) and 
938 # the import library
939 SHARED_LIB_LINK_CMD     = \
940         $(CC) $(SHARED_LD_PREFLAGS) -shared -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_DLL_FILE) \
941         -Wl,--out-implib=$(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) \
942         -Wl,--export-all-symbols \
943         -Wl,--enable-auto-import \
944         -Wl,--whole-archive $(OBJ_FILES_TO_LINK) $(ALL_LDFLAGS) \
945         -Wl,--no-whole-archive $(INTERNAL_LIBRARIES_DEPEND_UPON) $(TARGET_SYSTEM_LIBS)\
946         $(SHARED_LD_POSTFLAGS)
947         
948 AFTER_INSTALL_SHARED_LIB_CMD = 
949 AFTER_INSTALL_SHARED_LIB_CHOWN =
950 SHARED_LIBEXT    = .dll.a
951
952 BUILD_DLL        = yes
953 CYGWIN_DLL_SUPPORT  = yes
954 #SHARED_LIBEXT   = .a
955 DLL_LIBEXT       = .dll
956 REBASE           = rebase 
957 REBASE_FLAGS = -d -b 0x68000000 -o 0x10000
958 CYGWIN_LD_FLAGS = -Wl,--export-all-symbols -Wl,--enable-auto-import
959 #SHARED_CFLAGS   += 
960
961 OBJ_MERGE_CMD = \
962         $(CC) -nostdlib -r $(ALL_LDFLAGS) $(CYGWIN_LD_FLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
963
964 HAVE_BUNDLES   = yes
965 BUNDLE_LD      = $(CC)
966 BUNDLE_LDFLAGS += -shared -Wl,--export-all-symbols \
967         -Wl,--enable-auto-import \
968         -Wl,--whole-archive
969 BUNDLE_LIBFLAGS += -Wl,--no-whole-archiv
970 BUNDLE_LINK_CMD  = \
971         $(BUNDLE_LD) $(BUNDLE_LDFLAGS) $(ALL_LDFLAGS) \
972         -o $(LDOUT)$(BUNDLE_FILE) \
973         $(OBJ_FILES_TO_LINK) \
974         $(BUNDLE_LIBFLAGS) $(ALL_BUNDLE_LIBS); \
975         $(REBASE) $(REBASE_FLAGS) $(BUNDLE_FILE)
976 endif
977
978 # end Cygwin
979 #
980 ####################################################
981
982
983 ####################################################
984 #
985 # Solaris
986 #
987 ifeq ($(findstring solaris, $(GNUSTEP_TARGET_OS)), solaris)
988 HAVE_SHARED_LIBS        = yes
989 SHARED_LIB_LINK_CMD     = \
990         $(CC) $(SHARED_LD_PREFLAGS) -G -Wl,-h,$(LIB_LINK_SONAME_FILE) \
991            $(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ \
992            $(INTERNAL_LIBRARIES_DEPEND_UPON) \
993            $(SHARED_LD_POSTFLAGS);\
994         (cd $(LIB_LINK_OBJ_DIR); \
995           $(RM_LN_S) $(LIB_LINK_FILE); \
996           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
997             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
998             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
999           fi; \
1000           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
1001         )
1002 AFTER_INSTALL_SHARED_LIB_CMD = \
1003         (cd $(LIB_LINK_INSTALL_DIR); \
1004           $(RM_LN_S) $(LIB_LINK_FILE); \
1005           if [ "$(LIB_LINK_SONAME_FILE)" != "$(LIB_LINK_VERSION_FILE)" ]; then\
1006             $(RM_LN_S) $(LIB_LINK_SONAME_FILE);\
1007             $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_SONAME_FILE); \
1008           fi; \
1009           $(LN_S) $(LIB_LINK_SONAME_FILE) $(LIB_LINK_FILE); \
1010         )
1011 AFTER_INSTALL_SHARED_LIB_CHOWN = \
1012         (cd $(LIB_LINK_INSTALL_DIR); \
1013         chown $(CHOWN_TO) $(LIB_LINK_SONAME_FILE); \
1014         chown $(CHOWN_TO) $(LIB_LINK_FILE))
1015
1016 OBJ_MERGE_CMD           = \
1017         $(CC) -nostdlib -r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
1018
1019 SHARED_CFLAGS     += -fpic -fPIC
1020 SHARED_LIBEXT   = .so
1021
1022 HAVE_BUNDLES    = yes
1023 BUNDLE_LD       = $(CC)
1024 BUNDLE_LDFLAGS  = -shared -mimpure-text
1025 #BUNDLE_LDFLAGS  = -nodefaultlibs -Xlinker -r
1026 endif
1027
1028 # end Solaris
1029 #
1030 ####################################################
1031
1032
1033 ####################################################
1034 #
1035 # Unixware
1036 #
1037 ifeq ($(findstring sysv4.2, $(GNUSTEP_TARGET_OS)), sysv4.2)
1038 HAVE_SHARED_LIBS        = yes
1039 SHARED_LIB_LINK_CMD     = \
1040         $(CC) $(SHARED_LD_PREFLAGS) -shared $(ALL_LDFLAGS) -o $(LIB_LINK_VERSION_FILE) $^ \
1041           $(SHARED_LD_POSTFLAGS);\
1042         mv $(LIB_LINK_VERSION_FILE) $(LIB_LINK_OBJ_DIR);\
1043         (cd $(LIB_LINK_OBJ_DIR); \
1044           $(RM_LN_S) $(LIB_LINK_FILE); \
1045           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
1046
1047 SHARED_CFLAGS     += -fpic -fPIC
1048 SHARED_LIBEXT   = .so
1049
1050 HAVE_BUNDLES    = yes
1051 BUNDLE_LD       = $(CC)
1052 #BUNDLE_LDFLAGS  += -shared -mimpure-text
1053 BUNDLE_LDFLAGS  += -nodefaultlibs -Xlinker -r
1054 endif
1055
1056 # end Unixware
1057 #
1058 ####################################################
1059
1060
1061 ####################################################
1062 #
1063 # HP-UX 
1064 #
1065 ifeq ($(findstring hpux, $(GNUSTEP_TARGET_OS)), hpux)
1066 HAVE_SHARED_LIBS        = yes
1067 SHARED_LIB_LINK_CMD     = \
1068         (cd $(LIB_LINK_OBJ_DIR); \
1069           $(CC) $(SHARED_LD_PREFLAGS) \
1070             -v $(SHARED_CFLAGS) -shared \
1071             $(ALL_LDFLAGS) -o $(LIB_LINK_VERSION_FILE) `ls -1 *\.o */*\.o` \
1072             $(SHARED_LD_POSTFLAGS) ;\
1073           $(RM_LN_S) $(LIB_LINK_FILE); \
1074           $(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
1075
1076 ifeq ($(CC), cc)
1077 SHARED_CFLAGS   += +z
1078 else
1079 SHARED_CFLAGS   += -fPIC
1080 endif
1081
1082 ifeq ($(GNUSTEP_HOST_CPU), ia64)
1083 SHARED_LIBEXT   = .so
1084 else
1085 SHARED_LIBEXT   = .sl
1086 endif
1087
1088 HAVE_BUNDLES    = yes
1089 BUNDLE_LD       = $(CC)
1090 BUNDLE_LDFLAGS  += -nodefaultlibs -Xlinker -r
1091 ADDITIONAL_LDFLAGS += -Xlinker +s
1092 STATIC_LDFLAGS += -static
1093 endif
1094
1095 # end HP-UX
1096 #
1097 ####################################################