* libtool.m4: Build standard shared libraries on AIX POWER

more like AIX does, with a shared object archived into lib<xxx>.a.
On AIX -bexpall flag does strange things... Don't use it.
Fix quotes around -berok flag.  Add support for AIX 5.
Add support for run time linking on AIX POWER. (should work
on AIX 4.2 and up).  Turn this feature on by adding -brtl flag
to LD_FLAGS.  Add support for AIX on IA64. Note: AIX on IA64
uses a SYSV type linker.  Add a comment telling what to do if the
TOC starts getting too large on AIX.
* NEWS: mention aix5 support.
This commit is contained in:
Dan McNichol 2001-04-19 01:13:13 +00:00 committed by Gary V. Vaughan
parent ff8e64ad84
commit d9f83c0668
3 changed files with 127 additions and 51 deletions

View File

@ -1,3 +1,16 @@
2001-04-19 Dan McNichol <mcnichol@austin.ibm.com>
* libtool.m4: Build standard shared libraries on AIX POWER
more like AIX does, with a shared object archived into lib<xxx>.a.
On AIX -bexpall flag does strange things... Don't use it.
Fix quotes around -berok flag. Add support for AIX 5.
Add support for run time linking on AIX POWER. (should work
on AIX 4.2 and up). Turn this feature on by adding -brtl flag
to LD_FLAGS. Add support for AIX on IA64. Note: AIX on IA64
uses a SYSV type linker. Add a comment telling what to do if the
TOC starts getting too large on AIX.
* NEWS: mention aix5 support.
2001-04-18 Alexandre Oliva <aoliva@redhat.com>
* TODO: Add -L- flag.

3
NEWS
View File

@ -1,5 +1,8 @@
NEWS - list of user-visible changes between releases of GNU Libtool
New in 1.4: 2001-04-??; CVS version 1.3e, Libtool team:
* Support for aix5*.
New in 1.3d: 2001-04-02; CVS version 1.3c, Libtool team:
* ltconfig is no more. Generation of libtool happens directly from
the configure file.

162
libtool.m4 vendored
View File

@ -847,9 +847,15 @@ AC_CACHE_VAL(lt_cv_prog_cc_pic,
else
# PORTME Check for PIC flags for the system compiler.
case $host_os in
aix3* | aix4*)
# All AIX code is PIC.
lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
aix3* | aix4* | aix5*)
# All AIX code is PIC.
if test "$host_cpu" = ia64; then
# AIX 5 now supports IA64 processor
lt_cv_prog_cc_static='-Bstatic'
lt_cv_prog_cc_wl='-Wl,'
else
lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
fi
;;
hpux9* | hpux10* | hpux11*)
@ -1192,8 +1198,9 @@ if test "$with_gnu_ld" = yes; then
# See if GNU ld supports shared libraries.
case $host_os in
aix3* | aix4*)
aix3* | aix4* | aix5*)
# On AIX, the GNU linker is very broken
# Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
ld_shlibs=no
cat <<EOF 1>&2
@ -1392,8 +1399,14 @@ else
fi
;;
aix4*)
hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
aix4* | aix5*)
# When large executables or shared objects are built, AIX ld can
# have problems creating the table of contents. If linking a library
# or program results in "error TOC overflow" add -mminimal-toc to
# CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
# enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
archive_cmds=''
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
collect2name=`${CC} -print-prog-name=collect2`
@ -1403,34 +1416,67 @@ else
# We have reworked collect2
hardcode_direct=yes
else
# We have old collect2
hardcode_direct=unsupported
# It fails to find uninstalled libraries when the uninstalled
# path is not listed in the libpath. Setting hardcode_minus_L
# to unsupported forces relinking
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
# We have old collect2
hardcode_direct=unsupported
# It fails to find uninstalled libraries when the uninstalled
# path is not listed in the libpath. Setting hardcode_minus_L
# to unsupported forces relinking
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
shared_flag='-shared'
else
shared_flag='${wl}-bM:SRE'
if test "$host_cpu" = ia64; then
shared_flag='-G'
else
shared_flag='${wl}-bM:SRE'
fi
hardcode_direct=yes
fi
allow_undefined_flag=' ${wl}-berok'
archive_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
case $host_os in [aix4.[01]|aix4.[01].*])
# According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
always_export_symbols=yes ;;
esac
# We don't want to build shared libraries on unknown CPU types.
case $host_cpu in
powerpc | rs6000) ;;
*) ld_shlibs=no ;;
esac
;;
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
exp_sym_flag='-Bexport'
no_entry_flag=""
else
# Test if we are trying to use run time linking, or normal AIX style linking.
# If -brtl is somewhere in LDFLAGS, we need to do run time linking.
aix_use_runtimelinking=no
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
aix_use_runtimelinking=yes
break
fi
done
exp_sym_flag='-bexport'
no_entry_flag='-bnoentry'
fi
# It seems that -bexpall can do strange things, so it is better to
# generate a list of symbols to export.
always_export_symbols=yes
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
allow_undefined_flag=' -Wl,-G'
archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
allow_undefined_flag="-znodefs"
archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
else
hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
# Warning - without using the other run time loading flags, -berok will
# link without error, but may produce a broken library.
allow_undefined_flag='${wl}-berok"
# This is a bit strange, but is similar to how AIX traditionally builds
# it's shared libraries.
archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
fi
fi
;;
amigaos*)
archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
@ -1777,31 +1823,45 @@ aix3*)
soname_spec='${libname}${release}.so$major'
;;
aix4*)
aix4* | aix5*)
version_type=linux
# AIX has no versioning support, so currently we can not hardcode correct
# soname into executable. Probably we can add versioning support to
# collect2, so additional links can be useful in future.
# We preserve .a as extension for shared libraries though AIX4.2
# and later linker supports .so
library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
shlibpath_var=LIBPATH
case $host_os in
[ aix4 | aix4.[01] | aix4.[01].*)]
if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
echo ' yes '
echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
:
if test "$host_cpu" = ia64; then
# AIX 5 supports IA64
library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
shlibpath_var=LD_LIBRARY_PATH
else
# With GCC up to 2.95.x, collect2 would create an import file
# for dependence libraries. The import file would start with
# the line `#! .'. This would cause the generated library to
# depend on `.', always an invalid library. This was fixed in
# development snapshots of GCC prior to 3.0.
case $host_os in
[ aix4 | aix4.[01] | aix4.[01].*)]
if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
echo ' yes '
echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
:
else
can_build_shared=no
fi
;;
esac
# AIX (on Power*) has no versioning support, so currently we can not hardcode correct
# soname into executable. Probably we can add versioning support to
# collect2, so additional links can be useful in future.
if test "$aix_use_runtimelinking" = yes; then
# If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
# lib<name>.a to let people know that these are not typical AIX shared libraries.
library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
else
# With GCC up to 2.95.x, collect2 would create an import file
# for dependence libraries. The import file would start with
# the line `#! .'. This would cause the generated library to
# depend on `.', always an invalid library. This was fixed in
# development snapshots of GCC prior to 3.0.
can_build_shared=no
# We preserve .a as extension for shared libraries through AIX4.2
# and later when we are not doing run time linking.
library_names_spec='${libname}${release}.a $libname.a'
soname_spec='${libname}${release}.so$major'
fi
;;
esac
shlibpath_var=LIBPATH
deplibs_check_method=pass_all
fi
;;
amigaos*)
@ -3052,7 +3112,7 @@ lt_cv_deplibs_check_method='unknown'
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
aix4*)
aix4* | aix5*)
lt_cv_deplibs_check_method=pass_all
;;