111d341caSmrg/*
211d341caSmrg * GNU/Hurd shared library rules
311d341caSmrg *
411d341caSmrg * $XFree86: xc/config/cf/gnuLib.rules,v 1.9 2003/10/11 09:40:13 herrb Exp $
511d341caSmrg */
611d341caSmrg
711d341caSmrg/*
811d341caSmrg * GNU/Hurd shared library rules
911d341caSmrg * Cloned from Linux (ELF) shared library rules
1011d341caSmrg *
1111d341caSmrg */
1211d341caSmrg
1311d341caSmrg#ifndef HasSharedLibraries
1411d341caSmrg#define HasSharedLibraries YES
1511d341caSmrg#endif
1611d341caSmrg#ifndef ForceNormalLib
1711d341caSmrg#define ForceNormalLib NO
1811d341caSmrg#endif
1911d341caSmrg
2011d341caSmrgXCOMM XXX To rpath or not to rpath...
2111d341caSmrg#ifndef UseRpath
2211d341caSmrg#define UseRpath NO
2311d341caSmrg#endif
2411d341caSmrg
2511d341caSmrg#ifndef SharedOldX
2611d341caSmrg#define SharedOldX NO
2711d341caSmrg#endif
2811d341caSmrg
2911d341caSmrg#undef SpecialMalloc
3011d341caSmrg#define SpecialMalloc NO
3111d341caSmrg
3211d341caSmrg#define BaseShLibReqs   -lc
3311d341caSmrg
3411d341caSmrg#ifndef SharedDataSeparation
3511d341caSmrg#define SharedDataSeparation NO
3611d341caSmrg#endif
3711d341caSmrg#ifndef SharedCodeDef
3811d341caSmrg#define SharedCodeDef /**/
3911d341caSmrg#endif
4011d341caSmrg#ifndef SharedLibraryDef
4111d341caSmrg#define SharedLibraryDef /**/
4211d341caSmrg#endif
4311d341caSmrg#ifndef ShLibIncludeFile
4411d341caSmrg#define ShLibIncludeFile <gnuLib.tmpl>
4511d341caSmrg#endif
4611d341caSmrg#ifndef RpathLoadFlags
4711d341caSmrg#if UseRpath
4811d341caSmrg#define RpathLoadFlags -Wl,-rpath=$(USRLIBDIRPATH)
4911d341caSmrg#else
5011d341caSmrg#define RpathLoadFlags /**/
5111d341caSmrg#endif
5211d341caSmrg#endif
5311d341caSmrg#ifndef LibraryRpathLoadFlags
5411d341caSmrg#define LibraryRpathLoadFlags RpathLoadFlags
5511d341caSmrg#endif
5611d341caSmrg#ifndef SharedLibraryLoadFlags
5711d341caSmrg#define SharedLibraryLoadFlags -shared LibraryRpathLoadFlags
5811d341caSmrg#endif
5911d341caSmrg#ifndef PositionIndependentCFlags
6011d341caSmrg#define PositionIndependentCFlags -fPIC
6111d341caSmrg#endif
6211d341caSmrg#ifndef PositionIndependentCplusplusFlags
6311d341caSmrg#define PositionIndependentCplusplusFlags -fPIC
6411d341caSmrg#endif
6511d341caSmrg#ifndef ExtraLoadFlags
6611d341caSmrg#ifdef UseInstalled
6711d341caSmrgXCOMM XXX Maybe superfluous.
6811d341caSmrg#define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link=$(USRLIBDIRPATH)
6911d341caSmrg#else
7011d341caSmrg#define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link=$(BUILDLIBDIR)
7111d341caSmrg#endif
7211d341caSmrg#endif
7311d341caSmrg
7411d341caSmrg/*
7511d341caSmrg * InstallSharedLibrary - generate rules to install the shared library.
7611d341caSmrg * NOTE: file must be executable, hence "INSTBINFLAGS"
7711d341caSmrg */
7811d341caSmrg#ifndef InstallSharedLibrary
7911d341caSmrg#define InstallSharedLibrary(libname,rev,dest)				@@\
8011d341caSmrginstall:: Concat(lib,libname.so.rev) 					@@\
8111d341caSmrg	MakeDir($(DESTDIR)dest)						@@\
8211d341caSmrg	$(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\
8311d341caSmrg	@T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`;\
8411d341caSmrg	  set -x; $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T	@@\
8511d341caSmrg	@if $(SOSYMLINK); then (set -x; \
8611d341caSmrg	  $(RM) Concat($(DESTDIR)dest/lib,libname.so); \		@@\
8711d341caSmrg	  $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so)); fi
8811d341caSmrg#endif /* InstallSharedLibrary */
8911d341caSmrg
9011d341caSmrg/*
9111d341caSmrg * InstallSharedLibraryData - generate rules to install the shared library data
9211d341caSmrg */
9311d341caSmrg#ifndef InstallSharedLibraryData
9411d341caSmrg#define InstallSharedLibraryData(libname,rev,dest)
9511d341caSmrg#endif /* InstallSharedLibraryData */
9611d341caSmrg
9711d341caSmrg
9811d341caSmrg/*
9911d341caSmrg * SharedLibraryTarget - generate rules to create a shared library;
10011d341caSmrg * build it into a different name so that we do not hose people by having
10111d341caSmrg * the library gone for long periods.
10211d341caSmrg */
10311d341caSmrg#ifndef SharedLibraryTarget
10411d341caSmrg#define SharedLibraryTarget(libname,rev,solist,down,up)			@@\
10511d341caSmrgAllTarget(Concat(lib,libname.so.rev))					@@\
10611d341caSmrg									@@\
10711d341caSmrgConcat(lib,libname.so.rev):  solist $(EXTRALIBRARYDEPS)			@@\
10811d341caSmrg	$(RM) $@~							@@\
10911d341caSmrg	@SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \		@@\
11011d341caSmrg		(cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
11111d341caSmrg		$(RM) $$SONAME; $(LN) $@ $$SONAME; \			@@\
11211d341caSmrg		LinkBuildSonameLibrary($$SONAME)			@@\
11311d341caSmrg	$(RM) $@							@@\
11411d341caSmrg	$(MV) $@~ $@							@@\
11511d341caSmrg	@if $(SOSYMLINK); then (set -x; \				@@\
11611d341caSmrg	  $(RM) Concat(lib,libname.so); \				@@\
11711d341caSmrg	  $(LN) $@ Concat(lib,libname.so)); fi				@@\
11811d341caSmrg	LinkBuildLibrary($@)						@@\
11911d341caSmrg	LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK))	@@\
12011d341caSmrg									@@\
12111d341caSmrgclean::									@@\
12211d341caSmrg	@MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \	@@\
12311d341caSmrg	set -x; $(RM) Concat(lib,libname.so.$$MAJREV)			@@\
12411d341caSmrg	$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
12511d341caSmrg
12611d341caSmrg#endif /* SharedLibraryTarget */
12711d341caSmrg
12811d341caSmrg/*
12911d341caSmrg * SharedDepLibraryTarget - generate rules to create a shared library.
13011d341caSmrg */
13111d341caSmrg#ifndef SharedDepLibraryTarget
13211d341caSmrg#define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up)	@@\
13311d341caSmrgAllTarget(Concat(lib,libname.so.rev))					@@\
13411d341caSmrg									@@\
13511d341caSmrgConcat(lib,libname.so.rev):  deplist $(EXTRALIBRARYDEPS)		@@\
13611d341caSmrg	$(RM) $@~							@@\
13711d341caSmrg	@SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \		@@\
13811d341caSmrg		(cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
13911d341caSmrg		$(RM) $$SONAME; $(LN) $@ $$SONAME; \			@@\
14011d341caSmrg		LinkBuildSonameLibrary($$SONAME)			@@\
14111d341caSmrg	$(RM) $@ 							@@\
14211d341caSmrg	$(MV) $@~ $@							@@\
14311d341caSmrg	@if $(SOSYMLINK); then (set -x; \				@@\
14411d341caSmrg	  $(RM) Concat(lib,libname.so); \				@@\
14511d341caSmrg	  $(LN) $@ Concat(lib,libname.so)); fi				@@\
14611d341caSmrg	LinkBuildLibrary($@)						@@\
14711d341caSmrg	LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK))	@@\
14811d341caSmrg									@@\
14911d341caSmrgclean::									@@\
15011d341caSmrg	@MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \	@@\
15111d341caSmrg	set -x; $(RM) Concat(lib,libname.so.$$MAJREV)			@@\
15211d341caSmrg	$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
15311d341caSmrg
15411d341caSmrg#endif /* SharedDepLibraryTarget */
15511d341caSmrg
15611d341caSmrg#ifndef SharedDepModuleTarget
15711d341caSmrg#define SharedDepModuleTarget(name,deps,solist)				@@\
15811d341caSmrgAllTarget(name)								@@\
15911d341caSmrg									@@\
16011d341caSmrgname: deps								@@\
16111d341caSmrg	$(RM) $@~							@@\
16211d341caSmrg	$(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\
16311d341caSmrg	$(RM) $@							@@\
16411d341caSmrg	$(MV) $@~ $@							@@\
16511d341caSmrg									@@\
16611d341caSmrgclean::									@@\
16711d341caSmrg	$(RM) name
16811d341caSmrg
16911d341caSmrg#endif /* SharedDepModuleTarget */
17011d341caSmrg
17111d341caSmrg/*
17211d341caSmrg * SharedLibraryDataTarget - generate rules to create shlib data file;
17311d341caSmrg */
17411d341caSmrg#ifndef SharedLibraryDataTarget
17511d341caSmrg#define SharedLibraryDataTarget(libname,rev,salist)
17611d341caSmrg#endif /* SharedLibraryTarget */
177