X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=install-sh;h=11870f1b0192aa3f321bc3a82552d27f0aa2352d;hb=cf32d8987e502849a4a3ed61baa03c4ef6a9cdb5;hp=8dff05b74acefbddafadf17fb4ebcdc9cddabb2e;hpb=302189d124ed5849c2589ea92e912eb24fdc4ab3;p=gzip diff --git a/install-sh b/install-sh index 8dff05b..11870f1 100755 --- a/install-sh +++ b/install-sh @@ -55,8 +55,8 @@ dst="" dir_arg="" while [ x"$1" != x ]; do - case "$1" in - -c) instcmd=$cpprog + case $1 in + -c) instcmd="$cpprog" shift continue;; @@ -79,7 +79,7 @@ while [ x"$1" != x ]; do shift continue;; - -s) stripcmd=$stripprog + -s) stripcmd="$stripprog" shift continue;; @@ -106,17 +106,17 @@ done if [ x"$src" = x ] then - echo "install: no input file specified" >&2 + echo "install: no input file specified" exit 1 else - true + : fi if [ x"$dir_arg" != x ]; then dst=$src src="" - - if [ -d "$dst" ]; then + + if [ -d $dst ]; then instcmd=: chmodcmd="" else @@ -125,38 +125,38 @@ if [ x"$dir_arg" != x ]; then else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad +# might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. - if [ -f "$src" -o -d "$src" ] + if [ -f "$src" ] || [ -d "$src" ] then - true + : else - echo "install: $src does not exist" >&2 + echo "install: $src does not exist" exit 1 fi - + if [ x"$dst" = x ] then - echo "install: no destination specified" >&2 + echo "install: no destination specified" exit 1 else - true + : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic - if [ -d "$dst" ] + if [ -d $dst ] then - dst=$dst/`basename "$src"` + dst="$dst"/`basename $src` else - true + : fi fi ## this sed command emulates the dirname command -dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script @@ -165,73 +165,69 @@ dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` if [ ! -d "$dstdir" ]; then defaultIFS=' ' -IFS="${IFS-$defaultIFS}" +IFS="${IFS-${defaultIFS}}" -oIFS=$IFS +oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' -set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS=$oIFS +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do - pathcomp=$pathcomp$1 + pathcomp="${pathcomp}${1}" shift - if [ ! -d "$pathcomp" ] ; + if [ ! -d "${pathcomp}" ] ; then - $mkdirprog "$pathcomp" + $mkdirprog "${pathcomp}" else - true + : fi - pathcomp=$pathcomp/ + pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then - $doit $instcmd "$dst" && + $doit $instcmd $dst && - if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else true ; fi + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi else # If we're going to rename the final executable, determine the name now. - if [ x"$transformarg" = x ] + if [ x"$transformarg" = x ] then - dstfile=`basename "$dst"` + dstfile=`basename $dst` else - dstfile=`basename "$dst" $transformbasename | + dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename - if [ x"$dstfile" = x ] + if [ x"$dstfile" = x ] then - dstfile=`basename "$dst"` + dstfile=`basename $dst` else - true + : fi -# Make a couple of temp file names in the proper directory. +# Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# - rmtmp=$dstdir/#rm.$$# - -# Trap to clean up temp files at exit. - - trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 - trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name - $doit $instcmd $src "$dsttmp" && + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits @@ -239,38 +235,17 @@ else # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. - if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp";else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp";else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp";else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp";else true;fi && - -# Now remove or move any old file at destination location. We try this -# two ways since rm can't unlink itself on some systems and the destination -# file might be busy for other reasons. In this case, the final cleanup -# might fail but the new file should still install successfully. - -{ - if [ -f "$dstdir/$dstfile" ] - then - $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || - $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || - { - echo "install: cannot unlink or rename $dstdir/$dstfile" >&2 - (exit 1); exit - } - else - true - fi -} && + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile fi && -# The final little trick to "correctly" pass the exit status to the exit trap. -{ - (exit 0); exit -} +exit 0