1 XCOMM $XConsortium: bsdLib.rules /main/3 1996/09/28 16:09:18 rws $
7 XCOMM $XFree86: xc/config/cf/bsdLib.rules,v 3.4.2.1 1997/05/11 05:04:04 dawes Exp $
9 * NetBSD/FreeBSD shared library rules
13 #define UseElfFormat NO
17 /* a.out shared libs */
18 #ifndef HasSharedLibraries
19 #define HasSharedLibraries YES
21 #ifndef SharedDataSeparation
22 #define SharedDataSeparation NO
27 #ifndef SharedLibraryDef
28 #define SharedLibraryDef -DBSDSHLIB
30 #ifndef ShLibIncludeFile
31 #define ShLibIncludeFile <bsdLib.tmpl>
33 #ifndef SharedLibraryLoadFlags
34 #define SharedLibraryLoadFlags -Bshareable
36 #ifndef PositionIndependentCFlags
37 #define PositionIndependentCFlags -fpic
41 * InstallSharedLibrary - generate rules to install the shared library.
43 #ifndef InstallSharedLibrary
44 #define InstallSharedLibrary(libname,rev,dest) @@\
45 install:: Concat(lib,libname.so.rev) @@\
46 MakeDir($(DESTDIR)dest) @@\
47 $(INSTALL) -c $(INSTLIBFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest
50 #endif /* InstallSharedLibrary */
53 * SharedLibraryTarget - generate rules to create a shared library;
54 * build it into a different name so that we do not hose people by having
55 * the library gone for long periods.
57 #ifndef SharedLibraryTarget
58 #define SharedLibraryTarget(libname,rev,solist,down,up) @@\
59 AllTarget(Concat(lib,libname.so.rev)) @@\
61 Concat(lib,libname.so.rev): solist $(EXTRALIBRARYDEPS) @@\
63 (cd down; $(LD) -o up/$@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS)) @@\
66 LinkBuildLibrary($@) @@\
69 $(RM) Concat(lib,libname.so.rev)
71 #endif /* SharedLibraryTarget */
73 #ifndef SharedDepModuleTarget
74 #define SharedDepModuleTarget(name,deps,solist) @@\
79 $(LD) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) @@\
86 #endif /* SharedDepModuleTarget */
89 * SharedLibraryDataTarget - generate rules to create shlib data file;
91 #ifndef SharedLibraryDataTarget
92 #define SharedLibraryDataTarget(libname,rev,salist)
93 #endif /* SharedLibraryDataTarget */
95 #ifndef InstallSharedLibraryData
96 #define InstallSharedLibraryData(libname,rev,dest)
97 #endif /* InstallSharedLibraryData */
100 * SharedLibReferences - variables for shared libraries
102 #ifndef SharedLibReferences
103 #define SharedLibReferences(varname,libname,libsource,revname,rev) @@\
105 Concat3(DEP,varname,LIB) = SharedLibDependencies(libname,libsource,revname) @@\
106 Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) @@\
107 LintLibReferences(varname,libname,libsource)
111 * SharedDSLibReferences - variables for shared libraries
113 #ifndef SharedDSLibReferences
114 #define SharedDSLibReferences(varname,libname,libsource,revname,rev) @@\
116 Concat3(DEP,varname,LIB) = SharedDSLibDependencies(libname,libsource,revname) @@\
117 Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) Concat3(Shared,libname,Reqs) @@\
118 LintLibReferences(varname,libname,libsource)
121 #else /* UseElfFormat */
124 * NetBSD/FreeBSD (ELF) shared library rules
125 * Cloned from Linux ELF rules, with the following major change:
127 * Shared libraries depend on -lc. Since we don't have to worry
128 * about libc vs. libg, etc., this is a good idea. (This is actually
129 * implied by using $(CC) to build the shared libraries.)
132 #ifndef HasSharedLibraries
133 #define HasSharedLibraries YES
135 #ifndef ForceNormalLib
136 #define ForceNormalLib YES
139 #ifndef BaseShLibReqs
140 #define BaseShLibReqs /* -lc implied by $(CC) */
143 #ifndef SharedDataSeparation
144 #define SharedDataSeparation NO
146 #ifndef SharedCodeDef
147 #define SharedCodeDef /**/
149 #ifndef SharedLibraryDef
150 #define SharedLibraryDef /**/
152 #ifndef ShLibIncludeFile
153 #define ShLibIncludeFile <bsdLib.tmpl>
155 #ifndef SharedLibraryLoadFlags
156 #define SharedLibraryLoadFlags -shared -Wl,-rpath,$(USRLIBDIR)
158 #ifndef PositionIndependentCFlags
159 #define PositionIndependentCFlags -fPIC
161 #ifndef PositionIndependentCplusplusFlags
162 #define PositionIndependentCplusplusFlags -fPIC
164 #ifndef ExtraLoadFlags
166 #define ExtraLoadFlags -Wl,-rpath,$(USRLIBDIRPATH)
168 #define ExtraLoadFlags -Wl,-rpath,$(USRLIBDIRPATH) -Wl,-rpath-link,$(BUILDLIBDIR)
173 * InstallSharedLibrary - generate rules to install the shared library.
174 * NOTE: file must be executable, hence "INSTBINFLAGS"
176 #ifndef InstallSharedLibrary
177 #define InstallSharedLibrary(libname,rev,dest) @@\
178 install:: Concat(lib,libname.so.rev) @@\
179 MakeDir($(DESTDIR)dest) @@\
180 $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\
181 (T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\.[^\.]*$$//'`;\
182 $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T) @@\
183 (T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\.so.*$$/.so/'`;\
184 $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T) @@\
185 $(RM) Concat($(DESTDIR)dest/lib,libname.so) @@\
186 $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so)
187 #endif /* InstallSharedLibrary */
190 * InstallSharedLibraryData - generate rules to install the shared library data
192 #ifndef InstallSharedLibraryData
193 #define InstallSharedLibraryData(libname,rev,dest)
194 #endif /* InstallSharedLibraryData */
198 * SharedLibraryTarget - generate rules to create a shared library;
199 * build it into a different name so that we do not hose people by having
200 * the library gone for long periods.
202 #ifndef SharedLibraryTarget
204 #define LinkBuildSonameLibrary(lib) true
206 #define LinkBuildSonameLibrary(lib) (RemoveFile($(BUILDLIBDIR)/lib); \
207 cd $(BUILDLIBDIR); $(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/lib .)
210 #define SharedLibraryTarget(libname,rev,solist,down,up) @@\
211 AllTarget(Concat(lib,libname.so.rev)) @@\
213 Concat(lib,libname.so.rev): solist @@\
215 SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; \ @@\
216 (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
217 $(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\
218 LinkBuildSonameLibrary($$SONAME) @@\
221 $(RM) Concat(lib,libname.so) @@\
222 $(LN) $@ Concat(lib,libname.so) @@\
223 LinkBuildLibrary($@) @@\
224 LinkBuildLibrary(Concat(lib,libname.so)) @@\
227 $(RM) Concat(lib,libname.so.rev)
229 #endif /* SharedLibraryTarget */
232 * SharedLibraryDataTarget - generate rules to create shlib data file;
234 #ifndef SharedLibraryDataTarget
235 #define SharedLibraryDataTarget(libname,rev,salist)
236 #endif /* SharedLibraryTarget */
238 #endif /* UseElfFormat */