xref: /freebsd/crypto/krb5/src/config/shlib.conf (revision 4757b351ea9d59d71d4a38b82506d2d16fcd560d)
1# This shell script fragment should set a bunch of variables:
2#
3# CC_LINK_STATIC: How to link a program if we're only building static
4#  libraries for krb5 (but may use other shared libs, and there may
5#  be a shared krb5 lib already installed that we shouldn't use).
6# CC_LINK_SHARED: How to link a program if we're building shared
7#  libraries.
8# CXX_LINK_STATIC, CXX_LINK_SHARED: Variants for C++.
9# STLIBEXT: Static library extension.
10# SHLIBEXT: Shared library extension.
11# SHLIBVEXT: Shared library extension, with major version.
12# SHLIBSEXT: Shared library extension, with full version.
13# (... finish documenting these ...)
14
15#
16# Set up some defaults.
17#
18STLIBEXT=.a
19# Default to being unable to build shared libraries.
20SHLIBEXT=.so-nobuild
21SHLIBVEXT=.so.v-nobuild
22SHLIBSEXT=.so.s-nobuild
23# Most systems support profiled libraries.
24PFLIBEXT=_p.a
25# Install libraries executable.  Some systems (e.g., RPM-based ones) require
26# this for package dependency generation, while others are ambivalent or will
27# strip it during packaging.
28INSTALL_SHLIB='$(INSTALL)'
29# Most systems use the same objects for shared libraries and dynamically
30# loadable objects.
31DYNOBJEXT='$(SHLIBEXT)'
32MAKE_DYNOBJ_COMMAND='$(MAKE_SHLIB_COMMAND)'
33DYNOBJ_EXPDEPS='$(SHLIB_EXPDEPS)'
34DYNOBJ_EXPFLAGS='$(SHLIB_EXPFLAGS)'
35#
36use_linker_init_option=no
37use_linker_fini_option=no
38
39STOBJEXT=.o
40SHOBJEXT=.so
41PFOBJEXT=.po
42# Default for systems w/o shared libraries
43CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
44CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
45#
46SHLIB_EXPORT_FILE_DEP='$(SHLIB_EXPORT_FILE)'
47# This will do for most platforms, and we'll substitute for
48# LDCOMBINE, SHLIB_EXPFLAGS, and LDCOMBINE_TAIL below.
49MAKE_SHLIB_COMMAND=x
50INIT_FINI_PREP=:
51
52# Default to static or shared libraries?
53default_static=no
54default_shared=yes
55
56# Set up architecture-specific variables.
57case $krb5_cv_host in
58alpha*-dec-osf*)
59	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
60	SHLIBSEXT='.so.$(LIBMAJOR)'
61	SHLIBEXT=.so
62	# Alpha OSF/1 doesn't need separate PIC objects
63	SHOBJEXT=.o
64	INIT_FINI_PREP=initfini=
65	LDCOMBINE='$(CC) $(CFLAGS) $(PTHREAD_CFLAGS) -shared -Wl,-expect_unresolved -Wl,\* -Wl,-update_registry -Wl,$(BUILDTOP)/so_locations -Wl,-soname -Wl,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) -Wl,-hidden -Wl,-input,osf1.exports $$initfini'
66	SHLIB_EXPORT_FILE_DEP=osf1.exports
67	use_linker_init_option=yes
68	use_linker_fini_option=yes
69	EXTRA_FILES="$EXTRA_FILES export"
70	SHLIB_RPATH_FLAGS='-rpath $(SHLIB_RDIRS)'
71	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
72	PROFFLAGS=-pg
73	RPATH_FLAG='-Wl,-rpath -Wl,'
74	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
75	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(PTHREAD_CFLAGS) $(LDFLAGS)'
76	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(PTHREAD_CFLAGS) $(LDFLAGS)'
77	if test "$ac_cv_c_compiler_gnu" = yes \
78		&& test "$krb5_cv_prog_gnu_ld" = yes; then
79		# Really should check for gnu ld vs system ld, too.
80		CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(PTHREAD_CFLAGS) $(LDFLAGS)'
81	else
82		# Need -oldstyle_liblookup to avoid picking up shared libs from
83		# other builds.  OSF/1 / Tru64 ld programs look through the entire
84		# library path for shared libs prior to looking through the
85		# entire library path for static libs.
86		CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) -Wl,-oldstyle_liblookup $(CFLAGS) $(PTHREAD_CFLAGS) $(LDFLAGS)'
87	fi
88	if test "$ac_cv_cxx_compiler_gnu" = yes \
89		&& test "$krb5_cv_prog_gnu_ld" = yes; then
90		# Really should check for gnu ld vs system ld, too.
91		CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(PTHREAD_CFLAGS) $(LDFLAGS)'
92	else
93		# Need -oldstyle_liblookup to avoid picking up shared libs from
94		# other builds.  OSF/1 / Tru64 ld programs look through the entire
95		# library path for shared libs prior to looking through the
96		# entire library path for static libs.
97		CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) -Wl,-oldstyle_liblookup $(CXXFLAGS) $(PTHREAD_CFLAGS) $(LDFLAGS)'
98	fi
99	# _RLD_ROOT hack needed to repoint "root" directory for purposes
100	# of searching for shared libs, since RPATHs take precedence over
101	# LD_LIBRARY_PATH.
102	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`$${LD_LIBRARY_PATH+:$$LD_LIBRARY_PATH} _RLD_ROOT=$${_RLD_ROOT+$$_RLD_ROOT}$${_RLD_ROOT-/}'
103	RUN_VARS='LD_LIBRARY_PATH _RLD_ROOT'
104	;;
105
106# Note: "-Wl,+s" when building executables enables the use of the
107# SHLIB_PATH environment variable for finding shared libraries
108# in non-standard directories.  If a non-standard search-path for
109#  shared libraries is compiled into the executable (using
110# -Wl,+b,$KRB5_SHLIBDIR), then the order of "-Wl,+b,..." and "-Wl,+s"
111# on the commandline of the linker will determine which path
112# (compiled-in or SHLIB_PATH) will be searched first.
113#
114# +I initproc routine gets called at load and unload time for
115#    shl_load calls, but appears to never be called for link-time
116#    specified libraries.
117# +e sym exports symbol and supposedly prevents other symbols
118#    from being exported, according to the man page, but the
119#    latter bit doesn't actually seem to work
120# -O +dpv should display any routines eliminated as unused, but -b
121#	  apparently turns that off
122*-*-hpux*)
123	case $host_cpu in
124	hppa*)
125		SHLIBEXT=.sl
126		;;
127	ia64*)
128		SHLIBEXT=.so
129		;;
130	esac
131	SHLIBVEXT='.$(LIBMAJOR).$(LIBMINOR)'
132	SHLIBSEXT='.$(LIBMAJOR)'
133	RPATH_FLAG='-Wl,+b,'
134	if test "$ac_cv_c_compiler_gnu" = yes; then
135		PICFLAGS=-fPIC
136		SHLIB_RPATH_FLAGS='-Wl,+b,$(SHLIB_RDIRS)'
137		SHLIB_EXPFLAGS='-Wl,+s $(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
138		LDCOMBINE='gcc -fPIC -shared -Wl,+h,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) -Wl,-c,hpux.exports'
139	else
140		PICFLAGS=+z
141		SHLIB_RPATH_FLAGS='+b $(SHLIB_RDIRS)'
142		SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
143		LDCOMBINE='ld -b +h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) -c hpux.exports'
144	fi
145	MAKE_SHLIB_COMMAND="${LDCOMBINE} -o \$@ \$\$objlist \$(LDFLAGS) \$(SHLIB_EXPFLAGS) ${LDCOMBINE_TAIL}"
146	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
147	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
148	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
149	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
150	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
151	RUN_ENV='SHLIB_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
152	RUN_VARS='SHLIB_PATH'
153	SHLIB_EXPORT_FILE_DEP=hpux.exports
154	# Do *not* set use_linker_init_option=yes here, because in the
155	# case where the library is specified at program link time, the
156	# initialization function appears not to get called, only for
157	# shl_load.  But for finalization functions, the shl_load case
158	# is the one we care about.
159	#
160	# Not setting use_linker_init_option here should cause compilation
161	# failures if the user tries to disable delayed initialization.
162	use_linker_fini_option=yes
163	;;
164
165mips-sgi-irix6.3)	# This is a Kludge; see below
166	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
167	SHLIBSEXT='.so.$(LIBMAJOR)'
168	SHLIBEXT=.so
169	SHOBJEXT=.o
170	# Kludge follows: (gcc makes n32 object files but ld expects o32, so we reeducate ld)
171	if test "$ac_cv_c_compiler_gnu" = yes; then
172		LDCOMBINE='ld -n32 -shared -ignore_unresolved -update_registry $(BUILDTOP)/so_locations -soname $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'
173	else
174		LDCOMBINE='ld -shared -ignore_unresolved -update_registry $(BUILDTOP)/so_locations -soname $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'
175	fi
176	SHLIB_RPATH_FLAGS='-rpath $(SHLIB_RDIRS)'
177	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
178	# no gprof for Irix...
179	PROFFLAGS=-p
180	RPATH_FLAG='-Wl,-rpath -Wl,'
181	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
182	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
183	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
184	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
185	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
186	# This grossness is necessary due to the presence of *three*
187	# supported ABIs on Irix, and the precedence of the rpath over
188	# LD_LIBRARY*_PATH.  Like OSF/1, _RLD*_ROOT needs to be set to
189	# work around this lossage.
190	#
191	# Set the N32 and 64 variables first because the unqualified
192	# variables affect all three and can cause the sed command to fail.
193	#
194	# This loop is to reduce the clutter a slight bit.
195	add='`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
196	RUN_ENV=
197	for i in N32 64 ''; do
198		RUN_ENV="${RUN_ENV+$RUN_ENV }LD_LIBRARY${i}_PATH=$add\$\${LD_LIBRARY${i}_PATH+:\$\$LD_LIBRARY${i}_PATH}"
199		RUN_ENV="${RUN_ENV} _RLD${i}_ROOT=\$\${_RLD${i}_ROOT+\$\${_RLD${i}_ROOT}}\$\${_RLD${i}_ROOT-/}"
200		RUN_VARS="$RUN_VARS LD_LIBRARY${i}_PATH _RLD${i}_ROOT"
201	done
202	;;
203
204mips-sgi-irix*)
205	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
206	SHLIBSEXT='.so.$(LIBMAJOR)'
207	SHLIBEXT=.so
208	SHOBJEXT=.o
209	if test "$ac_cv_c_compiler_gnu" = yes; then
210		LDCOMBINE_TAIL=""
211		INIT_FINI_PREP="initfini="
212	else
213		use_linker_init_option=yes
214		use_linker_fini_option=yes
215		INIT_FINI_PREP='initfini=; for f in . $(LIBINITFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-init,$${f}__auxinit"; fi; done; for f in . $(LIBFINIFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-fini,$${f}"; fi; done'
216		LDCOMBINE_TAIL='-Wl,-exports_file -Wl,$(SHLIB_EXPORT_FILE)'
217	fi
218	opts='-Wl,-ignore_unresolved -Wl,-update_registry -Wl,$(BUILDTOP)/so_locations'
219
220	if test "$ac_cv_c_compiler_gnu" = yes \
221		&& test "$krb5_cv_prog_gnu_ld" = yes; then
222		opts=''
223	fi
224	LDCOMBINE='$(CC) -shared '$opts' -Wl,-soname -Wl,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) $$initfini'
225	SHLIB_RPATH_FLAGS='-rpath $(SHLIB_RDIRS)'
226	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
227	# no gprof for Irix...
228	PROFFLAGS=-p
229	RPATH_FLAG='-Wl,-rpath -Wl,'
230	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
231	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
232	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
233	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
234	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
235	# This grossness is necessary due to the presence of *three*
236	# supported ABIs on Irix, and the precedence of the rpath over
237	# LD_LIBRARY*_PATH.  Like OSF/1, _RLD*_ROOT needs to be set to
238	# work around this lossage.
239	#
240	# Set the N32 and 64 variables first because the unqualified
241	# variables affect all three and can cause the sed command to fail.
242	#
243	# This loop is to reduce the clutter a slight bit.
244	add='`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
245	RUN_ENV=
246	for i in N32 64 ''; do
247		RUN_ENV="${RUN_ENV+$RUN_ENV }LD_LIBRARY${i}_PATH=$add\$\${LD_LIBRARY${i}_PATH+:\$\$LD_LIBRARY${i}_PATH}"
248		RUN_ENV="${RUN_ENV} _RLD${i}_ROOT=\$\${_RLD${i}_ROOT+\$\${_RLD${i}_ROOT}}\$\${_RLD${i}_ROOT-/}"
249		RUN_VARS="$RUN_VARS LD_LIBRARY${i}_PATH _RLD${i}_ROOT"
250	done
251	;;
252
253# untested...
254mips-sni-sysv4)
255	if test "$ac_cv_c_compiler_gnu" = yes; then
256		PICFLAGS=-fpic
257		LDCOMBINE='$(CC) -G -Wl,-h -Wl,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'
258	else
259		PICFLAGS=-Kpic
260		LDCOMBINE='$(CC) -G -h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'
261	fi
262	SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'
263	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
264	SHLIBEXT=.so
265	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
266	SHLIBSEXT='.so.$(LIBMAJOR)'
267	RPATH_FLAG=-R
268	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
269	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
270	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
271	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
272	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
273	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
274	RUN_VARS='LD_LIBRARY_PATH'
275	PROFFLAGS=-pg
276	;;
277
278mips-*-netbsd*)
279	PICFLAGS=-fPIC
280	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
281	SHLIBSEXT='.so.$(LIBMAJOR)'
282	SHLIBEXT=.so
283	LDCOMBINE='ld -shared -soname $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'
284	SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'
285	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
286	RPATH_FLAG='-Wl,-rpath -Wl,'
287	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
288	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
289	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
290	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
291	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
292	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
293	RUN_VARS='LD_LIBRARY_PATH'
294	PROFFLAGS=-pg
295	;;
296
297*-*-netbsd*)
298	PICFLAGS=-fPIC
299	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
300	SHLIBEXT=.so
301	LDCOMBINE='$(CC) -shared'
302	SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'
303	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
304	RPATH_FLAG=-R
305	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
306	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
307	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
308	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
309	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
310	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
311	RUN_VARS='LD_LIBRARY_PATH'
312	PROFFLAGS=-pg
313	;;
314
315*-*-freebsd*)
316	case $krb5_cv_host in
317		sparc64-*)
318			PICFLAGS=-fPIC
319			;;
320		*)
321			PICFLAGS=-fpic
322			;;
323	esac
324	SHLIBVEXT='.so.$(LIBMAJOR)'
325	RPATH_FLAG='-Wl,--enable-new-dtags -Wl,-rpath -Wl,'
326	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
327	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
328	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
329	SHLIBEXT=.so
330	LDCOMBINE='ld -Bshareable'
331	SHLIB_RPATH_FLAGS='--enable-new-dtags -rpath $(SHLIB_RDIRS)'
332	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
333	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
334	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
335	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
336	RUN_VARS='LD_LIBRARY_PATH'
337	PROFFLAGS=-pg
338	;;
339
340*-*-openbsd*)
341	PICFLAGS=-fpic
342	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
343	SHLIBEXT=.so
344	LDCOMBINE='ld -Bshareable'
345	SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'
346	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
347	RPATH_FLAG=-R
348	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
349	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
350	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
351	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
352	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
353	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
354	RUN_VARS='LD_LIBRARY_PATH'
355	PROFFLAGS=-pg
356	;;
357
358*-*-darwin* | *-*-rhapsody*)
359	SHLIBVEXT='.$(LIBMAJOR).$(LIBMINOR).dylib'
360	SHLIBSEXT='.$(LIBMAJOR).dylib'
361	SHLIB_EXPFLAGS='$(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
362	SHLIBEXT=.dylib
363	DYNOBJEXT=.so
364	SHLIB_EXPORT_FILE_DEP=darwin.exports
365	LDCOMBINE='$(CC) -undefined error -dead_strip -dynamiclib -compatibility_version $(LIBMAJOR) -current_version $(LIBMAJOR).$(LIBMINOR) -install_name "$(KRB5_LIBDIR)/$(LIBPREFIX)$(LIBBASE)$(SHLIBVEXT)" -exported_symbols_list darwin.exports $(CFLAGS)'
366	# The -dylib_file option tells the linker where to find indirect dependent
367	# libraries, without adding them to the dependency list.  We need this because
368	# the direct dependent libraries contain the pathname where the indirect
369	# dependent libraries will be installed (but haven't been yet).
370	LDCOMBINE_TAIL=""
371	for lib in libkrb5support.1.1.dylib libkadm5srv.5.1.dylib libkdb5.4.0.dylib; do
372	    LDCOMBINE_TAIL="$LDCOMBINE_TAIL -dylib_file \"\$(KRB5_LIBDIR)/$lib\":\$(TOPLIBD)/$lib"
373	done
374	MAKE_DYNOBJ_COMMAND='$(CC) -bundle $(CFLAGS) $(LDFLAGS) -o $@ $$objlist $(DYNOBJ_EXPFLAGS) $(LDFLAGS) -exported_symbols_list darwin.exports'" ${LDCOMBINE_TAIL}"
375	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) -dynamic $(CFLAGS) $(LDFLAGS)'
376	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
377	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) -dynamic $(CXXFLAGS) $(LDFLAGS)'
378	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
379	RUN_ENV='DYLD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
380	RUN_VARS='DYLD_LIBRARY_PATH'
381	;;
382
383*-*-solaris*)
384	if test "$ac_cv_c_compiler_gnu" = yes; then
385		PICFLAGS=-fPIC
386		LDCOMBINE='$(CC) $(CFLAGS) -shared -h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'
387	else
388		PICFLAGS=-KPIC
389		# Solaris cc doesn't default to stuffing the SONAME field...
390		LDCOMBINE='$(CC) $(CFLAGS) -dy -G -z text -h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) $$initfini'
391		#
392		case $krb5_cv_host in
393		*-*-solaris2.[1-7] | *-*-solaris2.[1-7].*)
394		    # Did Solaris 7 and earlier have a linker option for this?
395		    ;;
396		*)
397		    INIT_FINI_PREP='initfini=; for f in . $(LIBINITFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-z,initarray=$${f}__auxinit"; fi; done; for f in . $(LIBFINIFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-z,finiarray=$$f"; fi; done'
398		    use_linker_init_option=yes
399		    use_linker_fini_option=yes
400		    ;;
401		esac
402	fi
403	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
404	SHLIBSEXT='.so.$(LIBMAJOR)'
405	SHLIBEXT=.so
406	SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'
407	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
408	PROFFLAGS=-pg
409	RPATH_FLAG=-R
410	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
411	CC_LINK_SHARED='$(PURE) $(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
412	CC_LINK_STATIC='$(PURE) $(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
413	CXX_LINK_SHARED='$(PURE) $(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
414	CXX_LINK_STATIC='$(PURE) $(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
415	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
416	RUN_VARS='LD_LIBRARY_PATH'
417	;;
418
419*-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
420	PICFLAGS=-fPIC
421	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
422	SHLIBSEXT='.so.$(LIBMAJOR)'
423	SHLIBEXT=.so
424	# Linux ld doesn't default to stuffing the SONAME field...
425	# Use objdump -x to examine the fields of the library
426	# UNDEF_CHECK is suppressed by --enable-asan
427	LDCOMBINE='$(CC) -shared -fPIC -Wl,-h,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) $(UNDEF_CHECK)'
428	UNDEF_CHECK='-Wl,--no-undefined'
429	# $(EXPORT_CHECK) runs export-check.pl when in maintainer mode.
430	LDCOMBINE_TAIL='-Wl,--version-script binutils.versions $(EXPORT_CHECK)'
431	SHLIB_EXPORT_FILE_DEP=binutils.versions
432	RPATH_FLAG='-Wl,--enable-new-dtags -Wl,-rpath -Wl,'
433	# For cases where we do have dependencies on other libraries
434	# built in this tree...
435	SHLIB_RPATH_FLAGS='$(RPATH_FLAG)$(SHLIB_RDIRS)'
436	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
437	PROFFLAGS=-pg
438	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'
439	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
440	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
441	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
442	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
443	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'
444	RUN_VARS='LD_LIBRARY_PATH'
445
446	## old version:
447	# Linux libc does weird stuff at shlib link time, must be
448	# explicitly listed here.  This also makes it get used even
449	# for the libraries marked as not having any dependencies; while
450	# that's not strictly correct, the resulting behavior -- not adding
451	# extra -R directories -- is still what we want.
452	#LDCOMBINE='ld -shared -h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'
453	#LDCOMBINE_TAIL="-lc"
454	#SHLIB_EXPFLAGS='-R$(SHLIB_RDIRS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
455
456	;;
457
458*-*-bsdi4*)
459	PICFLAGS=-fpic
460	SHLIBVEXT='.so.$(LIBMAJOR)'
461	SHLIBEXT=.so
462	LDCOMBINE='ld -Bshareable'
463	SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'
464	SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
465	PROG_RPATH_FLAGS='-Wl,-rpath,$(PROG_RPATH)'
466	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS)'
467	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH)'
468	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS)'
469	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH)'
470	RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/
471/:/g"`'
472	RUN_VARS='LD_LIBRARY_PATH'
473	PROFFLAGS=-pg
474	;;
475
476*-*-aix5*)
477	SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'
478	SHLIBEXT=.so
479	# AIX doesn't need separate PIC objects
480	SHOBJEXT=.o
481	SHLIB_EXPFLAGS='  $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
482	PROFFLAGS=-pg
483	if test "$ac_cv_c_compiler_gnu" = "yes" ; then
484	  wl_prefix=-Wl,
485	  RPATH_FLAG='-Wl,-blibpath:'
486	  LDCOMBINE='$(CC) -shared -v -o $@ $$objlist -nostartfiles -Xlinker -bgcbypass:1 -Xlinker -bfilelist -Xlinker -bM:SRE -Xlinker -bE:$(SHLIB_EXPORT_FILE) -Xlinker -bernotok -Xlinker -brtl $(SHLIB_EXPFLAGS) $(LDFLAGS) -lc $$initfini'
487	else
488	  wl_prefix=
489	  RPATH_FLAG=-blibpath:
490	  LDCOMBINE='/bin/ld -o $@ $$objlist -H512 -T512 -bnoentry -bgcbypass:1 -bnodelcsect -bfilelist -bM:SRE -bE:$(SHLIB_EXPORT_FILE) -bernotok -brtl $(SHLIB_EXPFLAGS) $(LDFLAGS) -lc $$initfini'
491	fi
492	# Assume initialization always delayed.
493	INIT_FINI_PREP="wl=${wl_prefix}; "'i=1; initfini=; for f in . $(LIBFINIFUNC); do if test $$f != .; then initfini="$$initfini $${wl}-binitfini::$$f:$$i"; else :; fi; i=`expr $$i + 1`; done'
494	use_linker_fini_option=yes
495	MAKE_SHLIB_COMMAND="${INIT_FINI_PREP} && ${LDCOMBINE}"
496	RPATH_TAIL=:/usr/lib:/lib
497	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH):'"$RPATH_TAIL"
498	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
499	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
500	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
501	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
502	# $(PROG_RPATH) is here to handle things like a shared tcl library
503	RUN_ENV='LIBPATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`:$(PROG_RPATH):/usr/lib:/usr/local/lib'
504	RUN_VARS='LIBPATH'
505	;;
506
507*-*-aix4.*)
508	SHLIBVEXT='.a.$(LIBMAJOR).$(LIBMINOR)'
509	SHLIBEXT=.a
510	# AIX doesn't need separate PIC objects
511	SHOBJEXT=.o
512	SHLIB_EXPFLAGS='  $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
513	PROFFLAGS=-pg
514	# Dynamically loaded object can have whatever suffix, but don't
515	# make archives like for shared libraries.
516	DYNOBJEXT=.so
517	#
518	if test "$ac_cv_c_compiler_gnu" = "yes" ; then
519	  wl_prefix=-Wl,
520	  RPATH_FLAG='-Wl,-blibpath:'
521	  LDCOMBINE='$(CC) -shared -v -o shr.o.$(LIBMAJOR).$(LIBMINOR) $$objlist -nostartfiles -Xlinker -bgcbypass:1 -Xlinker -bfilelist -Xlinker -bM:SRE -Xlinker -bE:$(SHLIB_EXPORT_FILE) -Xlinker -bernotok $(SHLIB_EXPFLAGS) $(LDFLAGS) -lc $$initfini'
522	  LDCOMBINE_DYN='$(CC) -shared -v -o $@ $$objlist -nostartfiles -Xlinker -bgcbypass:1 -Xlinker -bfilelist -Xlinker -bM:SRE -Xlinker -bE:$(SHLIB_EXPORT_FILE) -Xlinker -bernotok $(SHLIB_EXPFLAGS) $(LDFLAGS) -lc $$initfini'
523	else
524	  wl_prefix=
525	  RPATH_FLAG=-blibpath:
526	  LDCOMBINE='/bin/ld -o shr.o.$(LIBMAJOR).$(LIBMINOR) $$objlist -H512 -T512 -bnoentry -bgcbypass:1 -bnodelcsect -bfilelist -bM:SRE -bE:$(SHLIB_EXPORT_FILE) -bernotok $(SHLIB_EXPFLAGS) $(LDFLAGS) -lc $$initfini'
527	  LDCOMBINE_DYN='/bin/ld -o $@ $$objlist -H512 -T512 -bnoentry -bgcbypass:1 -bnodelcsect -bfilelist -bM:SRE -bE:$(SHLIB_EXPORT_FILE) -bernotok $(SHLIB_EXPFLAGS) $(LDFLAGS) -lc $$initfini'
528	fi
529	# Assume initialization always delayed.
530	INIT_FINI_PREP="wl=${wl_prefix}; "'i=1; initfini=; for f in . $(LIBFINIFUNC); do if test $$f != .; then initfini="$$initfini $${wl}-binitfini::$$f:$$i"; else :; fi; i=`expr $$i + 1`; done'
531	use_linker_fini_option=yes
532	MAKE_SHLIB_COMMAND="${INIT_FINI_PREP} && ${LDCOMBINE}"' && ar cq $@ shr.o.$(LIBMAJOR).$(LIBMINOR) && chmod +x $@ && rm -f shr.o.$(LIBMAJOR).$(LIBMINOR)'
533	MAKE_DYNOBJ_COMMAND="${INIT_FINI_PREP} && ${LDCOMBINE_DYN}"
534	RPATH_TAIL=:/usr/lib:/lib
535	PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH):'"$RPATH_TAIL"
536	CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'
537	CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
538	CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
539	CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
540	# $(PROG_RPATH) is here to handle things like a shared tcl library
541	RUN_ENV='LIBPATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`:$(PROG_RPATH):/usr/lib:/usr/local/lib'
542	RUN_VARS='LIBPATH'
543	;;
544esac
545
546if test "${MAKE_SHLIB_COMMAND}" = "x" ; then
547  if test "${INIT_FINI_PREP}" != ":"; then
548    MAKE_SHLIB_COMMAND="${INIT_FINI_PREP} && ${LDCOMBINE} -o \$@ \$\$objlist \$(SHLIB_EXPFLAGS) \$(LDFLAGS) ${LDCOMBINE_TAIL}"
549  else
550    MAKE_SHLIB_COMMAND="${LDCOMBINE} -o \$@ \$\$objlist \$(SHLIB_EXPFLAGS) \$(LDFLAGS) ${LDCOMBINE_TAIL}"
551  fi
552fi
553