Deleted Added
full compact
2d1
< #
4c3,5
< #
---
>
> scriptversion=2004-02-15.20
>
44d44
<
50d49
<
62,63c61,62
< transformbasename=""
< transform_arg=""
---
> transformbasename=
> transform_arg=
66,68c65,67
< chowncmd=""
< chgrpcmd=""
< stripcmd=""
---
> chowncmd=
> chgrpcmd=
> stripcmd=
71,73c70,72
< src=""
< dst=""
< dir_arg=""
---
> src=
> dst=
> dir_arg=
75,79c74,76
< while [ x"$1" != x ]; do
< case $1 in
< -c) instcmd=$cpprog
< shift
< continue;;
---
> usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
> or: $0 [OPTION]... SRCFILES... DIRECTORY
> or: $0 -d DIRECTORIES...
81,83c78,79
< -d) dir_arg=true
< shift
< continue;;
---
> In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
> In the second, create the directory path DIR.
85,88c81,91
< -m) chmodcmd="$chmodprog $2"
< shift
< shift
< continue;;
---
> Options:
> -b=TRANSFORMBASENAME
> -c copy source (using $cpprog) instead of moving (using $mvprog).
> -d create directories instead of installing files.
> -g GROUP $chgrp installed files to GROUP.
> -m MODE $chmod installed files to MODE.
> -o USER $chown installed files to USER.
> -s strip installed files (using $stripprog).
> -t=TRANSFORM
> --help display this help and exit.
> --version display version info and exit.
90,93c93,95
< -o) chowncmd="$chownprog $2"
< shift
< shift
< continue;;
---
> Environment variables override the default commands:
> CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
> "
95,98c97,101
< -g) chgrpcmd="$chgrpprog $2"
< shift
< shift
< continue;;
---
> while test -n "$1"; do
> case $1 in
> -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
> shift
> continue;;
100,102c103,105
< -s) stripcmd=$stripprog
< shift
< continue;;
---
> -c) instcmd=$cpprog
> shift
> continue;;
104,106c107,109
< -t=*) transformarg=`echo $1 | sed 's/-t=//'`
< shift
< continue;;
---
> -d) dir_arg=true
> shift
> continue;;
108,110c111,114
< -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
< shift
< continue;;
---
> -g) chgrpcmd="$chgrpprog $2"
> shift
> shift
> continue;;
112,123c116
< *) if [ x"$src" = x ]
< then
< src=$1
< else
< # this colon is to work around a 386BSD /bin/sh bug
< :
< dst=$1
< fi
< shift
< continue;;
< esac
< done
---
> --help) echo "$usage"; exit 0;;
125,131c118,121
< if [ x"$src" = x ]
< then
< echo "$0: no input file specified" >&2
< exit 1
< else
< :
< fi
---
> -m) chmodcmd="$chmodprog $2"
> shift
> shift
> continue;;
133,135c123,126
< if [ x"$dir_arg" != x ]; then
< dst=$src
< src=""
---
> -o) chowncmd="$chownprog $2"
> shift
> shift
> continue;;
137,143c128,130
< if [ -d "$dst" ]; then
< instcmd=:
< chmodcmd=""
< else
< instcmd=$mkdirprog
< fi
< else
---
> -s) stripcmd=$stripprog
> shift
> continue;;
145,147c132,134
< # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
< # might cause directories to be created, which would be especially bad
< # if $src (and thus $dsttmp) contains '*'.
---
> -t=*) transformarg=`echo $1 | sed 's/-t=//'`
> shift
> continue;;
149,155c136
< if [ -f "$src" ] || [ -d "$src" ]
< then
< :
< else
< echo "$0: $src does not exist" >&2
< exit 1
< fi
---
> --version) echo "$0 $scriptversion"; exit 0;;
157,163c138,153
< if [ x"$dst" = x ]
< then
< echo "$0: no destination specified" >&2
< exit 1
< else
< :
< fi
---
> *) # When -d is used, all remaining arguments are directories to create.
> test -n "$dir_arg" && break
> # Otherwise, the last argument is the destination. Remove it from $@.
> for arg
> do
> if test -n "$dstarg"; then
> # $@ is not empty: it contains at least $arg.
> set fnord "$@" "$dstarg"
> shift # fnord
> fi
> shift # arg
> dstarg=$arg
> done
> break;;
> esac
> done
165,173c155,162
< # 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" ]
< then
< dst=$dst/`basename "$src"`
< else
< :
< fi
---
> if test -z "$1"; then
> if test -z "$dir_arg"; then
> echo "$0: no input file specified." >&2
> exit 1
> fi
> # It's OK to call `install-sh -d' without argument.
> # This can happen when creating conditional directories.
> exit 0
176,177c165,170
< ## this sed command emulates the dirname command
< dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
---
> for src
> do
> # Protect names starting with `-'.
> case $src in
> -*) src=./$src ;;
> esac
179,180c172,174
< # Make sure that the destination directory exists.
< # this part is taken from Noah Friedman's mkinstalldirs script
---
> if test -n "$dir_arg"; then
> dst=$src
> src=
182,186c176,189
< # Skip lots of stat calls in the usual case.
< if [ ! -d "$dstdir" ]; then
< defaultIFS='
< '
< IFS="${IFS-$defaultIFS}"
---
> if test -d "$dst"; then
> instcmd=:
> chmodcmd=
> else
> instcmd=$mkdirprog
> fi
> else
> # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
> # might cause directories to be created, which would be especially bad
> # if $src (and thus $dsttmp) contains '*'.
> if test ! -f "$src" && test ! -d "$src"; then
> echo "$0: $src does not exist." >&2
> exit 1
> fi
188,192c191,194
< oIFS=$IFS
< # Some sh's can't handle IFS=/ for some reason.
< IFS='%'
< set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
< IFS=$oIFS
---
> if test -z "$dstarg"; then
> echo "$0: no destination specified." >&2
> exit 1
> fi
194c196,200
< pathcomp=''
---
> dst=$dstarg
> # Protect names starting with `-'.
> case $dst in
> -*) dst=./$dst ;;
> esac
196,198c202,207
< while [ $# -ne 0 ] ; do
< pathcomp=$pathcomp$1
< shift
---
> # If destination is a directory, append the input filename; won't work
> # if double slashes aren't ignored.
> if test -d "$dst"; then
> dst=$dst/`basename "$src"`
> fi
> fi
200,205c209,210
< if [ ! -d "$pathcomp" ] ;
< then
< $mkdirprog "$pathcomp"
< else
< :
< fi
---
> # This sed command emulates the dirname command.
> dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
207,209c212
< pathcomp=$pathcomp/
< done
< fi
---
> # Make sure that the destination directory exists.
211,213c214,218
< if [ x"$dir_arg" != x ]
< then
< $doit $instcmd "$dst" &&
---
> # Skip lots of stat calls in the usual case.
> if test ! -d "$dstdir"; then
> defaultIFS='
> '
> IFS="${IFS-$defaultIFS}"
215,219c220,224
< 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
---
> oIFS=$IFS
> # Some sh's can't handle IFS=/ for some reason.
> IFS='%'
> set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
> IFS=$oIFS
221c226
< # If we're going to rename the final executable, determine the name now.
---
> pathcomp=
223,229c228,240
< if [ x"$transformarg" = x ]
< then
< dstfile=`basename "$dst"`
< else
< dstfile=`basename "$dst" $transformbasename |
< sed $transformarg`$transformbasename
< fi
---
> while test $# -ne 0 ; do
> pathcomp=$pathcomp$1
> shift
> if test ! -d "$pathcomp"; then
> $mkdirprog "$pathcomp" || lasterr=$?
> # mkdir can fail with a `File exist' error in case several
> # install-sh are creating the directory concurrently. This
> # is OK.
> test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; }
> fi
> pathcomp=$pathcomp/
> done
> fi
231c242,247
< # don't allow the sed command to completely eliminate the filename
---
> if test -n "$dir_arg"; then
> $doit $instcmd "$dst" \
> && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
> && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
> && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
> && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
233,238c249,256
< if [ x"$dstfile" = x ]
< then
< dstfile=`basename "$dst"`
< else
< :
< fi
---
> else
> # If we're going to rename the final executable, determine the name now.
> if test -z "$transformarg"; then
> dstfile=`basename "$dst"`
> else
> dstfile=`basename "$dst" $transformbasename \
> | sed $transformarg`$transformbasename
> fi
240c258,259
< # Make a couple of temp file names in the proper directory.
---
> # don't allow the sed command to completely eliminate the filename.
> test -z "$dstfile" && dstfile=`basename "$dst"`
242,243c261,263
< dsttmp=$dstdir/_inst.$$_
< rmtmp=$dstdir/_rm.$$_
---
> # Make a couple of temp file names in the proper directory.
> dsttmp=$dstdir/_inst.$$_
> rmtmp=$dstdir/_rm.$$_
245c265,267
< # Trap to clean up temp files at exit.
---
> # Trap to clean up those temp files at exit.
> trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
> trap '(exit $?); exit' 1 2 13 15
247,248c269,270
< 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" &&
250c272,281
< # Move or copy the file name to the temp name
---
> # and set any options; do chmod last to preserve setuid bits.
> #
> # If any of these fail, we abort the whole thing. If we want to
> # ignore errors from any of these, just make sure not to ignore
> # errors from the above "$doit $instcmd $src $dsttmp" command.
> #
> { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
> && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
> && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
> && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
252c283,299
< $doit $instcmd "$src" "$dsttmp" &&
---
> # Now remove or move aside 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 test -f "$dstdir/$dstfile"; then
> $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
> || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
> || {
> echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
> (exit 1); exit
> }
> else
> :
> fi
> } &&
254c301,304
< # and set any options; do chmod last to preserve setuid bits
---
> # Now rename the file to the real destination.
> $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
> fi || { (exit 1); exit; }
> done
256,289d305
< # If any of these fail, we abort the whole thing. If we want to
< # 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 :;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 remove or move aside 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 "$0: cannot unlink or rename $dstdir/$dstfile" >&2
< (exit 1); exit
< }
< else
< :
< fi
< } &&
<
< # Now rename the file to the real destination.
<
< $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
<
< fi &&
<
291d306
<
293c308
< (exit 0); exit
---
> (exit 0); exit
294a310,316
>
> # Local variables:
> # eval: (add-hook 'write-file-hooks 'time-stamp)
> # time-stamp-start: "scriptversion="
> # time-stamp-format: "%:y-%02m-%02d.%02H"
> # time-stamp-end: "$"
> # End: