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.

Reply via email to