From 8189a222b1f12b0ba99c0579915977f9312a2fde Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sun, 19 Jan 1997 14:35:37 -0500 Subject: [PATCH] Fix problems with symlinks to ".". From-SVN: r13516 --- gcc/fixinc.svr4 | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/gcc/fixinc.svr4 b/gcc/fixinc.svr4 index 0a9c6f95ffa..c0418b69d59 100755 --- a/gcc/fixinc.svr4 +++ b/gcc/fixinc.svr4 @@ -1,7 +1,7 @@ #! /bin/sh # Install modified versions of certain ANSI-incompatible # native System V Release 4 system include files. -# Copyright (C) 1994, 1996 Free Software Foundation, Inc. +# Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc. # Contributed by Ron Guilmette (rfg@monkeys.com). # # This file is part of GNU CC. @@ -73,7 +73,7 @@ fi echo 'Making directories:' cd ${INPUT} if $LINKS; then - files=`ls -LR | sed -n s/:$//p` + files=`find . -follow -type d -print 2>/dev/null | sed '/^.$/d'` else files=`find . -type d -print | sed '/^.$/d'` fi @@ -98,6 +98,7 @@ if $LINKS; then # In case $dest is relative, get to $file's dir first. cd ${INPUT} cd `echo ./$file | sed -n 's&[^/]*$&&p'` + rwd=`pwd` # Check that the target directory exists. # Redirections changed to avoid bug in sh on Ultrix. (cd $dest) > /dev/null 2>&1 @@ -107,7 +108,11 @@ if $LINKS; then x=`pwd` # If link leads back into ${INPUT}, # make a similar link here. - if expr $x : "${INPUT}/.*" > /dev/null; then + if expr "$dest" : '[^/][^/]*' >/dev/null && [ ! -h $dest ]; then + echo $file '->' $dest': Making link' + rm -fr ${LIB}/$file > /dev/null 2>&1 + ln -s $dest ${LIB}/$file > /dev/null 2>&1 + elif expr $x : "${INPUT}/.*" > /dev/null; then # Y gets the actual target dir name, relative to ${INPUT}. y=`echo $x | sed -n "s&${INPUT}/&&p"` # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}. @@ -116,6 +121,15 @@ if $LINKS; then echo $file '->' $dots$y ': Making link' rm -fr ${LIB}/$file > /dev/null 2>&1 ln -s $dots$y ${LIB}/$file > /dev/null 2>&1 + elif expr $x : "${rwd}/.*" > /dev/null; then + # Y gets the actual target dir name, relative to the directory where the link is. + y=`echo $x | sed -n "s&${rwd}/&&p"` + # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}. + dots=`echo "$file" | + sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'` + echo $file '->' $dots$y ': Making link' + rm -fr ${LIB}/$file > /dev/null 2>&1 + ln -s $dots$y ${LIB}/$file > /dev/null 2>&1 else # If the link is to outside ${INPUT}, # treat this directory as if it actually contained the files. @@ -1526,7 +1540,7 @@ if $LINKS; then for file in $files; do dest=`ls -ld $file | sed -n 's/.*-> //p'` if expr "$dest" : '[^/].*' > /dev/null; then - target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"` + target=${LIB}/`echo $file | sed "s|[^/]*\$|$dest|"` if [ -f $target ]; then ln -s $dest ${LIB}/$file >/dev/null 2>&1 fi -- 2.30.2