* doc/libtool.texi: fixed a typo

* libtoolize.in: add the libtool scripts to libltdl.tar.gz
* libtool.m4: don't AC_SUBST(USE_SYMBOL_UNDERSCORE),
  AC_CHECK_LIBM sets LIBM, AC_LIBLTDL_INSTALLABLE doesn't work
  when libltdl is already installed
* *demo/Makefile.am: use LIBM
* *demo/configure.in: AC_SUBST LIBM
* libltdl/configure.in: use ac_cv_sys_symbol_underscore instead of
  USE_SYMBOL_UNDERSCORE
* ltconfig.in: added link_all_deplibs variable
* doc/libtool.texi: document it
* ltmain.in: always search for libname.la - don't eval libname_spec,
  when linking libraries against static ones just print a warning
  and add them to dependency_libs, add -lc before deplibs,
  always link all dependencies of a static library or if
  link_all_deplibs is yes, hardcode library paths if
  hardcode_into_libs is no, don't link against dependency_libs
  that already are deplibs
This commit is contained in:
Thomas Tanner 1999-03-30 19:22:41 +00:00
parent a1cfb2f41e
commit 3e89f4c492
16 changed files with 177 additions and 83 deletions

View File

@ -1,3 +1,24 @@
1999-03-30 Thomas Tanner <tanner@gmx.de>
* doc/libtool.texi: fixed a typo
* libtoolize.in: add the libtool scripts to libltdl.tar.gz
* libtool.m4: don't AC_SUBST(USE_SYMBOL_UNDERSCORE),
AC_CHECK_LIBM sets LIBM, AC_LIBLTDL_INSTALLABLE doesn't work
when libltdl is already installed
* *demo/Makefile.am: use LIBM
* *demo/configure.in: AC_SUBST LIBM
* libltdl/configure.in: use ac_cv_sys_symbol_underscore instead of
USE_SYMBOL_UNDERSCORE
* ltconfig.in: added link_all_deplibs variable
* doc/libtool.texi: document it
* ltmain.in: always search for libname.la - don't eval libname_spec,
when linking libraries against static ones just print a warning
and add them to dependency_libs, add -lc before deplibs,
always link all dependencies of a static library or if
link_all_deplibs is yes, hardcode library paths if
hardcode_into_libs is no, don't link against dependency_libs
that already are deplibs
1999-03-30 Alexandre Oliva <oliva@dcc.unicamp.br>
* ltconfig.in (aix4*, collect2name): make sure collect2 exists

2
NEWS
View File

@ -3,7 +3,7 @@ NEWS - list of user-visible changes between releases of GNU Libtool
New in 1.3b: 1999-??-??; CVS version 1.3a, Libtool team:
* Complete inter-library dependencies support. It's now possible
to link libtool libraries against other libtool libraries.
* Already-installed libtool libraries will be found.
* Libtool is able to find already-installed libtool libraries.
* Support for linking DLLs on Win32
* New demos and tests
* Various bugfixes

View File

@ -7,6 +7,7 @@ EXTRA_DIST = acinclude.m4
noinst_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = foo.c
libfoo_la_LIBADD = $(LIBM)
noinst_HEADERS = foo.h

View File

@ -11,6 +11,7 @@ AC_SUBST(LIBTOOL_DEPS)
AC_CHECK_HEADERS(math.h)
AC_CHECK_LIBM
AC_SUBST(LIBM)
dnl Output the makefile
AC_OUTPUT(Makefile)

View File

