From 3b98dabaa4c3ed8a07928d1ef883879a476eac94 Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Sat, 19 Apr 2008 00:01:12 +0200 Subject: [PATCH] Avoid redundant rm in compile mode, fix locking. * libltdl/config/ltmain.m4sh (func_mode_compile): Avoid redundant removal of old output files before compilation. Do not remove $obj until we have successfully grabbed the lockfile (in case the compiler doesn't grok `-c -o'), because it might be identical to $output_obj. At the end of the function, before we remove the lockfile, update $removelist so that if the trap hits after the lockfile has been removed, we do not accidentally remove $output_obj that does not belong to us. (func_write_libtool_object): Use $MV instead of mv. Signed-off-by: Ralf Wildenhues --- ChangeLog | 13 +++++++++++++ libltdl/config/ltmain.m4sh | 18 +++++++----------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index e5934060e..63760ce10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2008-04-19 Ralf Wildenhues + + * libltdl/config/ltmain.m4sh (func_mode_compile): Avoid + redundant removal of old output files before compilation. + Do not remove $obj until we have successfully grabbed the + lockfile (in case the compiler doesn't grok `-c -o'), because + it might be identical to $output_obj. + At the end of the function, before we remove the lockfile, + update $removelist so that if the trap hits after the lockfile + has been removed, we do not accidentally remove $output_obj that + does not belong to us. + (func_write_libtool_object): Use $MV instead of mv. + 2008-04-18 Andreas Schwab * libltdl/m4/ltoptions.m4 (AC_ENABLE_SHARED): Check optional diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh index 28022545f..8c5c45cfa 100644 --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh @@ -650,7 +650,7 @@ pic_object=$write_lobj non_pic_object=$write_oldobj EOF - mv -f "${write_libobj}T" "${write_libobj}" + $MV "${write_libobj}T" "${write_libobj}" } } @@ -831,9 +831,6 @@ func_mode_compile () removelist="$lobj $libobj ${libobj}T" fi - $opt_dry_run || $RM $removelist - trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15 - # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) @@ -850,8 +847,6 @@ func_mode_compile () if test "$compiler_c_o" = no; then output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" - removelist="$removelist $output_obj $lockfile" - trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no @@ -881,17 +876,20 @@ compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi + removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result - $opt_dry_run || $RM "$libobj" "${libobj}T" - # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. @@ -911,8 +909,6 @@ compiler." command="$command -o $lobj" fi - $opt_dry_run || $RM "$lobj" "$output_obj" - func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' @@ -962,7 +958,6 @@ compiler." # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" - $opt_dry_run || $RM "$obj" "$output_obj" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' @@ -998,6 +993,7 @@ compiler." # Unlock the critical section if it was locked if test "$need_locks" != no; then + removelist=$lockfile $RM "$lockfile" fi } -- 2.47.2