]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
* ltmain.in (convenience): fixed race condition when more than one
authorAlexandre Oliva <oliva@dcc.unicamp.br>
Fri, 2 Apr 1999 13:57:11 +0000 (13:57 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Fri, 2 Apr 1999 13:57:11 +0000 (13:57 +0000)
library was linked with the same convenience library by
uniquifying the extract directory.  It is now named after the new
library *and* the old one, and lives in the objdir of the new one.

ChangeLog
ltmain.in

index fe91e8a3564c7f1452989cd8e57e9304ce191754..6d184b96d0c42ed51a6b55e19aff1f12d0906dbf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 1999-04-02  Alexandre Oliva  <oliva@dcc.unicamp.br>
 
+       * ltmain.in (convenience): fixed race condition when more than one 
+       library was linked with the same convenience library by
+       uniquifying the extract directory.  It is now named after the new
+       library *and* the old one, and lives in the objdir of the new one.
+
        * ltmain.in (-L*): do not abort just because a directory specified 
        with -L does not exist; just warn and discard it
 
index 65b51909381f23f3ba338998c16ef5a6423ad46e..c7456893e8138c67871008690660c8287faff71f 100644 (file)
--- a/ltmain.in
+++ b/ltmain.in
@@ -2025,11 +2025,25 @@ EOF
            eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
          fi
        else
+         gentop="$output_objdir/${outputname}x"
+         $show "${rm}r $gentop"
+         $run ${rm}r "$gentop"
+         $show "mkdir $gentop"
+         $run mkdir "$gentop"
+         status=$?
+         if test $status -ne 0 && test ! -d "$gentop"; then
+           exit $status
+         fi
+         generated="$generated $gentop"
+         
          for xlib in $convenience; do
            # Extract the objects.
-           xdir="$xlib"x
-           generated="$generated $xdir"
+           case "$xlib" in
+           /* | [A-Za-z]:[/\\]*) xabs="$xlib" ;;
+           *) xabs=`pwd`"/$xlib" ;;
+           esac
            xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+           xdir="$gentop/$xlib"
 
            $show "${rm}r $xdir"
            $run ${rm}r "$xdir"
@@ -2039,8 +2053,8 @@ EOF
            if test $status -ne 0 && test ! -d "$xdir"; then
              exit $status
            fi
-           $show "(cd $xdir && $AR x ../$xlib)"
-           $run eval "(cd \$xdir && $AR x ../\$xlib)" || exit $?
+           $show "(cd $xdir && $AR x $xabs)"
+           $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
 
            libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
          done
@@ -2831,26 +2845,42 @@ fi\
        addlibs="$old_convenience"
       fi
 
-      # Add in members from convenience archives.
-      for xlib in $addlibs; do
-       # Extract the objects.
-       xdir="$xlib"x
-       generated="$generated $xdir"
-       xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-
-       $show "${rm}r $xdir"
-       $run ${rm}r "$xdir"
-       $show "mkdir $xdir"
-       $run mkdir "$xdir"
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       $show "${rm}r $gentop"
+       $run ${rm}r "$gentop"
+       $show "mkdir $gentop"
+       $run mkdir "$gentop"
        status=$?
-       if test $status -ne 0 && test ! -d "$xdir"; then
+       if test $status -ne 0 && test ! -d "$gentop"; then
          exit $status
        fi
-       $show "(cd $xdir && $AR x ../$xlib)"
-       $run eval "(cd \$xdir && $AR x ../\$xlib)" || exit $?
+       generated="$generated $gentop"
+         
+       # Add in members from convenience archives.
+       for xlib in $addlibs; do
+         # Extract the objects.
+         case "$xlib" in
+         /* | [A-Za-z]:[/\\]*) xabs="$xlib" ;;
+         *) xabs=`pwd`"/$xlib" ;;
+         esac
+         xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+         xdir="$gentop/$xlib"
 
-       oldobjs="$oldobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
-      done
+         $show "${rm}r $xdir"
+         $run ${rm}r "$xdir"
+         $show "mkdir $xdir"
+         $run mkdir "$xdir"
+         status=$?
+         if test $status -ne 0 && test ! -d "$xdir"; then
+           exit $status
+         fi
+         $show "(cd $xdir && $AR x $xabs)"
+         $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+         oldobjs="$oldobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+       done
+      fi
 
       # Do each command in the archive commands.
       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then