+2005-01-10 Peter O'Gorman <peter@pogma.com>
+
+ * config/ltmain.m4sh (func_mode_link): Fix
+ inherited_linker_flags so it puts it on the link line when
+ linking shared libraries as well as when linking executables.
+ * tests/inherited_flags.at: test inherited_linker_flags.
+ * tests/Makefile.am: Add test.
+ * tests/testsuite.at: Add test.
+ Reported by: Albert Chin-A-Young <china@thewrittenword.com>
+
2005-01-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* tests/sh.test: After `set dummy [...]', check for `shift'
dllsearchpath=
lib_search_path=`pwd`
inst_prefix_dir=
+ new_inherited_linker_flags=
avoid_version=no
dlfiles=
case $pass in
dlopen) libs="$dlfiles" ;;
dlpreopen) libs="$dlprefiles" ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs $inherited_linker_flags" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
esac
fi
if test "$linkmode,$pass" = "lib,dlpreopen"; then
else
deplibs="$deplib $deplibs"
if test "$linkmode" = lib ; then
- case "$inherited_linker_flags " in
+ case "$new_inherited_linker_flags " in
*" $deplib "*) ;;
- * ) inherited_linker_flags="$inherited_linker_flags $deplib" ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
esac
fi
fi
else
deplibs="$deplib $deplibs"
if test "$linkmode" = lib ; then
- case "$inherited_linker_flags " in
+ case "$new_inherited_linker_flags " in
*" $deplib "*) ;;
- * ) inherited_linker_flags="$inherited_linker_flags $deplib" ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
esac
fi
fi
*-*-darwin*)
# Convert "-framework foo" to "foo.ltframework"
if test -n "$inherited_linker_flags"; then
- inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([[^ $]]*\)/\1.ltframework/g'`
+ tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([[^ $]]*\)/\1.ltframework/g'`
+ new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flags"
fi
dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([[^ $]]*\).ltframework% -framework \1%g'`
;;
esac
-
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $inherited_linker_flags"
+ fi
if test "$linkmode,$pass" = "lib,link" ||
test "$linkmode,$pass" = "prog,scan" ||
{ test "$linkmode" != prog && test "$linkmode" != lib; }; then
if test "$link_all_deplibs" != no; then
# Add the search paths of all dependency libraries
- for deplib in $dependency_libs $inherited_linker_flags; do
+ for deplib in $dependency_libs; do
case $deplib in
-L*) path="$deplib" ;;
*.la)
case $host in
*-*-darwin*)
newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([[^ $]]*\).ltframework% -framework \1%g'`
- inherited_linker_flags=`$ECHO "X $inherited_linker_flags" | $Xsed -e 's% \([[^ $]]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([[^ $]]*\).ltframework% -framework \1%g'`
deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([[^ $]]*\).ltframework% -framework \1%g'`
;;
esac
old_library='$old_library'
# Linker flags that can not go in dependency_libs.
-inherited_linker_flags='$inherited_linker_flags'
+inherited_linker_flags='$new_inherited_linker_flags'
# Libraries that this one depends upon.
dependency_libs='$dependency_libs'
TESTSUITE = testsuite
TESTSUITE_AT = testsuite.at \
am-subdir.at \
- functests.at
+ functests.at \
+ inherited_flags.at
EXTRA_DIST = $(TESTSUITE) $(TESTSUITE_AT) package.m4
--- /dev/null
+# Hand crafted tests for GNU Libtool. -*- Autotest -*-
+# Copyright 2004 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+
+AT_SETUP([inherited_linker_flags])
+
+: ${LIBTOOL=$abs_top_builddir/libtool}
+
+AT_DATA([foo.c],
+[
+int foo() { return 1;}
+])
+
+AT_DATA([bar.c],
+[
+int bar() { return 1;}
+])
+
+AT_DATA([baz.c],
+[
+int baz() { return 1;}
+])
+
+AT_DATA([main.c],
+[
+int main() { return 0;}
+])
+
+eval `$LIBTOOL --config | grep ^CC`
+
+${LIBTOOL} --mode=compile --tag=CC $CC -c -o foo.lo foo.c
+${LIBTOOL} --mode=compile --tag=CC $CC -c -o bar.lo bar.c
+${LIBTOOL} --mode=compile --tag=CC $CC -c -o baz.lo baz.c
+${LIBTOOL} --mode=compile --tag=CC $CC -c -o main.lo main.c
+${LIBTOOL} --mode=link --tag=CC $CC -o libfoo.la foo.lo -rpath /usr/local/lib
+${LIBTOOL} --mode=link --tag=CC $CC -o libbar.la bar.lo -rpath /usr/local/lib
+
+
+mv libfoo.la libfoo.la.bak
+sed -e 's/^inherited_linker_flags.*/inherited_linker_flags=-llt_inlikely_existing_lib/g' < libfoo.la.bak > libfoo.la
+rm libfoo.la.bak
+
+mv libbar.la libbar.la.bak
+sed -e 's/^inherited_linker_flags.*/inherited_linker_flags=-llt_unlikely_existing_lib/g' < libbar.la.bak > libbar.la
+rm libbar.la.bak
+
+AT_CHECK([${LIBTOOL} --mode=link --tag=CC $CC -o libbaz.la baz.lo -rpath /usr/local/lib ./libfoo.la ./libbar.la | grep 'llt_[[ui]]nlikely_existing_lib.*llt_[[ui]]nlikely_existing_lib'],[0],[ignore],[ignore])
+AT_CHECK([${LIBTOOL} --mode=link --tag=CC $CC -o main main.lo -rpath /usr/local/lib ./libfoo.la ./libbar.la | grep 'llt_[[ui]]nlikely_existing_lib.*llt_[[ui]]nlikely_existing_lib'],[0],[ignore],[ignore])
+
+AT_CLEANUP
# Torturing subdir-objects builds
m4_include([am-subdir.at])
+# Testing func_extract_archives
m4_include([functests.at])
+# Test that inherited_linker_flags in the .la actually gets used.
+m4_include([inherited_flags.at])