On 14-Feb-2000 Stephan Kulow wrote:
> Yes. I cleaned up KDE's situation a bit by now in removing LDFLAGS
> that weren't strictly necessary but it's still a pain. I think, the
> ILD should
> 1) remove doubled -L calls (this should be quite simple as done with
> the usual config.cache way)
OK
> 2) remove doubled base libraries to libraries. As this has to be done
> from the end to the begining, it has to be quite clever and may add
> some not so nice overhead.
I'm working on a fix.
My first experimental patch (an ugly hack :( is attached.
It's doesn't support the -la -lb -la case yet.
Thomas Tanner -------------------------
email: tanner@(ffii.org|gnu.org|gmx.de)
web: http://home.pages.de/~tanner/
UMI: http://umi.ffii.org/
diff -ruNd -X exclude libtool/ltmain.in new/ltmain.in
--- libtool/ltmain.in Tue Feb 1 17:44:51 2000
+++ new/ltmain.in Fri Feb 18 00:44:19 2000
@@ -1305,6 +1305,8 @@
done
;;
prog)
+ compile_deplibs=
+ finalize_deplibs=
alldeplibs=no
newdlfiles=
newdlprefiles=
@@ -1342,11 +1344,11 @@
done
if test "$found" != yes; then
if test "$linkmode,$pass" = "prog,link"; then
- compile_command="$compile_command $deplib"
- finalize_command="$finalize_command $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
else
- deplibs="$deplibs $deplib"
- test $linkmode = lib && newdependency_libs="$newdependency_libs $deplib"
+ deplibs="$deplib $deplibs"
+ test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
fi
continue
fi
@@ -1354,22 +1356,17 @@
-L*)
case $linkmode in
lib)
- case "$deplibs " in
- *" $deplib "*) ;;
- *)
- deplibs="$deplibs $deplib"
- newdependency_libs="$newdependency_libs $deplib"
- new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed -e
's/^-L//'`
- ;;
- esac
+ deplibs="$deplib $deplibs"
+ newdependency_libs="$deplib $newdependency_libs"
+ new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed -e 's
/^-L//'`
;;
prog)
if test $pass = scan; then
- deplibs="$deplibs $deplib"
+ deplibs="$deplib $deplibs"
new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed -e
's/^-L//'`
else
- compile_command="$compile_command $deplib"
- finalize_command="$finalize_command $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
fi
;;
*)
@@ -1403,16 +1400,16 @@
echo
echo "*** Warning: Linking the shared library $output against the"
echo "*** static library $deplib is not portable!"
- deplibs="$deplibs $deplib"
+ deplibs="$deplib $deplibs"
fi
continue
;;
prog)
if test $pass = scan; then
- deplibs="$deplibs $deplib"
+ deplibs="$deplib $deplibs"
else
- compile_command="$compile_command $deplib"
- finalize_command="$finalize_command $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
fi
continue
;;
@@ -1545,7 +1542,7 @@
if test $linkmode = prog && test $pass != link; then
new_lib_search_path="$new_lib_search_path $ladir"
- deplibs="$deplibs $lib"
+ deplibs="$lib $deplibs"
linkalldeplibs=no
if test "$link_all_deplibs" != no || test "$fast_install" != no || \
@@ -1554,7 +1551,7 @@
else
# Need to hardcode shared library paths
# or/and link against static libraries
- newdependency_libs="$newdependency_libs $dependeny_libs"
+ newdependency_libs="$dependeny_libs $newdependency_libs"
fi
for deplib in $dependency_libs; do
@@ -1562,7 +1559,7 @@
-L*) new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed
-e 's/^-L//'`;; ### testsuite: skip nested quoting test
esac
# Need to link against all dependency_libs?
- test $linkalldeplibs = yes && deplibs="$deplibs $deplib"
+ test $linkalldeplibs = yes && deplibs="$deplib $deplibs"
done
continue
fi
@@ -1572,11 +1569,11 @@
convenience="$convenience $dir/$old_library"
old_convenience="$old_convenience $dir/$old_library"
if test $linkmode = lib; then
- deplibs="$deplibs $dir/$old_library"
- newdependency_libs="$newdependency_libs $dependency_libs"
+ deplibs="$dir/$old_library $deplibs"
+ newdependency_libs="$dependency_libs $newdependency_libs"
elif test "$linkmode,$pass" = "prog,link"; then
- compile_command="$compile_command $dir/$old_library"
- finalize_command="$finalize_command $dir/$old_library"
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
fi
continue
fi
@@ -1754,28 +1751,18 @@
esac
fi
if test $linkmode = prog; then
- if test -n "$add_dir"; then
- case "$compile_command " in
- *" $add_dir "*) ;;
- *) compile_command="$compile_command $add_dir" ;;
- esac
- fi
- test -n "$add" && compile_command="$compile_command $add"
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
else
- if test -n "$add_dir"; then
- case "$deplibs " in
- *" $add_dir "*) ;;
- *) deplibs="$deplibs $add_dir" ;;
- esac
- fi
- test -n "$add" && deplibs="$deplibs $add"
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
if test "$hardcode_direct" != yes && \
test "$hardcode_minus_L" != yes && \
test "$hardcode_shlibpath_var" = yes; then
- case ":$finalize_shlibpath:" in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
+ case ":$finalize_shlibpath:" in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
fi
fi
fi
@@ -1803,21 +1790,11 @@
fi
if test $linkmode = prog; then
- if test -n "$add_dir"; then
- case "$finalize_command " in
- *" $add_dir "*) ;;
- *) finalize_command="$finalize_command $add_dir" ;;
- esac
- fi
- test -n "$add" && finalize_command="$finalize_command $add"
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
else
- if test -n "$add_dir"; then
- case "$deplibs " in
- *" $add_dir "*) ;;
- *) deplibs="$deplibs $add_dir" ;;
- esac
- fi
- test -n "$add" && deplibs="$deplibs $add"
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add deplibs"
fi
fi
elif test $linkmode = prog; then
@@ -1826,19 +1803,11 @@
# shared platforms.
if test "$hardcode_direct" != unsupported; then
test -n "$old_library" && linklib="$old_library"
- compile_command="$compile_command $dir/$linklib"
- finalize_command="$finalize_command $dir/$linklib"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
else
- case "$compile_command " in
- *" -L$dir "*) ;;
- *) compile_command="$compile_command -L$dir";;
- esac
- compile_command="$compile_command -l$name"
- case "$finalize_command " in
- *" -L$dir "*) ;;
- *) finalize_command="$finalize_command -L$dir";;
- esac
- finalize_command="$finalize_command -l$name"
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
fi
elif test "$build_libtool_libs" = yes; then
# Not a shared library
@@ -1855,7 +1824,7 @@
else
convenience="$convenience $dir/$old_library"
old_convenience="$old_convenience $dir/$old_library"
- deplibs="$deplibs $dir/$old_library"
+ deplibs="$dir/$old_library $deplibs"
link_static=yes
fi
fi
@@ -1881,9 +1850,11 @@
new_lib_search_path="$new_lib_search_path $absdir"
# Link against this library
- test "$link_static" = no && newdependency_libs="$newdependency_libs $abs_lad
ir/$laname"
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdepen
dency_libs"
# ... and its dependency_libs
- newdependency_libs="$newdependency_libs $dependency_libs"
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ done
if test $link_all_deplibs != no; then
# Add the search paths of all dependency libraries
@@ -1922,22 +1893,130 @@
esac
case "$deplibs " in
*" $path "*) ;;
- *) deplibs="$path $deplibs" ;;
+ *) deplibs="$deplibs $path" ;;
esac
done
fi
fi
done
- dependency_libs="$newdependency_libs"
- # Make sure lib_search_path contains only unique directories.
- lib_search_path=
- for dir in $new_lib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
- esac
- done
- lib_search_path="$lib_search_path $sys_lib_search_path"
+ if test $pass != dlopen && test $pass != dlpreopen; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $new_lib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ lib_search_path="$lib_search_path $sys_lib_search_path"
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ # Make sure that deplibs contains only unique libraries
+ # and add them in reverse order
+ new_deplibs=
+ for deplib in $deplibs; do
+ case "$deplib" in
+ -L*) new_deplibs="$deplib $new_deplibs" ;;
+ *)
+ case " $new_deplibs " in
+ *" $deplib "*) ;;
+ *) new_deplibs="$deplib $new_deplibs" ;;
+ esac
+ ;;
+ esac
+ done
+ deplibs=
+ for deplib in $new_deplibs; do
+ case "$deplib" in
+ -L*)
+ case " $deplibs " in
+ *" $deplib "*) ;;
+ *) deplibs="$deplibs $deplib" ;;
+ esac
+ ;;
+ *) deplibs="$deplibs $deplib" ;;
+ esac
+ done
+ else
+ new_deplibs=
+ for deplib in $compile_deplibs; do
+ case "$deplib" in
+ -L*) new_deplibs="$deplib $new_deplibs" ;;
+ *)
+ case " $new_deplibs " in
+ *" $deplib "*) ;;
+ *) new_deplibs="$deplib $new_deplibs" ;;
+ esac
+ ;;
+ esac
+ done
+ compile_deplibs=
+ for deplib in $new_deplibs; do
+ case "$deplib" in
+ -L*)
+ case " $compile_deplibs " in
+ *" $deplib "*) ;;
+ *) compile_deplibs="$compile_deplibs $deplib" ;;
+ esac
+ ;;
+ *) compile_deplibs="$compile_deplibs $deplib" ;;
+ esac
+ done
+ new_deplibs=
+ for deplib in $finalize_deplibs; do
+ case "$deplib" in
+ -L*) new_deplibs="$deplib $new_deplibs" ;;
+ *)
+ case " $new_deplibs " in
+ *" $deplib "*) ;;
+ *) new_deplibs="$deplib $new_deplibs" ;;
+ esac
+ ;;
+ esac
+ done
+ finalize_deplibs=
+ for deplib in $new_deplibs; do
+ case "$deplib" in
+ -L*)
+ case " $finalize_deplibs " in
+ *" $deplib "*) ;;
+ *) finalize_deplibs="$finalize_deplibs $deplib" ;;
+ esac
+ ;;
+ *) finalize_deplibs="$finalize_deplibs $deplib" ;;
+ esac
+ done
+ fi
+
+ # Make sure that dependency_libs contains only unique libraries
+ # and add them in reverse order
+ new_deplibs=
+ for deplib in $newdependency_libs; do
+ case "$deplib" in
+ -L*) new_deplibs="$deplib $new_deplibs" ;;
+ *)
+ case " $new_deplibs " in
+ *" $deplib "*) ;;
+ *) new_deplibs="$deplib $new_deplibs" ;;
+ esac
+ ;;
+ esac
+ done
+ dependency_libs=
+ for deplib in $new_deplibs; do
+ case "$deplib" in
+ -L*)
+ case " $dependency_libs " in
+ *" $deplib "*) ;;
+ *) dependency_libs="$dependency_libs $deplib" ;;
+ esac
+ ;;
+ *) dependency_libs="$dependency_libs $deplib" ;;
+ esac
+ done
+ else
+ dependency_libs="$newdependency_libs"
+ fi
done
if test $linkmode = prog; then
dlfiles="$newdlfiles"
@@ -2861,6 +2940,9 @@
$echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen
support."
fi
fi
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
if test -n "$rpath$xrpath"; then
# If the user specified any rpath flags, then add them.