lnxLib.rules revision 11d341ca
1XCOMM $Xorg: lnxLib.rules,v 1.3 2000/08/17 19:41:47 cpqbld Exp $
2XCOMM $XFree86: xc/config/cf/lnxLib.rules,v 3.52 2003/10/31 20:49:03 herrb Exp $
3
4/*
5 * Linux shared library rules (DLL & ELF versions)
6 */
7#ifndef HasSharedLibraries
8# define HasSharedLibraries YES
9#endif
10#ifndef ForceNormalLib
11# define ForceNormalLib NO
12#endif
13
14#ifndef UseRpath
15#define UseRpath NO
16#endif
17
18#ifndef SharedOldX
19# define SharedOldX NO
20#endif
21
22#if UseElfFormat
23
24# if (LinuxCLibMajorVersion >= 5 && LinuxCLibMinorVersion >= 4) || LinuxCLibMajorVersion >= 6
25#  ifndef SpecialMalloc
26#   define SpecialMalloc NO
27#  endif
28#if 0
29#  ifndef UseInternalMalloc
30#   define UseInternalMalloc NO
31#  endif
32#endif
33# endif
34
35# if LinuxCLibMajorVersion <= 5
36/*
37 *	#define BaseShLibReqs	-lc
38 *
39 * I don't want to use this since the normal ELF executables should
40 * be linked with libc.so. If it is not, i.e., static, the variables in
41 * libc.so which is loaded in because of the other shared libraries
42 * may have different values than the ones in the static ELF
43 * executables. That happens if the binaries are linked with libg.a
44 * or libc_p.a.
45 *
46 * If an ELF executable linked with libg.a or libc_p.a loads a shared
47 * object which needs libc.so via dlopen (), I think it should fail.
48 * It is a very bad idea. The moral story is DON'T USE dlopen () IN
49 * ELF EXECUTABLES LINKED WITH libg.a OR libc_p.a. H.J.
50 *
51 */
52#  define BaseShLibReqs
53# else
54/* With GNU libc 2 this works fine. */
55#  define BaseShLibReqs	-lc
56# endif
57
58# ifndef SharedDataSeparation
59#  define SharedDataSeparation NO
60# endif
61# ifndef SharedCodeDef
62#  define SharedCodeDef /**/
63# endif
64# ifndef SharedLibraryDef
65#  define SharedLibraryDef /**/
66# endif
67# ifndef ShLibIncludeFile
68#  define ShLibIncludeFile <lnxLib.tmpl>
69# endif
70#ifndef RpathLoadFlags
71#if UseRpath
72#define RpathLoadFlags -Wl,-rpath,$(USRLIBDIRPATH)
73#else
74#define RpathLoadFlags /**/
75#endif
76#endif
77#ifndef LibraryRpathLoadFlags
78#define LibraryRpathLoadFlags RpathLoadFlags
79#endif
80# ifndef SharedLibraryLoadFlags
81#  define SharedLibraryLoadFlags -shared
82# endif
83# ifndef PositionIndependentCFlags
84#  define PositionIndependentCFlags -fPIC
85# endif
86# ifndef PositionIndependentCplusplusFlags
87#  define PositionIndependentCplusplusFlags -fPIC
88# endif
89# ifndef ExtraLoadFlags
90#  if LinuxBinUtilsMajorVersion >= 26
91#   ifdef UseInstalled
92#    if LinuxBinUtilsMajorVersion < 27
93#     define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link,$(USRLIBDIRPATH)
94#    endif
95#   else
96#    define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link,$(BUILDLIBDIR)
97#   endif
98#  else
99#   define ExtraLoadFlags RpathLoadFlags
100#  endif
101# endif
102# ifndef HardCodeLibdirFlag
103#  define HardCodeLibdirFlag RpathLoadFlags
104# endif
105# if !defined(ShlibGlobalsFlags)
106#  define ShlibGlobalsFlags -Wl,-Bsymbolic
107# endif
108
109/*
110 * InstallSharedLibrary - generate rules to install the shared library.
111 * NOTE: file must be executable, hence "INSTBINFLAGS"
112 */
113# ifndef InstallSharedLibrary
114#  define	InstallSharedLibrary(libname,rev,dest)			@@\
115install:: Concat(lib,libname.so.rev) 					@@\
116	MakeDir($(DESTDIR)dest)						@@\
117	$(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\
118	@T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`;\
119	  set -x; $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T	@@\
120	@if $(SOSYMLINK); then (set -x; \
121	  $(RM) Concat($(DESTDIR)dest/lib,libname.so); \		@@\
122	  $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so)); fi
123# endif /* InstallSharedLibrary */
124
125# ifndef InstallSharedLibtoolLibrary
126
127#  define SetRevisions(rev) V=`expr rev : '\([^:]*\)'`; \		@@\
128		R=`expr rev : '.*:\([^:]*\):'`; \			@@\
129		A=`expr rev : '.*:\([^:]*\)'`; \			@@\
130		MAJ=`expr $$V - $$A`; \					@@\
131		MIN=$$A.$$R
132
133#  define	InstallSharedLibtoolLibrary(libname,rev,dest)		@@\
134install:: Concat(lib,libname.so) 					@@\
135	MakeDir($(DESTDIR)dest)						@@\
136	@set +e; SetRevisions(rev); \					@@\
137		set -xe; \						@@\
138		$(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.$$MAJ.$$MIN) $(DESTDIR)dest; \ @@\
139		$(RM) Concat($(DESTDIR)dest/lib,libname.so.$$MAJ); \	@@\
140		$(LN) Concat(lib,libname.so.$$MAJ.$$MIN) Concat($(DESTDIR)dest/lib,libname.so.$$MAJ); \ @@\
141		$(RM) Concat($(DESTDIR)dest/lib,libname.so); \		@@\
142		$(LN) Concat(lib,libname.so.$$MAJ.$$MIN) Concat($(DESTDIR)dest/lib,libname.so)
143# endif /* InstallSharedLibrary */
144
145/*
146 * InstallSharedLibraryData - generate rules to install the shared library data
147 */
148# ifndef InstallSharedLibraryData
149#  define	InstallSharedLibraryData(libname,rev,dest)
150# endif /* InstallSharedLibraryData */
151
152
153/*
154 * SharedLibraryTarget - generate rules to create a shared library;
155 * build it into a different name so that we do not hose people by having
156 * the library gone for long periods.
157 */
158# ifndef SharedLibraryTarget
159#  define SharedLibraryTarget(libname,rev,solist,down,up)		@@\
160AllTarget(Concat(lib,libname.so.rev))					@@\
161									@@\
162Concat(lib,libname.so.rev):  solist $(EXTRALIBRARYDEPS)			@@\
163	$(RM) $@~							@@\
164	@SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; (set -x; \	@@\
165		cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs) || exit 1; \ @@\
166		(set -x; $(RM) $$SONAME; $(LN) $@ $$SONAME); \		@@\
167		LinkBuildSonameLibrary($$SONAME)			@@\
168	$(RM) $@ 							@@\
169	$(MV) $@~ $@							@@\
170	@if $(SOSYMLINK); then (set -x; \				@@\
171	  $(RM) Concat(lib,libname.so); \				@@\
172	  $(LN) $@ Concat(lib,libname.so)); fi				@@\
173	LinkBuildLibrary($@)						@@\
174	LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK))	@@\
175									@@\
176clean::									@@\
177	@MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \	@@\
178	set -x; $(RM) Concat(lib,libname.so.$$MAJREV)			@@\
179	$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
180
181# endif /* SharedLibraryTarget */
182
183
184# ifndef SharedLibtoolLibraryTarget
185#  define SharedLibtoolLibraryTarget(libname,rev,solist,down,up)	@@\
186AllTarget(Concat(lib,libname.so))					@@\
187									@@\
188Concat(lib,libname.so):  solist $(EXTRALIBRARYDEPS)			@@\
189	$(RM) $@~							@@\
190	@set +e; SetRevisions(rev); set -e; \				@@\
191		SONAME=$@.$$MAJ; \					@@\
192		(set -x; \						@@\
193		$(RM) $@.$$MAJ.$$MIN~; \				@@\
194		cd down; $(CC) -o up/$@.$$MAJ.$$MIN~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs) || exit 1; \ @@\
195		(set -x; \						@@\
196		$(RM) $$SONAME; $(LN) $@.$$MAJ.$$MIN $$SONAME); \	@@\
197		LinkBuildSonameLibrary($$SONAME); \			@@\
198		(set -x; \						@@\
199		$(RM) $@.$$MAJ.$$MIN; \					@@\
200		$(MV) $@.$$MAJ.$$MIN~ $@.$$MAJ.$$MIN; \			@@\
201	  	$(RM) $@; \						@@\
202	  	$(LN) $@.$$MAJ.$$MIN $@); \				@@\
203		LinkBuildLibraryInline($@.$$MAJ.$$MIN); \		@@\
204		LinkBuildLibraryInline($@)				@@\
205									@@\
206clean::									@@\
207	@set +e; SetRevisions(rev); \					@@\
208		set -xe; \						@@\
209		$(RM) Concat(lib,libname.so.$$MAJ); \			@@\
210		$(RM) Concat(lib,libname.so.$$MAJ.$$MIN)		@@\
211	$(RM) Concat(lib,libname.so)
212
213# endif /* SharedLibtoolLibraryTarget */
214
215/*
216 * SharedDepLibraryTarget - generate rules to create a shared library.
217 */
218# ifndef SharedDepLibraryTarget
219#   define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up)	@@\
220AllTarget(Concat(lib,libname.so.rev))					@@\
221									@@\
222Concat(lib,libname.so.rev):  deplist $(EXTRALIBRARYDEPS)		@@\
223	$(RM) $@~							@@\
224	@SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \		@@\
225		(cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
226		$(RM) $$SONAME; $(LN) $@ $$SONAME; \			@@\
227		LinkBuildSonameLibrary($$SONAME)			@@\
228	$(RM) $@ 							@@\
229	$(MV) $@~ $@							@@\
230	@if $(SOSYMLINK); then (set -x; \				@@\
231	  $(RM) Concat(lib,libname.so); \				@@\
232	  $(LN) $@ Concat(lib,libname.so)); fi				@@\
233	LinkBuildLibrary($@)						@@\
234	LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK))	@@\
235									@@\
236clean::									@@\
237	@MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \	@@\
238	set -x; $(RM) Concat(lib,libname.so.$$MAJREV)			@@\
239	$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
240
241#endif /* SharedDepLibraryTarget */
242
243/*
244 * SharedDepCplusplusLibraryTarget - generate rules to create a shared library.
245 */
246#ifndef SharedDepCplusplusLibraryTarget
247#define SharedDepCplusplusLibraryTarget(libname,rev,deplist,solist,down,up) @@\
248AllTarget(Concat(lib,libname.so.rev))					@@\
249									@@\
250Concat(lib,libname.so.rev):  deplist $(EXTRALIBRARYDEPS)		@@\
251	$(RM) $@~							@@\
252	@SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \		@@\
253		(cd down; $(CXX) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
254		$(RM) $$SONAME; $(LN) $@ $$SONAME; \			@@\
255		LinkBuildSonameLibrary($$SONAME)			@@\
256	$(RM) $@ 							@@\
257	$(MV) $@~ $@							@@\
258	@if $(SOSYMLINK); then (set -x; \				@@\
259	  $(RM) Concat(lib,libname.so); \				@@\
260	  $(LN) $@ Concat(lib,libname.so)); fi				@@\
261	LinkBuildLibrary($@)						@@\
262	LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK))	@@\
263									@@\
264clean::									@@\
265	@MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \	@@\
266	set -x; $(RM) Concat(lib,libname.so.$$MAJREV)			@@\
267	$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
268
269#endif /* SharedDepCplusplusLibraryTarget */
270
271# ifndef SharedDepModuleTarget
272#  define SharedDepModuleTarget(name,deps,solist)			@@\
273AllTarget(name)								@@\
274									@@\
275name: deps								@@\
276	$(RM) $@~							@@\
277	$(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\
278	$(RM) $@							@@\
279	$(MV) $@~ $@							@@\
280									@@\
281clean::									@@\
282	$(RM) name
283
284# endif /* SharedDepModuleTarget */
285
286# ifndef SharedDriModuleTarget
287#  define SharedDriModuleTarget(name,deps,solist)			@@\
288AllTarget(name)								@@\
289									@@\
290name: deps								@@\
291	$(RM) $@~ $@.map						@@\
292	@(echo 'DRI_MODULE { global: __dri*; local: *; };' > $@.map)	@@\
293	$(CC) -o $@~ -Wl,--version-script=$@.map $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\
294	$(RM) $@ $@.map							@@\
295	$(MV) $@~ $@							@@\
296									@@\
297clean::									@@\
298	$(RM) name							@@\
299	$(RM) name.map
300
301# endif /* SharedDriModuleTarget */
302
303/*
304 * SharedLibraryDataTarget - generate rules to create shlib data file;
305 */
306# ifndef SharedLibraryDataTarget
307#  define SharedLibraryDataTarget(libname,rev,salist)
308# endif /* SharedLibraryTarget */
309
310#else /* UseElfFormat */
311
312# ifndef SharedDataSeparation
313#  define SharedDataSeparation NO
314# endif
315# ifndef SharedCodeDef
316#  define SharedCodeDef /**/
317# endif
318# ifndef SharedLibraryDef
319#  define SharedLibraryDef /**/
320# endif
321# ifndef ShLibIncludeFile
322#  define ShLibIncludeFile <lnxLib.tmpl>
323# endif
324# ifndef SharedLibraryLoadFlags
325#  define SharedLibraryLoadFlags /**/
326# endif
327# ifndef PositionIndependentCFlags
328#  define PositionIndependentCFlags -B/usr/bin/jump
329# endif
330
331/*
332 * These definitions are now extended to work with the X sources and
333 * external sources wishing to build shared libs.
334 *
335 * A library can create it's own shlibs (.so) or can be incorporated into
336 * another "host" lib. All libraries generate stub (.sa) files.
337 * A "host" lib does all the work to generate the stubs for itself and its
338 * "guests", invoking the "guest" Makefiles to create the objects for
339 * inclusion into the "host" shlib. A "guest" lib will ask the "host" to
340 * create the stubfiles, then copy its own into its directory.
341 * Most external libs are "host" libs; the concept of "guest" is a holdover
342 * from older libs during the days of scarce shared library address space.
343 *
344 * To create a simple "host" shared lib, Xfoo, define:
345 *
346 *  JUMP_ROOT_Xfoo = <source directory>
347 *  JUMP_IS_HOST_Xfoo = YES
348 *  JUMP_STUBLIBS_Xfoo = libXfoo.sa
349 *  JUMP_DIR_Xfoo = $(JUMP_ROOT_Xfoo)/shared		<work directory>
350 *  JUMP_DEFS_Xfoo = -DFOO				<defs for jump files>
351 *  JUMP_VARS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_vars	<see DLL docs>
352 *  JUMP_FUNCS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_funcs	<see DLL docs>
353 *  JUMP_IGNORE_Xfoo = $(JUMP_ROOT_Xfoo)/jump_ignore	<see DLL docs>
354 *  JUMP_EXPORT_Xfoo = $(JUMP_DIR_Xfoo)/jump.vars	<exported symbols>
355 *  JUMP_IMPORT_Xfoo = $(JUMP_EXPORT_Xbar)		<imported symbols>
356 *  JUMP_ADDRESS_Xfoo = 0xXXXXXXXX			<fill in with address>
357 *  JUMP_JUMPTABLESIZE_Xfoo = 0x4000			<adjust if necessary>
358 *  JUMP_GOTSIZE_Xfoo = 4096				<adjust if necessary>
359 *  JUMP_STUBNAMES_Xfoo = libXfoo			<and others>
360 *  JUMP_STUBS_IMPORT_Xfoo = /usr/lib/libc.sa		<and others>
361 *  JUMP_LDLIBS_Xfoo = `$(CC) --print-libgcc-file-name` -lc <and others>
362 *
363 * To create a complex "host", you need to add
364 *  JUMP_SIBARS_Xt = jump/libXbar.a~			<and others>
365 * These are the archives of the shared objects of the "guest" libs. They
366 * need to be added to the JUMP_LDLIBS_Xfoo lines.
367 *
368 * For further clarification, study the definitions of libXaw, a simple "host"
369 * lib, libXt, a complex "host" lib, and libXmu, one of libXts "guests".
370 *
371 * As a hint of how to start (with the DLL docs), touch jump_vars, jump_funcs
372 * and jump_ignore, then compile. Then massage the jump.vars and jump.funcs
373 * files in the shared subdirectory into jump_xxx files.
374 */
375
376# ifndef UseInstalled
377XCOMM These are only needed to build the server
378
379#  if LinuxElfDefault
380LIBC_SA = /usr/i486-linuxaout/lib/libc.sa
381LIBM_SA = /usr/i486-linuxaout/lib/libm.sa
382#  else
383LIBC_SA = /usr/lib/libc.sa
384LIBM_SA = /usr/lib/libm.sa
385#  endif
386
387JUMP_LDLIBS_libc = `$(CC) --print-libgcc-file-name` -lc
388
389XCOMM libX11.so (X11, SM, ICE)
390JUMP_ROOT_X11 = $(XLIBSRC)
391JUMP_IS_HOST_X11 = YES
392JUMP_STUBLIBS_X11 = libX11.sa libSM.sa libICE.sa
393JUMP_SIBDIRS_X11 = $(JUMP_ROOT_SM) $(JUMP_ROOT_ICE)
394JUMP_DIR_X11 = $(JUMP_ROOT_X11)/shared
395JUMP_DEFS_X11 = $(XDMAUTHDEFS) $(XKB_DEFINES)
396JUMP_VARS_X11 = $(JUMP_ROOT_X11)/jump_vars
397JUMP_FUNCS_X11 = $(JUMP_ROOT_X11)/jump_funcs
398JUMP_IGNORE_X11 = $(JUMP_ROOT_X11)/jump_ignore
399JUMP_EXPORT_X11 = $(JUMP_DIR_X11)/jump.vars
400JUMP_ADDRESS_X11 = 0x60200000
401JUMP_JUMPTABLESIZE_X11 = 0x4000
402JUMP_GOTSIZE_X11 = 4096
403JUMP_STUBNAMES_X11 = libX11 libSM libICE
404JUMP_STUBS_IMPORT_X11 = $(LIBC_SA)
405JUMP_SIBARS_X11 = jump/libSM.a~ jump/libICE.a~
406JUMP_LDLIBS_X11 = $(JUMP_SIBARS_X11) $(JUMP_LDLIBS_libc)
407
408XCOMM libSM (part of libX11.so)
409JUMP_ROOT_SM = $(SMSRC)
410JUMP_IS_HOST_SM = NO
411JUMP_HOST_SM = $(JUMP_ROOT_X11)
412JUMP_DIR_SM = $(JUMP_DIR_X11)
413
414XCOMM libICE (part of libX11.so)
415JUMP_ROOT_ICE = $(ICESRC)
416JUMP_IS_HOST_ICE = NO
417JUMP_HOST_ICE = $(JUMP_ROOT_X11)
418JUMP_DIR_ICE = $(JUMP_DIR_X11)
419
420XCOMM libXt.so (Xt, Xmu, Xext, Xi, Xtst, Xp)
421JUMP_ROOT_Xt = $(TOOLKITSRC)
422JUMP_IS_HOST_Xt = YES
423JUMP_STUBLIBS_Xt = libXt.sa libXmu.sa libXext.sa libXi.sa libXtst.sa libXp.sa
424JUMP_SUBDIRS_Xt = $(JUMP_ROOT_X11)
425JUMP_SIBDIRS_Xt = $(JUMP_ROOT_Xmu) $(JUMP_ROOT_Xext) \
426	$(JUMP_ROOT_Xi) $(JUMP_ROOT_Xtst) $(JUMP_ROOT_Xp)
427JUMP_DIR_Xt = $(JUMP_ROOT_Xt)/shared
428JUMP_VARS_Xt = $(JUMP_ROOT_Xt)/jump_vars
429JUMP_FUNCS_Xt = $(JUMP_ROOT_Xt)/jump_funcs
430JUMP_IGNORE_Xt = $(JUMP_ROOT_Xt)/jump_ignore
431JUMP_EXPORT_Xt = $(JUMP_DIR_Xt)/jump.vars
432JUMP_IMPORT_Xt = $(JUMP_EXPORT_X11)
433JUMP_ADDRESS_Xt = 0x602a0000
434JUMP_JUMPTABLESIZE_Xt = 0x4000
435JUMP_GOTSIZE_Xt = 4096
436JUMP_STUBNAMES_Xt = libXt libXmu libXext libXi libXtst libXp
437JUMP_STUBS_IMPORT_Xt = $(JUMP_STUBS_IMPORT_X11)
438JUMP_SIBARS_Xt = jump/libXmu.a~ jump/libXext.a~ jump/libXi.a~ jump/libXtst.a~ jump/libXp.a~
439JUMP_LDLIBS_Xt = $(JUMP_SIBARS_Xt) $(JUMP_ROOT_ICE)/libICE.sa \
440	$(JUMP_ROOT_SM)/libSM.sa $(JUMP_ROOT_X11)/libX11.sa $(JUMP_LDLIBS_libc)
441
442XCOMM libXmu (part of libXt.so)
443JUMP_ROOT_Xmu = $(XMUSRC)
444JUMP_IS_HOST_Xmu = NO
445JUMP_HOST_Xmu = $(JUMP_ROOT_Xt)
446JUMP_DIR_Xmu = $(JUMP_DIR_Xt)
447
448XCOMM libXext (part of libXt.so)
449JUMP_ROOT_Xext = $(XEXTLIBSRC)
450JUMP_IS_HOST_Xext = NO
451JUMP_HOST_Xext = $(JUMP_ROOT_Xt)
452JUMP_DIR_Xext = $(JUMP_DIR_Xt)
453
454XCOMM libXi (part of libXt.so)
455JUMP_ROOT_Xi = $(XILIBSRC)
456JUMP_IS_HOST_Xi = NO
457JUMP_HOST_Xi = $(JUMP_ROOT_Xt)
458JUMP_DIR_Xi = $(JUMP_DIR_Xt)
459
460XCOMM libXtst (part of libXt.so)
461JUMP_ROOT_Xtst = $(XTESTLIBSRC)
462JUMP_IS_HOST_Xtst = NO
463JUMP_HOST_Xtst = $(JUMP_ROOT_Xt)
464JUMP_DIR_Xtst = $(JUMP_DIR_Xt)
465
466XCOMM libXp (part of libXt.so)
467JUMP_ROOT_Xp = $(XPLIBSRC)
468JUMP_IS_HOST_Xp = NO
469JUMP_HOST_Xp = $(JUMP_ROOT_Xt)
470JUMP_DIR_Xp = $(JUMP_DIR_Xt)
471
472XCOMM libXaw.so (Xaw)
473JUMP_ROOT_Xaw = $(AWIDGETSRC)
474JUMP_IS_HOST_Xaw = YES
475JUMP_STUBLIBS_Xaw = libXaw.sa
476JUMP_SUBDIRS_Xaw = $(JUMP_ROOT_Xt)
477JUMP_DIR_Xaw = $(JUMP_ROOT_Xaw)/shared
478JUMP_VARS_Xaw = $(JUMP_ROOT_Xaw)/jump_vars
479JUMP_FUNCS_Xaw = $(JUMP_ROOT_Xaw)/jump_funcs
480JUMP_IGNORE_Xaw = $(JUMP_ROOT_Xaw)/jump_ignore
481JUMP_EXPORT_Xaw = $(JUMP_DIR_Xaw)/jump.vars
482JUMP_IMPORT_Xaw = $(JUMP_EXPORT_Xt) $(JUMP_EXPORT_X11)
483JUMP_ADDRESS_Xaw = 0x60300000
484JUMP_JUMPTABLESIZE_Xaw = 0x4000
485JUMP_GOTSIZE_Xaw = 4096
486JUMP_STUBNAMES_Xaw = libXaw
487JUMP_STUBS_IMPORT_Xaw = $(JUMP_STUBS_IMPORT_X11)
488JUMP_LDLIBS_Xaw = $(JUMP_ROOT_Xt)/libXt.sa $(JUMP_ROOT_Xt)/libXmu.sa \
489	$(JUMP_ROOT_Xt)/libXext.sa $(JUMP_ROOT_X11)/libX11.sa \
490	$(JUMP_LDLIBS_libc)
491
492# endif /* !UseInstalled */
493
494/*
495 * SharedLibraryDataTarget - generate rules to create shared data file
496 */
497# ifndef SharedLibraryDataTarget
498#  define SharedLibraryDataTarget(libname,rev,salist)
499# endif
500
501/*
502 * SharedLibraryTarget - generate rules to create a shared library;
503 * There are two basic flavors of libs: self-generating, which create
504 * their own (and possibly other) libs, and hosted, which rely on another
505 * lib for all the work.
506 */
507# ifndef SharedLibraryTarget
508#  define SharedLibraryTarget(libname,rev,solist,down,up)		@@\
509XCOMM This logic is such to compile the libs in their proper order,	@@\
510XCOMM remain dependent on subsidiary libs, and yet minimize local work	@@\
511									@@\
512JUMP_DIR=./jump								@@\
513JUMP_LIB=Concat(lib,libname)						@@\
514									@@\
515XCOMM  this is needed for newer gnumake versions			@@\
516export JUMP_DIR JUMP_LIB						@@\
517									@@\
518JUMP_IS_HOST=$(Concat(JUMP_IS_HOST_,libname))				@@\
519JUMP_AR=$(JUMP_DIR)/Concat(lib,libname.a~)				@@\
520JUMP_SA=Concat(lib,libname.sa)						@@\
521JUMP_SO=Concat(lib,libname.so.rev)					@@\
522									@@\
523JUMP_HOST=$(Concat(JUMP_HOST_,libname))					@@\
524									@@\
525INSTSOLIBFLAGS=-m 0555							@@\
526									@@\
527AllTarget($(BUILDLIBDIR)/$(JUMP_SA))					@@\
528									@@\
529$(BUILDLIBDIR)/$(JUMP_SA): $(JUMP_SA)					@@\
530	LinkBuildLibrary($(JUMP_SA))					@@\
531									@@\
532$(JUMP_SA) $(Concat(JUMP_STUBLIBS_,libname)) do_JUMP_SA: \
533		down/mk_JUMP_SA_$(JUMP_IS_HOST)				@@\
534									@@\
535down/mk_JUMP_SA_0:: mk_JUMP_HOST					@@\
536									@@\
537down/mk_JUMP_SA_0:: $(JUMP_HOST)/$(JUMP_SA)				@@\
538	$(RM) $(JUMP_SA)						@@\
539	$(LN) $(JUMP_HOST)/$(JUMP_SA) $(JUMP_SA)			@@\
540	touch $@							@@\
541									@@\
542down/mk_JUMP_SA_1:: $(JUMP_SO)						@@\
543									@@\
544down/mk_JUMP_SA_1:: down/mk_JUMP_SO_2					@@\
545	$(RM) $(Concat(JUMP_STUBLIBS_,libname))				@@\
546	mkstubs -v rev -l $(JUMP_LIB) \
547		-a $(Concat(JUMP_ADDRESS_,libname)) \
548		-j $(Concat(JUMP_JUMPTABLESIZE_,libname)) \
549		-g $(Concat(JUMP_GOTSIZE_,libname)) \
550		-- $(Concat(JUMP_STUBNAMES_,libname))			@@\
551	verify-shlib -l $(JUMP_SO) \
552		$(Concat(JUMP_STUBLIBS_,libname))			@@\
553	$(MV) verify.out $(JUMP_DIR)					@@\
554	touch $@							@@\
555									@@\
556mk_JUMP_HOST:								@@\
557	@echo checking stub library $(JUMP_SA) in $(JUMP_HOST)...	@@\
558	@(cd $(JUMP_HOST); $(MAKE) $(MFLAGS) $(JUMP_SA)) || exit 1	@@\
559	@echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...	@@\
560									@@\
561$(JUMP_SO): down/mk_JUMP_SO_$(JUMP_IS_HOST)				@@\
562									@@\
563down/mk_JUMP_SO_0:							@@\
564									@@\
565down/mk_JUMP_SO_1:: $(JUMP_AR) mk_JUMP_SIBDIRS down/mk_JUMP_SO_2	@@\
566									@@\
567down/mk_JUMP_SO_2: down/mk_JUMP_AR $(Concat(JUMP_SIBARS_,libname))	@@\
568	$(RM) $(JUMP_SO)						@@\
569	mkimage -f -v rev -l $(JUMP_LIB) \
570		-a $(Concat(JUMP_ADDRESS_,libname)) \
571		-j $(Concat(JUMP_JUMPTABLESIZE_,libname)) \
572		-g $(Concat(JUMP_GOTSIZE_,libname)) \
573		-- $(JUMP_AR) $(Concat(JUMP_LDLIBS_,libname))		@@\
574	$(RM) $(JUMP_DIR)/__jump.s $(JUMP_DIR)/__jump.o			@@\
575	LinkBuildLibrary($(JUMP_SO))					@@\
576	touch $@							@@\
577									@@\
578mk_JUMP_SIBDIRS:							@@\
579	@for d in $(Concat(JUMP_SIBDIRS_,libname)); do \
580		echo checking ar library in $$d...; \
581		(cd $$d ; $(MAKE) $(MFLAGS) fastdo_JUMP_AR) || exit 1; \
582		echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...;done@@\
583									@@\
584fastdo_JUMP_AR: $(JUMP_DIR) down/mk_JUMP_AR				@@\
585									@@\
586$(JUMP_AR) do_JUMP_AR:: jumpsetup down/mk_JUMP_AR			@@\
587									@@\
588jumpsetup: $(JUMP_DIR) jumpsetup_$(JUMP_IS_HOST)			@@\
589									@@\
590$(JUMP_DIR):								@@\
591	$(RM) jump							@@\
592	LibMkdir($(Concat(JUMP_DIR_,libname)))				@@\
593	$(LN) $(Concat(JUMP_DIR_,libname)) jump				@@\
594									@@\
595jumpsetup_0:								@@\
596	@echo doing jump setup in host $(JUMP_HOST)...			@@\
597	@(cd $(JUMP_HOST); $(MAKE) $(MFLAGS) jumpsetup) || exit 1	@@\
598	@echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...	@@\
599									@@\
600jumpsetup_1::								@@\
601	@for d in $(Concat(JUMP_SUBDIRS_,libname)); do \
602		echo checking stub library in $$d...; \
603		(cd $$d ; $(MAKE) $(MFLAGS) do_JUMP_SA) || exit 1; \
604		echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...;done@@\
605									@@\
606jumpsetup_1:: $(JUMP_DIR)/jump.funcs $(JUMP_DIR)/jump.vars \
607	$(JUMP_DIR)/jump.ignore $(JUMP_DIR)/jump.import			@@\
608									@@\
609$(JUMP_DIR)/jump.funcs: $(Concat(JUMP_FUNCS_,libname))			@@\
610	$(RM) $(JUMP_DIR)/jump.funcs					@@\
611	cat $(Concat(JUMP_FUNCS_,libname)) | \
612		$(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@	@@\
613									@@\
614$(JUMP_DIR)/jump.vars: $(Concat(JUMP_VARS_,libname))			@@\
615	$(RM) $(JUMP_DIR)/jump.vars					@@\
616	cat $(Concat(JUMP_VARS_,libname)) | \
617		$(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@	@@\
618									@@\
619$(JUMP_DIR)/jump.ignore: $(Concat(JUMP_IGNORE_,libname))		@@\
620	$(RM) $(JUMP_DIR)/jump.ignore					@@\
621	cat $(Concat(JUMP_IGNORE_,libname)) | \
622		$(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@	@@\
623									@@\
624$(JUMP_DIR)/jump.import: $(JUMP_DIR)/stubs.import \
625		$(Concat(JUMP_IMPORT_,libname))				@@\
626	$(RM) $(JUMP_DIR)/jump.import					@@\
627	cat $(JUMP_DIR)/stubs.import $(Concat(JUMP_IMPORT_,libname)) > $@ @@\
628									@@\
629$(JUMP_DIR)/stubs.import: $(Concat(JUMP_STUBS_IMPORT_,libname))		@@\
630	$(RM) $(JUMP_DIR)/stubs.import					@@\
631	nm --no-cplus $(Concat(JUMP_STUBS_IMPORT_,libname)) | grep '__GOT__' | \
632		sed 's/__GOT__/_/' > $@					@@\
633									@@\
634down/mk_JUMP_AR: solist							@@\
635	$(RM) $(JUMP_AR)						@@\
636	@if [ -s $(JUMP_DIR)/jump.log ]; then \
637		echo "Error: Leftover globals for shared lib"; \
638		exit 1; fi						@@\
639	(cd down; $(AR) up/$(JUMP_AR) solist) || exit 1			@@\
640	$(RANLIB) $(JUMP_AR)						@@\
641	touch $@							@@\
642									@@\
643clean:: jumpclean							@@\
644									@@\
645jumpclean: jumpclean_$(JUMP_IS_HOST)					@@\
646	$(RM) $(JUMP_SA) down/mk_JUMP_AR				@@\
647	$(RM) -r $(JUMP_DIR)						@@\
648									@@\
649jumpclean_0:								@@\
650	$(RM) down/mk_JUMP_SA_0						@@\
651	$(RM) $(JUMP_HOST)/$(JUMP_SA)					@@\
652									@@\
653jumpclean_1:								@@\
654	$(RM) -r $(JUMP_SO) $(Concat(JUMP_DIR_,libname)) \		@@\
655		down/mk_JUMP_SA_1 down/mk_JUMP_SO_1 down/mk_JUMP_SO_2
656# endif /* SharedLibraryTarget */
657
658/*
659 * InstallSharedLibrary - generate rules to install the shared library.
660 */
661# ifndef InstallSharedLibrary
662#  define	InstallSharedLibrary(libname,rev,dest)			@@\
663install:: $(JUMP_SA) $(JUMP_SO)						@@\
664	MakeDir($(DESTDIR)dest)						@@\
665	@if [ "$(JUMP_IS_HOST)" = YES ]; then \
666		(T=$(DESTDIR)dest/`echo $(JUMP_SO)|sed '/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/`;\
667		set -x; \
668		$(INSTALL) -s -c $(INSTSOLIBFLAGS) $(JUMP_SO) $(DESTDIR)dest; \
669		$(RM) $$T && $(LN) $(JUMP_SO) $$T); fi			@@\
670	$(INSTALL) -c $(INSTLIBFLAGS) $(JUMP_SA) $(DESTDIR)dest
671# endif /* InstallSharedLibrary */
672
673/*
674 * InstallSharedLibraryData - generate rules to install the shared library data
675 */
676# ifndef InstallSharedLibraryData
677#  define	InstallSharedLibraryData(libname,rev,dest)
678# endif /* InstallSharedLibraryData */
679
680#endif /* UseElfFormat */
681