libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: duplicate dependencies [was: RE: Very slow links: > 1 hour tolin k


From: Robert Boehne
Subject: Re: duplicate dependencies [was: RE: Very slow links: > 1 hour tolin k single executable - can we help?]
Date: Fri, 16 Nov 2001 19:28:48 -0600

Michael:

Thank you for so eloquently explaining this to all of us.  I liked it so
much, I snipped out a part of it for libtool.texi in the following
patch.

ChangeLog Entry:

2001-11-16  Robert Boehne  <address@hidden>

        With help from Michael Matz <address@hidden>:
        * ltmain.in:  Add a new command line argument
        --preserve-dup-deps for preserving duplicate
        dependent libraries.
        * libtool.texi: Document it.

I won't be back from vacation for a week, so I'll
be able to address any comments when I get back.

Thanks,

Robert

-- 
Robert Boehne             Software Engineer
Ricardo Software   Chicago Technical Center
TEL: (630)789-0003 x. 238
FAX: (630)789-0127
email:  address@hidden
? install-sh
? mkinstalldirs
? missing
? INSTALL
? COPYING
? dup-dep-byarg.patch
? libltdl/config-h.in
Index: ltmain.in
===================================================================
RCS file: /cvsroot/libtool/libtool/ltmain.in,v
retrieving revision 1.282
diff -u -r1.282 ltmain.in
--- ltmain.in   2001/11/15 01:01:13     1.282
+++ ltmain.in   2001/11/17 00:37:54
@@ -213,6 +213,8 @@
   --mode) prevopt="--mode" prev=mode ;;
   --mode=*) mode="$optarg" ;;
 
+  --preserve-dup-deps) duplicate_deps="yes" ;;
+
   --quiet | --silent)
     show=:
     ;;
@@ -1638,9 +1640,11 @@
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      case "$libs " in
-      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-      esac
+      if test "X$duplicate_deps" = "Xyes" ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
       libs="$libs $deplib"
     done
 
@@ -1651,12 +1655,14 @@
       # $postdeps and mark them as special (i.e., whose duplicates are
       # not to be eliminated).
       pre_post_deps=
-      for pre_post_dep in $predeps $postdeps; do
-       case "$pre_post_deps " in
-       *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
-       esac
-       pre_post_deps="$pre_post_deps $pre_post_dep"
-      done
+      if test "X$duplicate_deps" = "Xyes" ; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" 
;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
       pre_post_deps=
     fi
 
@@ -1890,9 +1896,11 @@
            tmp_libs=
            for deplib in $dependency_libs; do
              deplibs="$deplib $deplibs"
-             case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-             esac
+              if test "X$duplicate_deps" = "Xyes" ; then
+               case "$tmp_libs " in
+               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+               esac
+              fi
              tmp_libs="$tmp_libs $deplib"
            done
          elif test "$linkmode" != prog && test "$linkmode" != lib; then
@@ -2017,9 +2025,11 @@
              # or/and link against static libraries
              newdependency_libs="$deplib $newdependency_libs"
            fi
-           case "$tmp_libs " in
-           *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-           esac
+           if test "X$duplicate_deps" = "Xyes" ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
            tmp_libs="$tmp_libs $deplib"
          done # for deplib
          continue
@@ -2334,9 +2344,11 @@
          tmp_libs=
          for deplib in $dependency_libs; do
            newdependency_libs="$deplib $newdependency_libs"
-           case "$tmp_libs " in
-           *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-           esac
+           if test "X$duplicate_deps" = "Xyes" ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
            tmp_libs="$tmp_libs $deplib"
          done
 
Index: doc/libtool.texi
===================================================================
RCS file: /cvsroot/libtool/libtool/doc/libtool.texi,v
retrieving revision 1.122
diff -u -r1.122 libtool.texi
--- doc/libtool.texi    2001/09/30 10:20:29     1.122
+++ doc/libtool.texi    2001/11/17 00:37:55
@@ -1063,6 +1063,15 @@
 Display basic configuration options.  This provides a way for packages
 to determine whether shared or static libraries will be built.
 
address@hidden --preserve-dup-deps
+Do not remove duplicate dependencies in libraries.  When building packages
+with static libraries, the libraries may depend circularly on each other
+(shared libs too, but for those it doesn't matter), so there are
+situations, where -la -lb -la is required, and the second -la may not be
+stripped or the link will fail.  In cases where these duplications are
+required, this option will preserve them, only stripping the libraries
+that libtool knows it can safely.
+
 @item --finish
 Same as @samp{--mode=finish}.
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]