From f97db5092d27869bb6c5cd7ffe7ec8e4dbe2cc00 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Fri, 2 Apr 1999 13:57:23 +0000 Subject: [PATCH] * 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. --- ChangeLog | 7 ++++++ ltmain.in | 70 +++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 57 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 78084b9b..1d3b7828 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +1999-04-02 Alexandre Oliva + + * 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. + 1999-04-02 Alexandre Oliva * ltmain.in (-L*): do not abort just because a directory specified diff --git a/ltmain.in b/ltmain.in index f3c2d3ee..90c7c143 100644 --- a/ltmain.in +++ b/ltmain.in @@ -2213,11 +2213,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" @@ -2227,8 +2241,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 @@ -3493,26 +3507,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