@ -10,6 +10,7 @@ CLEANFILES = $(hardcode_tests)
# Build a libtool library, libhello.la for installation in libdir.
lib_LTLIBRARIES = libhello.la
libhello_la_SOURCES = hello.c foo.c
libhello_la_LIBADD = $(LIBM)
libhello_la_LDFLAGS = -version-info 3:12:1
include_HEADERS = foo.h
@ -60,7 +61,7 @@ libhell1_la_LIBADD = -L. -lhell0 # libtool rejects libhell0.la
libhell2_la_LIBADD = -L. -lhell0 # we have to use -L/-l. Why?
bin_PROGRAMS += hell0
hell0_SOURCES = main.c
hell0_LDADD = libhell1.la libhell2.la
hell0_LDADD = libhell1.la libhell2.la $(LIBM)
# Unfortunately, in order to test libtool thoroughly, we need access
# to its private directory.
@ -89,8 +90,8 @@ hc-direct: $(hell_OBJECTS) $(hell_DEPENDENCIES) $(libdir)/libhello.la
eval `egrep -e '^(hardcode_.*|wl)=' libtool`; \
libdir=$(libdir); \
flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \
echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib $(LIBS) $$flag || echo unsupported > $@"; \
eval "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib $(LIBS) $$flag || echo unsupported > $@"
echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib $(LIBS) $(LIBM) $$flag || echo unsupported > $@"; \
eval "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib $(LIBS) $(LIBM) $$flag || echo unsupported > $@"
hc-libflag: $(hell_OBJECTS) $(hell_DEPENDENCIES) $(libdir)/libhello.la
@eval `egrep -e '^(hardcode_.*|wl)=' libtool`; \
@ -100,8 +101,8 @@ hc-libflag: $(hell_OBJECTS) $(hell_DEPENDENCIES) $(libdir)/libhello.la
echo "echo unsupported > $@"; \
echo unsupported > $@ || status="$$?"; \
else \
echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L$(libdir) -lhello $(LIBS)"; \
$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L$(libdir) -lhello $(LIBS) || status="$$?"; \
echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L$(libdir) -lhello $(LIBS) $(LIBM)"; \
$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L$(libdir) -lhello $(LIBS) $(LIBM) || status="$$?"; \
fi; \
exit $$status
@ -111,16 +112,16 @@ hc-libpath: $(hell_OBJECTS) $(hell_DEPENDENCIES) $(libdir)/libhello.la
@eval `egrep -e '^(shlibpath_var|hardcode_.*|wl)=' libtool`; \
libdir=$(libdir); \
flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \
echo "$$shlibpath_var=./$(objdir) $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) $$flag || echo unsupported > $@"; \
eval "$$shlibpath_var=./$(objdir) $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) $$flag || echo unsupported > $@"
echo "$$shlibpath_var=./$(objdir) $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"; \
eval "$$shlibpath_var=./$(objdir) $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"
hc-minusL: $(hell_OBJECTS) $(hell_DEPENDENCIES)
@rm -f hc-minusL
@eval `egrep -e '^(hardcode_.*|wl)=' libtool`; \
libdir=$(libdir); \
flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \
echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./$(objdir) -lhello $(LIBS) $$flag || echo unsupported > $@"; \
eval "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./$(objdir) -lhello $(LIBS) $$flag || echo unsupported > $@"
echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./$(objdir) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"; \
eval "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./$(objdir) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"
$(OBJECTS): libtool
libtool: $(LIBTOOL_DEPS)

View File

@ -23,6 +23,7 @@ grep '^global_symbol_pipe=..*$' ./libtool >/dev/null])
AC_CHECK_HEADERS(string.h math.h)
AC_CHECK_LIBM
AC_SUBST(LIBM)
dnl Output the makefile
AC_OUTPUT(Makefile)

View File

