1/* 2 * GNU/Hurd shared library rules 3 * 4 * $XFree86: xc/config/cf/gnuLib.rules,v 1.9 2003/10/11 09:40:13 herrb Exp $ 5 */ 6 7/* 8 * GNU/Hurd shared library rules 9 * Cloned from Linux (ELF) shared library rules 10 * 11 */ 12 13#ifndef HasSharedLibraries 14#define HasSharedLibraries YES 15#endif 16#ifndef ForceNormalLib 17#define ForceNormalLib NO 18#endif 19 20XCOMM XXX To rpath or not to rpath... 21#ifndef UseRpath 22#define UseRpath NO 23#endif 24 25#ifndef SharedOldX 26#define SharedOldX NO 27#endif 28 29#undef SpecialMalloc 30#define SpecialMalloc NO 31 32#define BaseShLibReqs -lc 33 34#ifndef SharedDataSeparation 35#define SharedDataSeparation NO 36#endif 37#ifndef SharedCodeDef 38#define SharedCodeDef /**/ 39#endif 40#ifndef SharedLibraryDef 41#define SharedLibraryDef /**/ 42#endif 43#ifndef ShLibIncludeFile 44#define ShLibIncludeFile <gnuLib.tmpl> 45#endif 46#ifndef RpathLoadFlags 47#if UseRpath 48#define RpathLoadFlags -Wl,-rpath=$(USRLIBDIRPATH) 49#else 50#define RpathLoadFlags /**/ 51#endif 52#endif 53#ifndef LibraryRpathLoadFlags 54#define LibraryRpathLoadFlags RpathLoadFlags 55#endif 56#ifndef SharedLibraryLoadFlags 57#define SharedLibraryLoadFlags -shared LibraryRpathLoadFlags 58#endif 59#ifndef PositionIndependentCFlags 60#define PositionIndependentCFlags -fPIC 61#endif 62#ifndef PositionIndependentCplusplusFlags 63#define PositionIndependentCplusplusFlags -fPIC 64#endif 65#ifndef ExtraLoadFlags 66#ifdef UseInstalled 67XCOMM XXX Maybe superfluous. 68#define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link=$(USRLIBDIRPATH) 69#else 70#define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link=$(BUILDLIBDIR) 71#endif 72#endif 73 74/* 75 * InstallSharedLibrary - generate rules to install the shared library. 76 * NOTE: file must be executable, hence "INSTBINFLAGS" 77 */ 78#ifndef InstallSharedLibrary 79#define InstallSharedLibrary(libname,rev,dest) @@\ 80install:: Concat(lib,libname.so.rev) @@\ 81 MakeDir($(DESTDIR)dest) @@\ 82 $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\ 83 @T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`;\ 84 set -x; $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T @@\ 85 @if $(SOSYMLINK); then (set -x; \ 86 $(RM) Concat($(DESTDIR)dest/lib,libname.so); \ @@\ 87 $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so)); fi 88#endif /* InstallSharedLibrary */ 89 90/* 91 * InstallSharedLibraryData - generate rules to install the shared library data 92 */ 93#ifndef InstallSharedLibraryData 94#define InstallSharedLibraryData(libname,rev,dest) 95#endif /* InstallSharedLibraryData */ 96 97 98/* 99 * SharedLibraryTarget - generate rules to create a shared library; 100 * build it into a different name so that we do not hose people by having 101 * the library gone for long periods. 102 */ 103#ifndef SharedLibraryTarget 104#define SharedLibraryTarget(libname,rev,solist,down,up) @@\ 105AllTarget(Concat(lib,libname.so.rev)) @@\ 106 @@\ 107Concat(lib,libname.so.rev): solist $(EXTRALIBRARYDEPS) @@\ 108 $(RM) $@~ @@\ 109 @SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \ @@\ 110 (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\ 111 $(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\ 112 LinkBuildSonameLibrary($$SONAME) @@\ 113 $(RM) $@ @@\ 114 $(MV) $@~ $@ @@\ 115 @if $(SOSYMLINK); then (set -x; \ @@\ 116 $(RM) Concat(lib,libname.so); \ @@\ 117 $(LN) $@ Concat(lib,libname.so)); fi @@\ 118 LinkBuildLibrary($@) @@\ 119 LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\ 120 @@\ 121clean:: @@\ 122 @MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \ @@\ 123 set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\ 124 $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so) 125 126#endif /* SharedLibraryTarget */ 127 128/* 129 * SharedDepLibraryTarget - generate rules to create a shared library. 130 */ 131#ifndef SharedDepLibraryTarget 132#define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up) @@\ 133AllTarget(Concat(lib,libname.so.rev)) @@\ 134 @@\ 135Concat(lib,libname.so.rev): deplist $(EXTRALIBRARYDEPS) @@\ 136 $(RM) $@~ @@\ 137 @SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \ @@\ 138 (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\ 139 $(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\ 140 LinkBuildSonameLibrary($$SONAME) @@\ 141 $(RM) $@ @@\ 142 $(MV) $@~ $@ @@\ 143 @if $(SOSYMLINK); then (set -x; \ @@\ 144 $(RM) Concat(lib,libname.so); \ @@\ 145 $(LN) $@ Concat(lib,libname.so)); fi @@\ 146 LinkBuildLibrary($@) @@\ 147 LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\ 148 @@\ 149clean:: @@\ 150 @MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \ @@\ 151 set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\ 152 $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so) 153 154#endif /* SharedDepLibraryTarget */ 155 156#ifndef SharedDepModuleTarget 157#define SharedDepModuleTarget(name,deps,solist) @@\ 158AllTarget(name) @@\ 159 @@\ 160name: deps @@\ 161 $(RM) $@~ @@\ 162 $(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\ 163 $(RM) $@ @@\ 164 $(MV) $@~ $@ @@\ 165 @@\ 166clean:: @@\ 167 $(RM) name 168 169#endif /* SharedDepModuleTarget */ 170 171/* 172 * SharedLibraryDataTarget - generate rules to create shlib data file; 173 */ 174#ifndef SharedLibraryDataTarget 175#define SharedLibraryDataTarget(libname,rev,salist) 176#endif /* SharedLibraryTarget */ 177