XCOMM $XFree86: xc/config/cf/bsdiLib.rules,v 3.1 2000/05/18 00:33:16 dawes Exp $ /* * BSDI shared library rules (converted from SVr4/Linux rules) */ #ifndef HasSharedLibraries #define HasSharedLibraries YES #endif #ifndef ForceNormalLib #define ForceNormalLib YES #endif #ifndef SharedDataSeparation #define SharedDataSeparation NO #endif #ifndef SharedCodeDef #define SharedCodeDef /**/ #endif #ifndef SharedLibraryDef #define SharedLibraryDef /**/ #endif #ifndef ShLibIncludeFile #define ShLibIncludeFile #endif #ifndef SharedLibraryLoadFlags #define SharedLibraryLoadFlags -shared #endif #ifndef PositionIndependentCFlags #define PositionIndependentCFlags -fPIC #endif #ifndef PositionIndependentCplusplusFlags #define PositionIndependentCplusplusFlags -fPIC #endif #ifndef BaseShLibReqs #define BaseShLibReqs -lc #endif #ifndef RanlibInstFlags #define RanlibInstFlags -t #endif #ifndef SharedCCLdCmd /* NOT $(CC), which is probably 'shlicc'. */ #define SharedCCLdCmd cc #endif /* * InstallSharedLibrary - generate rules to install the shared library. */ #ifndef InstallSharedLibrary #define InstallSharedLibrary(libname,rev,dest) @@\ install:: Concat(lib,libname.so.rev) @@\ MakeDir($(DESTDIR)dest) @@\ $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\ $(RM) Concat($(DESTDIR)dest/lib,libname.so) @@\ $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so) #endif /* InstallSharedLibrary */ /* * InstallSharedLibraryData - generate rules to install the shared library data */ #ifndef InstallSharedLibraryData #define InstallSharedLibraryData(libname,rev,dest) #endif /* InstallSharedLibraryData */ /* * SharedLibraryTarget - generate rules to create a shared library; * build it into a different name so that we do not hose people by having * the library gone for long periods. */ #ifndef SharedLibraryTarget #ifdef UseInstalled #define LinkBuildSonameLibrary(lib) true #else #define LinkBuildSonameLibrary(lib) (RemoveFile($(BUILDLIBDIR)/lib); \ cd $(BUILDLIBDIR); $(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/lib .) #endif #define SharedLibraryTarget(libname,rev,solist,down,up) @@\ AllTarget(Concat(lib,libname.so.rev)) @@\ @@\ Concat(lib,libname.so.rev): solist @@\ $(RM) $@~ @@\ @SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; set -x; \ @@\ (cd down; $(CCENVSETUP) SharedCCLdCmd -o up/$@~ $(SHLIBLDFLAGS) \ -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ $(RM) $$SONAME; $(LN) $@ $$SONAME; \ LinkBuildSonameLibrary($$SONAME) @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ $(RM) Concat(lib,libname.so) @@\ $(LN) $@ Concat(lib,libname.so) @@\ LinkBuildLibrary($@) @@\ LinkBuildLibrary(Concat(lib,libname.so)) @@\ @@\ clean:: @@\ @SONAME=`echo Concat(lib,libname.so.rev) | sed 's/\.[^\.]*$$//'`; \ @@\ set -x; $(RM) $$SONAME @@\ $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so) #endif /* SharedLibraryTarget */ /* * SharedDepLibraryTarget - generate rules to create a shared library; * build it into a different name so that we do not hose people by having * the library gone for long periods. */ #ifndef SharedDepLibraryTarget #define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up) @@\ AllTarget(Concat(lib,libname.so.rev)) @@\ @@\ Concat(lib,libname.so.rev): deplist @@\ $(RM) $@~ @@\ @SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; set -x; \ @@\ (cd down; $(CCENVSETUP) SharedCCLdCmd -o up/$@~ $(SHLIBLDFLAGS) \ -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ $(RM) $$SONAME; $(LN) $@ $$SONAME; \ LinkBuildSonameLibrary($$SONAME) @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ $(RM) Concat(lib,libname.so) @@\ $(LN) $@ Concat(lib,libname.so) @@\ LinkBuildLibrary($@) @@\ LinkBuildLibrary(Concat(lib,libname.so)) @@\ @@\ clean:: @@\ @SONAME=`echo Concat(lib,libname.so.rev) | sed 's/\.[^\.]*$$//'`; \ @@\ set -x; $(RM) $$SONAME @@\ $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so) #endif /* SharedDepLibraryTarget */ #ifndef SharedDepModuleTarget #define SharedDepModuleTarget(name,deps,solist) @@\ AllTarget(name) @@\ @@\ name: deps @@\ $(RM) $@~ @@\ $(CCENVSETUP) SharedCCLdCmd -o $@~ $(SHLIBLDFLAGS) \ solist $(REQUIREDLIBS) BaseShLibReqs @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ @@\ clean:: @@\ $(RM) name #endif /* SharedDepModuleTarget */ /* * SharedLibraryDataTarget - generate rules to create shlib data file; */ #ifndef SharedLibraryDataTarget #define SharedLibraryDataTarget(libname,rev,salist) #endif /* SharedLibraryTarget */ /* * Hacks for BSD/OS static shared libraries. * We replace the normal library build and install rules. */ SHLIB_MAP=$${SHLIB_MAP-/etc/shlib.map} #define BsdiStaticLibraryName(libname)Concat(Concat(lib,libname),_s) #define BsdiStaticStubLibraryName(libname)BsdiStaticLibraryName(libname).a #define MakeBsdiStaticSharedLibrary(libname) \ @SHARED=; \ eval $$( (echo 'MAP() { [ "X$$1" = "X-l'libname'" ] || return 0;' \ 'echo "TADDR=$$2;";' \ 'echo "DADDR=$$3;";' \ 'echo "SHARED=$$5;";' \ 'shift 5; echo "ARGS='"'"'"$$@"'"'"';";' \ 'exit 0; }'; cat $(SHLIB_MAP)) | sh); \ [ -n "$$SHARED" ] || exit 0; \ echo building static shared libname library; \ shlib -m $(SHLIB_MAP) -t $$TADDR -d $$DADDR \ -n BsdiStaticLibraryName(libname) \ -s BsdiStaticStubLibraryName(libname) \ $$( [ -f 'loader.lib'libname'.c' ] && \ echo -b 'loader.lib'libname'.c') \ $$( [ -f 'lib'libname'.const' ] && \ echo -c 'lib'libname'.const') \ $$( [ -f 'lib'libname'.except' ] && \ echo -e 'lib'libname'.except') \ $$( [ -f $$SHARED ] && echo -i $$SHARED) \ $$ARGS LibraryTargetName(libname) #define InstallBsdiStaticSharedLibrary(libname) \ @SHARED=; \ eval $$( (echo 'MAP() { [ "X$$1" = "X-l'libname'" ] || return 0;' \ 'echo "SHARED=$$5;";' \ 'echo "STUB=$$(dirname $$4)/$$(basename $$5).a;";' \ 'exit 0; }'; cat $(SHLIB_MAP)) | sh); \ [ -n "$$SHARED" ] || exit 0; \ echo installing static shared libname library; \ $(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) \ BsdiStaticLibraryName(libname) $(DESTDIR)$$SHARED; \ $(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) \ BsdiStaticStubLibraryName(libname) $(DESTDIR)$$STUB; \ RanLibrary($(RANLIBINSTFLAGS) $(DESTDIR)$$STUB) @@\ -@eval $$( (echo 'MAP() { [ "X$$1" = "X-l'libname'" ] || return 0;' \ 'echo "LDIR=$$(dirname $$4)"; exit 0; }'; \ cat $(SHLIB_MAP)) | sh); \ [ -f Concat(loader.lib,libname.c) ] && \ $(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) \ Concat(loader.lib,libname.c) \ $(DESTDIR)$$LDIR/Concat(loader.lib,libname.c); \ [ -f Concat(lib,libname.const) ] && \ $(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) \ Concat(lib,libname.const) \ $(DESTDIR)$$LDIR/Concat(lib,libname.const); \ [ -f Concat(lib,libname.except) ] && \ $(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) \ Concat(lib,libname.except) \ $(DESTDIR)$$LDIR/Concat(lib,libname.except); exit 0 #ifndef UnsharedLibraryTarget #define UnsharedLibraryTarget(libname,objlist,down,up) @@\ AllTarget(LibraryTargetName(libname)) @@\ @@\ LibraryTargetName(libname): objlist @@\ RemoveFile($@) @@\ (cd down; MakeLibrary(up/$@,objlist)) @@\ RanLibrary($@) @@\ _LinkBuildLibrary($@) @@\ MakeBsdiStaticSharedLibrary(libname) @@\ @@\ clean:: @@\ $(RM) BsdiStaticLibraryName(libname) BsdiStaticStubLibraryName(libname) #endif /* UnsharedLibraryTarget */ #ifndef UnsharedLibraryTarget3 #define UnsharedLibraryTarget3(libname,objlist1,objlist2,objlist3,down,up) @@\ UnsharedLibraryTarget(libname,objlist1 objlist2 objlist3,down,up) #endif /* UnsharedLibraryTarget3 */ #ifndef InstallLibrary #define InstallLibrary(libname,dest) @@\ install:: LibraryTargetName(libname) @@\ MakeDir($(DESTDIR)dest) @@\ $(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) \ LibraryTargetName(libname) $(DESTDIR)dest @@\ RanLibrary($(RANLIBINSTFLAGS) \ $(DESTDIR)dest/LibraryTargetName(libname)) @@\ InstallBsdiStaticSharedLibrary(libname) #endif /* InstallLibrary */