@ -18,6 +18,7 @@ AC_SUBST(STATIC)
AC_CHECK_HEADERS(math.h)
AC_CHECK_LIBM
AC_SUBST(LIBM)
dnl Output the makefile
AC_OUTPUT(

View File

@ -4,4 +4,4 @@ INCLUDES = -I$(top_srcdir)
lib_LTLIBRARIES = libl4.la
libl4_la_SOURCES = l4.c l4.h
libl4_la_LIBADD = $(top_builddir)/l3/libl3.la
libl4_la_LIBADD = $(top_builddir)/l3/libl3.la $(LIBM)

View File

@ -2590,7 +2590,7 @@ implementation of @file{libltdl} services, it requires GNU DLD, or it
will only emulate dynamic linking with libtool's dlpreopening mechanism.
@noindent
libltdl supports currently the following dynamic linking mechanims:
libltdl supports currently the following dynamic linking mechanisms:
@itemize @bullet
@item
@ -3865,6 +3865,11 @@ the rest are symbolic links to the file. The name in the list is
the file name that the linker finds when given @samp{-l@var{name}}.
@end defvar
@defvar link_all_deplibs
Whether libtool must link a program against all its dependency libraries.
Set to @samp{yes} or @samp{no}. Default is @samp{no}.
@end defvar
@defvar link_static_flag
Linker flag (passed through the C compiler) used to prevent dynamic
linking.

View File

@ -137,7 +137,7 @@ if test "$test_dlerror" = yes; then
fi
AC_SYS_SYMBOL_UNDERSCORE
if test x"$USE_SYMBOL_UNDERSCORE" = xyes; then
if test x"$ac_cv_sys_symbol_underscore" = xyes; then
if test x"$ac_cv_func_dlopen" = xyes ||
test x"$ac_cv_lib_dl_dlopen" = xyes ; then
AC_CACHE_CHECK([whether we have to add an underscore for dlsym],

28
libtool.m4 vendored
View File

@ -563,23 +563,22 @@ fi
rm -rf conftest*
])
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
USE_SYMBOL_UNDERSCORE=${ac_cv_sys_symbol_underscore=no}
AC_SUBST(USE_SYMBOL_UNDERSCORE)dnl
])
# AC_CHECK_LIBM - check for math library
AC_DEFUN(AC_CHECK_LIBM,
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
case "$host" in
*-*-beos* | *-*-cygwin*)
# These system don't have libm
;;
*-ncr-sysv4.3*)
AC_CHECK_LIB(mw, _mwvalidcheckl)
AC_CHECK_LIB(m, cos)
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
;;
*)
AC_CHECK_LIB(m, cos)
AC_CHECK_LIB(m, cos, LIBM="-lm")
;;
esac
])
@ -611,15 +610,20 @@ AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
# appropriate in the Makefiles.
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [
AC_CHECK_LIB(ltdl, main, LIBLTDL="-lltdl", [
case "$enable_ltdl_install" in
no) AC_MSG_WARN([libltdl not installed, but installation disabled]) ;;
"") enable_ltdl_install=yes
ac_configure_args="$ac_configure_args --enable-ltdl-install" ;;
esac
AC_CHECK_LIB(ltdl, main,
[test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
[if test x"$enable_ltdl_install" = xno; then
AC_MSG_WARN([libltdl not installed, but installation disabled])
else
enable_ltdl_install=yes
fi
])
if test x"$enable_ltdl_install" != x"no"; then
if test x"$enable_ltdl_install" = x"yes"; then
ac_configure_args="$ac_configure_args --enable-ltdl-install"
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
else
ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
LIBLTDL="-lltdl"
fi
])

View File

@ -251,11 +251,31 @@ done
if test "x$ltdl_tar" = x"yes"; then
if test "x$dry_run" = x"yes"; then
echo "(cd $pkgdatadir > /dev/null && tar -cf - libltdl | gzip --best) > libltdl.tar.gz"
echo "tar -cf - libltdl | gzip --best > libltdl.tar.gz"
elif test -f libltdl.tar.gz && test -z "$force"; then
test -z "$automake" && echo "$progname: \`libltdl.tar.gz' exists: use \`--force' to overwrite" 1>&2
else
(cd $pkgdatadir > /dev/null && tar -cf - libltdl | gzip --best) > libltdl.tar.gz
test -d libltdl && ${rm}r libltdl
$mkdir libltdl
ltdlfiles=`cd $pkgdatadir && ls libltdl/*`
for file in $ltdlfiles; do
if $cp $pkgdatadir/$file $file; then :
else
echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2
status=1
break
fi
done
for file in $files; do
if $cp $pkgdatadir/$file libltdl/$file; then :
else
echo "$progname: cannot copy \`$pkgdatadir/$file' to \`libltdl/$file'" 1>&2
status=1
break
fi
done
tar -cf - libltdl | gzip --best > libltdl.tar.gz
${rm}r libltdl
fi
fi

View File

@ -1008,6 +1008,7 @@ hardcode_direct=no
hardcode_minus_L=no
hardcode_shlibpath_var=unsupported
runpath_var=
link_all_deplibs=no
always_export_symbols=no
export_symbols_cmds='$NM $libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
# include_expsyms should be a list of space-separated symbols to be *always*
@ -1318,6 +1319,7 @@ else
$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_shlibpath_var=no
link_all_deplibs=yes
;;
sunos4*)
@ -2687,6 +2689,9 @@ hardcode_minus_L=$hardcode_minus_L
# the resulting binary.
hardcode_shlibpath_var=$hardcode_shlibpath_var
# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=$link_all_deplibs
# Compile-time system search path for libraries
sys_lib_search_path_spec=$sys_lib_search_path_spec

