diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2005-03-01 22:33:54 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2005-03-01 22:33:54 +0000 |
commit | 9e6526abc2641978389e5edeb25072cd8446abd8 (patch) | |
tree | bd56ae83d21e2457c30cf15eef0f73816eaf8217 /ltmain.sh | |
parent | a985eb46c9c039d72104c4fafc801856a13052f0 (diff) | |
download | gdb-9e6526abc2641978389e5edeb25072cd8446abd8.tar.gz |
PR libgcj/20160
* ltmain.sh: Avoid creating archives with components that have
duplicate basenames.
Diffstat (limited to 'ltmain.sh')
-rw-r--r-- | ltmain.sh | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/ltmain.sh b/ltmain.sh index c3547e5a561..2f4d17312e0 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -4234,6 +4234,63 @@ fi\ # fi # done + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "copying selected object files to avoid basename conflicts..." + + if test -z "$gentop"; 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 "$gentop"; then + exit $status + fi + generated="$generated $gentop" + fi + + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + counter=`expr $counter + 1` + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + $run ln "$obj" "$gentop/$newobj" || + $run cp "$obj" "$gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && @@ -4247,6 +4304,7 @@ fi\ objlist= concat_cmds= save_oldobjs=$oldobjs + for obj in $save_oldobjs do oldobjs="$objlist $obj" |