Path: blob/main/crypto/krb5/src/config/shlib.conf
106795 views
# This shell script fragment should set a bunch of variables:1#2# CC_LINK_STATIC: How to link a program if we're only building static3# libraries for krb5 (but may use other shared libs, and there may4# be a shared krb5 lib already installed that we shouldn't use).5# CC_LINK_SHARED: How to link a program if we're building shared6# libraries.7# CXX_LINK_STATIC, CXX_LINK_SHARED: Variants for C++.8# STLIBEXT: Static library extension.9# SHLIBEXT: Shared library extension.10# SHLIBVEXT: Shared library extension, with major version.11# SHLIBSEXT: Shared library extension, with full version.12# (... finish documenting these ...)1314#15# Set up some defaults.16#17STLIBEXT=.a18# Default to being unable to build shared libraries.19SHLIBEXT=.so-nobuild20SHLIBVEXT=.so.v-nobuild21SHLIBSEXT=.so.s-nobuild22# Most systems support profiled libraries.23PFLIBEXT=_p.a24# Install libraries executable. Some systems (e.g., RPM-based ones) require25# this for package dependency generation, while others are ambivalent or will26# strip it during packaging.27INSTALL_SHLIB='$(INSTALL)'28# Most systems use the same objects for shared libraries and dynamically29# loadable objects.30DYNOBJEXT='$(SHLIBEXT)'31MAKE_DYNOBJ_COMMAND='$(MAKE_SHLIB_COMMAND)'32DYNOBJ_EXPDEPS='$(SHLIB_EXPDEPS)'33DYNOBJ_EXPFLAGS='$(SHLIB_EXPFLAGS)'34# On some platforms we will instruct the linker to run named functions35# (specified by LIBINITFUNC and LIBFINIFUNC in each library's Makefile.in) as36# initializers or finalizers.37use_linker_init_option=no38use_linker_fini_option=no39# Where possible we will prevent unloading of the libraries we build, in which40# case we can skip running finalizers. Do not set use_linker_fini_option if41# setting lib_unload_prevented.42lib_unload_prevented=no4344STOBJEXT=.o45SHOBJEXT=.so46PFOBJEXT=.po47# Default for systems w/o shared libraries48CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'49CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'50#51SHLIB_EXPORT_FILE_DEP='$(SHLIB_EXPORT_FILE)'52# This will do for most platforms, and we'll substitute for53# LDCOMBINE, SHLIB_EXPFLAGS, and LDCOMBINE_TAIL below.54MAKE_SHLIB_COMMAND=x55INIT_FINI_PREP=:5657# Default to static or shared libraries?58default_static=no59default_shared=yes6061# Set up architecture-specific variables.62case $krb5_cv_host in63# Note: "-Wl,+s" when building executables enables the use of the64# SHLIB_PATH environment variable for finding shared libraries65# in non-standard directories. If a non-standard search-path for66# shared libraries is compiled into the executable (using67# -Wl,+b,$KRB5_SHLIBDIR), then the order of "-Wl,+b,..." and "-Wl,+s"68# on the commandline of the linker will determine which path69# (compiled-in or SHLIB_PATH) will be searched first.70#71# +I initproc routine gets called at load and unload time for72# shl_load calls, but appears to never be called for link-time73# specified libraries.74# +e sym exports symbol and supposedly prevents other symbols75# from being exported, according to the man page, but the76# latter bit doesn't actually seem to work77# -O +dpv should display any routines eliminated as unused, but -b78# apparently turns that off79*-*-hpux*)80case $host_cpu in81hppa*)82SHLIBEXT=.sl83;;84ia64*)85SHLIBEXT=.so86;;87esac88SHLIBVEXT='.$(LIBMAJOR).$(LIBMINOR)'89SHLIBSEXT='.$(LIBMAJOR)'90RPATH_FLAG='-Wl,+b,'91if test "$ac_cv_c_compiler_gnu" = yes; then92PICFLAGS=-fPIC93SHLIB_RPATH_FLAGS='-Wl,+b,$(SHLIB_RDIRS)'94SHLIB_EXPFLAGS='-Wl,+s $(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'95LDCOMBINE='gcc -fPIC -shared -Wl,+h,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) -Wl,-c,hpux.exports'96else97PICFLAGS=+z98SHLIB_RPATH_FLAGS='+b $(SHLIB_RDIRS)'99SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'100LDCOMBINE='ld -b +h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) -c hpux.exports'101fi102MAKE_SHLIB_COMMAND="${LDCOMBINE} -o \$@ \$\$objlist \$(LDFLAGS) \$(SHLIB_EXPFLAGS) ${LDCOMBINE_TAIL}"103PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'104CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'105CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'106CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'107CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'108RUN_ENV='SHLIB_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'109RUN_VARS='SHLIB_PATH'110SHLIB_EXPORT_FILE_DEP=hpux.exports111# Do *not* set use_linker_init_option=yes here, because in the112# case where the library is specified at program link time, the113# initialization function appears not to get called, only for114# shl_load. But for finalization functions, the shl_load case115# is the one we care about.116#117# Not setting use_linker_init_option here should cause compilation118# failures if the user tries to disable delayed initialization.119use_linker_fini_option=yes120;;121122mips-*-netbsd*)123PICFLAGS=-fPIC124SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'125SHLIBSEXT='.so.$(LIBMAJOR)'126SHLIBEXT=.so127LDCOMBINE='ld -shared -soname $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) -z nodelete'128SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'129SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'130RPATH_FLAG='-Wl,-rpath -Wl,'131PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'132CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'133CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'134CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'135CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'136RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'137RUN_VARS='LD_LIBRARY_PATH'138PROFFLAGS=-pg139lib_unload_prevented=yes140;;141142*-*-netbsd*)143PICFLAGS=-fPIC144SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'145SHLIBEXT=.so146LDCOMBINE='$(CC) -shared -Wl,-z,nodelete'147SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'148SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'149RPATH_FLAG=-R150PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'151CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'152CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'153CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'154CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'155RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'156RUN_VARS='LD_LIBRARY_PATH'157PROFFLAGS=-pg158lib_unload_prevented=yes159;;160161*-*-freebsd*)162case $krb5_cv_host in163sparc64-*)164PICFLAGS=-fPIC165;;166*)167PICFLAGS=-fpic168;;169esac170SHLIBVEXT='.so.$(LIBMAJOR)'171RPATH_FLAG='-Wl,--enable-new-dtags -Wl,-rpath -Wl,'172PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'173CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'174CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'175SHLIBEXT=.so176LDCOMBINE='ld -Bshareable -z nodelete'177SHLIB_RPATH_FLAGS='--enable-new-dtags -rpath $(SHLIB_RDIRS)'178SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'179CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'180CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'181RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'182RUN_VARS='LD_LIBRARY_PATH'183PROFFLAGS=-pg184lib_unload_prevented=yes185;;186187*-*-openbsd*)188PICFLAGS=-fpic189SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'190SHLIBEXT=.so191LDCOMBINE='ld -Bshareable -z nodelete'192SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'193SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'194RPATH_FLAG=-R195PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'196CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'197CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'198CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'199CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'200RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'201RUN_VARS='LD_LIBRARY_PATH'202PROFFLAGS=-pg203lib_unload_prevented=yes204;;205206*-*-darwin* | *-*-rhapsody*)207SHLIBVEXT='.$(LIBMAJOR).$(LIBMINOR).dylib'208SHLIBSEXT='.$(LIBMAJOR).dylib'209SHLIB_EXPFLAGS='$(SHLIB_DIRS) $(SHLIB_EXPLIBS)'210SHLIBEXT=.dylib211DYNOBJEXT=.so212SHLIB_EXPORT_FILE_DEP=darwin.exports213LDCOMBINE='$(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)'214# The -dylib_file option tells the linker where to find indirect dependent215# libraries, without adding them to the dependency list. We need this because216# the direct dependent libraries contain the pathname where the indirect217# dependent libraries will be installed (but haven't been yet).218LDCOMBINE_TAIL=""219for lib in libkrb5support.1.1.dylib libkadm5srv.5.1.dylib libkdb5.4.0.dylib; do220LDCOMBINE_TAIL="$LDCOMBINE_TAIL -dylib_file \"\$(KRB5_LIBDIR)/$lib\":\$(TOPLIBD)/$lib"221done222MAKE_DYNOBJ_COMMAND='$(CC) -bundle $(CFLAGS) $(LDFLAGS) -o $@ $$objlist $(DYNOBJ_EXPFLAGS) $(LDFLAGS) -exported_symbols_list darwin.exports'" ${LDCOMBINE_TAIL}"223CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) -dynamic $(CFLAGS) $(LDFLAGS)'224CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'225CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) -dynamic $(CXXFLAGS) $(LDFLAGS)'226CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'227RUN_ENV='DYLD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'228RUN_VARS='DYLD_LIBRARY_PATH'229;;230231*-*-solaris*)232if test "$ac_cv_c_compiler_gnu" = yes; then233PICFLAGS=-fPIC234LDCOMBINE='$(CC) $(CFLAGS) -shared -Wl,-z,nodelete -h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'235else236PICFLAGS=-KPIC237# Solaris cc doesn't default to stuffing the SONAME field...238LDCOMBINE='$(CC) $(CFLAGS) -dy -G -z text -z nodelete -h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) $$initfini'239#240case $krb5_cv_host in241*-*-solaris2.[1-7] | *-*-solaris2.[1-7].*)242# Did Solaris 7 and earlier have a linker option for this?243;;244*)245INIT_FINI_PREP='initfini=; for f in . $(LIBINITFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-z,initarray=$${f}__auxinit"; fi; done;'246use_linker_init_option=yes247;;248esac249fi250SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'251SHLIBSEXT='.so.$(LIBMAJOR)'252SHLIBEXT=.so253SHLIB_RPATH_FLAGS='-R$(SHLIB_RDIRS)'254SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'255PROFFLAGS=-pg256RPATH_FLAG=-R257PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'258CC_LINK_SHARED='$(PURE) $(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'259CC_LINK_STATIC='$(PURE) $(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'260CXX_LINK_SHARED='$(PURE) $(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'261CXX_LINK_STATIC='$(PURE) $(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'262RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'263RUN_VARS='LD_LIBRARY_PATH'264lib_unload_prevented=yes265;;266267*-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)268PICFLAGS=-fPIC269SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'270SHLIBSEXT='.so.$(LIBMAJOR)'271SHLIBEXT=.so272# Linux ld doesn't default to stuffing the SONAME field...273# Use objdump -x to examine the fields of the library274# UNDEF_CHECK is suppressed by --enable-asan275LDCOMBINE='$(CC) -shared -fPIC -Wl,-z,nodelete -Wl,-h,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) $(UNDEF_CHECK)'276UNDEF_CHECK='-Wl,--no-undefined'277# $(EXPORT_CHECK) runs export-check.pl when in maintainer mode.278LDCOMBINE_TAIL='-Wl,--version-script binutils.versions $(EXPORT_CHECK)'279SHLIB_EXPORT_FILE_DEP=binutils.versions280RPATH_FLAG='-Wl,--enable-new-dtags -Wl,-rpath -Wl,'281# For cases where we do have dependencies on other libraries282# built in this tree...283SHLIB_RPATH_FLAGS='$(RPATH_FLAG)$(SHLIB_RDIRS)'284SHLIB_EXPFLAGS='$(SHLIB_RPATH_FLAGS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'285PROFFLAGS=-pg286PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH)'287CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'288CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'289CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'290CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'291RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`'292RUN_VARS='LD_LIBRARY_PATH'293lib_unload_prevented=yes294295## old version:296# Linux libc does weird stuff at shlib link time, must be297# explicitly listed here. This also makes it get used even298# for the libraries marked as not having any dependencies; while299# that's not strictly correct, the resulting behavior -- not adding300# extra -R directories -- is still what we want.301#LDCOMBINE='ld -shared -h $(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT)'302#LDCOMBINE_TAIL="-lc"303#SHLIB_EXPFLAGS='-R$(SHLIB_RDIRS) $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'304305;;306307*-*-aix*)308SHLIBVEXT='.so.$(LIBMAJOR).$(LIBMINOR)'309SHLIBEXT=.so310# AIX doesn't need separate PIC objects311SHOBJEXT=.o312SHLIB_EXPFLAGS=' $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'313PROFFLAGS=-pg314if test "$ac_cv_c_compiler_gnu" = "yes" ; then315wl_prefix=-Wl,316RPATH_FLAG='-Wl,-blibpath:'317LDCOMBINE='$(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'318else319wl_prefix=320RPATH_FLAG=-blibpath:321LDCOMBINE='/bin/ld -o $@ $$objlist -H512 -T512 -bnoentry -bgcbypass:1 -bnodelcsect -bfilelist -bM:SRE -bE:$(SHLIB_EXPORT_FILE) -bernotok -brtl $(SHLIB_EXPFLAGS) $(LDFLAGS) -lc $$initfini'322fi323# Assume initialization always delayed.324INIT_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'325use_linker_fini_option=yes326MAKE_SHLIB_COMMAND="${INIT_FINI_PREP} && ${LDCOMBINE}"327RPATH_TAIL=:/usr/lib:/lib328PROG_RPATH_FLAGS='$(RPATH_FLAG)$(PROG_RPATH):'"$RPATH_TAIL"329CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CFLAGS) $(LDFLAGS)'330CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'331CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'332CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'333# $(PROG_RPATH) is here to handle things like a shared tcl library334RUN_ENV='LIBPATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`:$(PROG_RPATH):/usr/lib:/usr/local/lib'335RUN_VARS='LIBPATH'336;;337esac338339if test "${MAKE_SHLIB_COMMAND}" = "x" ; then340if test "${INIT_FINI_PREP}" != ":"; then341MAKE_SHLIB_COMMAND="${INIT_FINI_PREP} && ${LDCOMBINE} -o \$@ \$\$objlist \$(SHLIB_EXPFLAGS) \$(LDFLAGS) ${LDCOMBINE_TAIL}"342else343MAKE_SHLIB_COMMAND="${LDCOMBINE} -o \$@ \$\$objlist \$(SHLIB_EXPFLAGS) \$(LDFLAGS) ${LDCOMBINE_TAIL}"344fi345fi346347348