143
ltmain.in
View File

@ -1574,11 +1574,10 @@ compiler."
;;
-l*)
name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
libname=`eval \\$echo \"$libname_spec\"`
found=no
for searchdir in $lib_search_path; do
# Search the libtool library
lib="$searchdir/$libname.la"
lib="$searchdir/lib${name}.la"
if test -f "$lib"; then
found=yes
break
@ -1825,21 +1824,15 @@ compiler."
fi
test "$add_name" = yes && deplibs="$deplibs -l$name"
elif test "$build_libtool_libs" = yes && test "$deplibs_check_method" != pass_all; then
# We're trying link a shared library against a static one
# but the system doesn't support it.
# Just print a warning and add the library to dependency_libs so
# that the program can be linked against the static library.
echo
echo "*** Warning: This library needs some functionality provided by $libname."
echo "*** I have the capability to make that library automatically link in when"
echo "*** you link to this library. But I can only do this if you have a"
echo "*** shared version of the library, which you do not appear to have."
continue
else
# Check for old archives if we don't build new libraries.
if test -n "$pic_flag" && test -z "$old_library"; then
$echo "$modename: cannot find static library for \`$lib'" 1>&2
exit 1
fi
convenience="$convenience $dir/$old_library"
old_convenience="$old_convenience $dir/$old_library"
deplibs="$deplibs $dir/$old_library"
fi
if test -n "$dependency_libs"; then
@ -2127,7 +2120,7 @@ EOF
;;
*)
# Add libc to deplibs on all other systems.
deplibs="$deplibs -lc"
deplibs="-lc $deplibs"
;;
esac
fi
@ -2421,9 +2414,10 @@ EOF
fi
fi
# Find libtool libraries and add their dependencies/rpaths
# Find libtool libraries and add their dependencies
old_deplibs="$deplibs"
deplibs=
absdeplibs=
newdependency_libs=
new_lib_search_path=
for deplib in $old_deplibs; do
@ -2431,16 +2425,16 @@ EOF
case "$deplib" in
-L*)
deplibs="$deplibs $deplib"
absdeplibs="$absdeplibs $deplib"
new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
continue
;;
-l*)
name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
libname=`eval \\$echo \"$libname_spec\"`
found=no
for searchdir in $lib_search_path; do
# Search the libtool library
lib="$searchdir/$libname.la"
lib="$searchdir/lib${name}.la"
if test -f "$lib"; then
found=yes
break
@ -2448,6 +2442,7 @@ EOF
done
if test "$found" != yes; then
deplibs="$deplibs $deplib"
absdeplibs="$absdeplibs $deplib"
continue
fi
;;
@ -2494,22 +2489,64 @@ EOF
fi
new_lib_search_path="$new_lib_search_path `$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`"
deplibs="$deplibs $lib"
for deplib in $dependency_libs; do
case "$deplib" in
-L*) new_lib_search_path="$new_lib_search_path `expr $deplib : '-L\(.*\)'`" ;;
*) ;;
esac
# Make sure dependency_libs contains only unique
# libraries and directories.
case "$newdependency_libs " in
*" $deplib "*) ;;
*) newdependency_libs="$newdependency_libs $deplib" ;;
-L*)
new_lib_search_path="$new_lib_search_path `$echo "X$deplib" | $Xsed -e 's/^-L//'`"
;;
esac
if test "$link_all_deplibs" = yes || \
test "$fast_install" = yes || \
test "$build_libtool_libs" = no || \
test -z "$library_names"; then
# Need to link against all dependency_libs
case "$absdeplibs " in
*" $deplib "*) ;;
*)
deplibs="$deplibs $deplib"
absdeplibs="$absdeplibs $deplib"
;;
esac
elif test "$hardcode_into_libs" = no; then
# Need to hardcode shared library paths
# or/and link against static libraries
case "$newdependency_libs " in
*" $deplib "*) ;;
*) newdependency_libs="$newdependency_libs $deplib" ;;
esac
fi
done
ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
test "X$ladir" = "X$lib" && ladir="."
# We need an absolute path.
case "$ladir" in
/* | [A-Za-z]:[/\\]*) ;;
*)
abs_ladir=`cd "$ladir" && pwd`
if test -z "$abs_ladir"; then
$echo "$modename: cannot determine absolute directory name of \`$ladir'" 1>&2
exit 1
fi
ladir="$abs_ladir"
;;
esac
laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
deplibs="$deplibs $lib"
absdeplibs="$absdeplibs $ladir/$laname"
done
# Eliminate all dependency_libs that are already contained in deplibs
dependency_libs=
for deplib in $newdependency_libs; do
case "$deplibs " in
*" $deplib "*) ;;
*) dependency_libs="$dependency_libs $deplib" ;;
esac
done
dependency_libs="$newdependency_libs"
# Make sure lib_search_path contains only unique directories.
lib_search_path=
@ -2523,25 +2560,14 @@ EOF
# Find libtool libraries and add their directories
alldeplibs=no
linkalldeplibs=no
if test "$fast_install" = yes || test "$build_libtool_libs" = no || \
test "$deplibs_check_method" = none; then
linkalldeplibs=yes
fi
link_against_libtool_libs=
for deplib in $deplibs @DEPLIBS@ $dependency_libs; do
lib=
case "$deplib" in
-L*)
case "$compile_command " in
*" $deplib "*) ;;
*) compile_command="$compile_command $deplib";;
esac
case "$finalize_command " in
*" $deplib "*) ;;
*) finalize_command="$finalize_command $deplib";;
esac
compile_command="$compile_command $deplib"
finalize_command="$finalize_command $deplib"
continue
;;
-R*)
@ -2554,19 +2580,15 @@ EOF
continue
;;
@DEPLIBS@)
if test "$hardcode_into_libs" = yes; then
break
fi
alldeplibs=yes
continue
;;
-l*)
name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
libname=`eval \\$echo \"$libname_spec\"`
found=no
for searchdir in $lib_search_path; do
# Search the libtool library
lib="$searchdir/$libname.la"
lib="$searchdir/lib${name}.la"
if test -f "$lib"; then
found=yes
break
@ -2652,7 +2674,22 @@ EOF
fi
name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
if test "$build_libtool_libs" = yes && test -n "$library_names"; then
if test -z "$libdir"; then
# It is a libtool convenience library, so add in its objects.
convenience="$convenience $dir/$old_library"
old_convenience="$old_convenience $dir/$old_library"
compile_command="$compile_command $dir/$old_library"
finalize_command="$finalize_command $dir/$old_library"
continue
fi
hardcode=yes
test "$hardcode_into_libs" = yes && test "$alldeplibs" = yes && hardcode=no
if test "$hardcode" = yes && \
test "$build_libtool_libs" = yes && \
test -n "$library_names"; then
# We need to hardcode the library path
if test -n "$shlibpath_var"; then
# Make sure the rpath contains only unique directories.
case "$temp_rpath " in
@ -2686,19 +2723,13 @@ EOF
esac
fi
if test "$alldeplibs" = yes && test "$linkalldeplibs" = no; then
if test "$alldeplibs" = yes && \
test "$build_libtool_libs" = yes && \
test -n "$library_names"; then
# Do we only need to link against static libraries?
continue
fi
if test -z "$libdir"; then
# It is a libtool convenience library, so add in its objects.
convenience="$convenience $dir/$old_library"
old_convenience="$old_convenience $dir/$old_library"
compile_command="$compile_command $dir/$old_library"
finalize_command="$finalize_command $dir/$old_library"
continue
fi
if test "$build_libtool_libs" = yes && test -n "$library_names"; then
link_against_libtool_libs="$link_against_libtool_libs $lib"

View File

@ -9,9 +9,11 @@ EXTRA_DIST = acinclude.m4
lib_LTLIBRARIES = foo1.la libfoo2.la
foo1_la_SOURCES = foo1.c
foo1_la_LIBADD = $(LIBM)
foo1_la_LDFLAGS = -module -avoid-version
libfoo2_la_SOURCES = foo2.c
libfoo2_la_LIBADD = $(LIBM)
libfoo2_la_LDFLAGS = -module
noinst_HEADERS = foo.h

View File

@ -27,6 +27,7 @@ AC_SUBST(STATIC)
AC_CHECK_HEADERS(math.h)
AC_CHECK_LIBM
AC_SUBST(LIBM)
dnl Output the makefile
AC_OUTPUT(Makefile)