diff options
author | nobody <> | 2004-04-09 05:17:49 +0000 |
---|---|---|
committer | nobody <> | 2004-04-09 05:17:49 +0000 |
commit | 8b9433f5df437f387211ac6101bb9dc574541bc4 (patch) | |
tree | c8d4417b7ac9de11f3c3d37a6a2de6b1a130aeec /install-sh | |
parent | 9a9f922d877cd9087a61e23a651eb2cfc6490305 (diff) | |
download | gdb-csl-arm-2004-q1.zip gdb-csl-arm-2004-q1.tar.gz gdb-csl-arm-2004-q1.tar.bz2 |
This commit was manufactured by cvs2svn to create tag 'csl-arm-2004-q1'.csl-arm-2004-q1
Sprout from binutils-2_15-branch 2004-03-22 04:06:07 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-'
Cherrypick from binutils-2_15-branch 2004-04-08 14:52:45 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
gas/testsuite/gas/dlx/lohi.d
gas/testsuite/gas/dlx/lohi.s
gas/testsuite/gas/sh/renesas-1.d
gas/testsuite/gas/sh/renesas-1.s
ld/emultempl/irix.em
Cherrypick from binutils-2_15-branch 2004-02-20 15:31:11 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
ld/testsuite/ld-scripts/align.s
ld/testsuite/ld-scripts/align.t
Cherrypick from binutils-2_15-branch 2004-02-23 10:10:03 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
ld/testsuite/ld-scripts/provide-2.t
ld/testsuite/ld-scripts/provide-3.t
Cherrypick from binutils-2_15-branch 2004-03-18 00:49:24 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
gas/testsuite/gas/cfi/cfi-sh-1.d
gas/testsuite/gas/cfi/cfi-sh-1.s
Cherrypick from binutils-2_15-branch 2004-03-21 23:47:55 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
gas/testsuite/gas/cris/mulbug-err-1.s
gas/testsuite/gas/cris/rd-mulbug-1.d
Cherrypick from binutils-2_15-branch 2004-02-19 14:08:32 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-':
ld/testsuite/ld-scripts/data.exp
Cherrypick from master 2004-04-09 05:17:48 UTC Nathanael Nerode <neroden@gcc.gnu.org> '2004-04-09 Nathanael Nerode <neroden@gcc.gnu.org>':
ChangeLog
MAINTAINERS
Makefile.in
Makefile.tpl
bfd/ChangeLog
bfd/Makefile.am
bfd/Makefile.in
bfd/aclocal.m4
bfd/aix386-core.c
bfd/archive.c
bfd/archures.c
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/coff-tic54x.c
bfd/config.bfd
bfd/config.in
bfd/configure
bfd/configure.in
bfd/cpu-cr16c.c
bfd/cpu-frv.c
bfd/cpu-sh.c
bfd/doc/ChangeLog
bfd/doc/Makefile.in
bfd/doc/bfdint.texi
bfd/dwarf2.c
bfd/ecoffswap.h
bfd/elf-bfd.h
bfd/elf-eh-frame.c
bfd/elf-hppa.h
bfd/elf-m10200.c
bfd/elf-m10300.c
bfd/elf.c
bfd/elf32-arm.h
bfd/elf32-avr.c
bfd/elf32-cr16c.c
bfd/elf32-cris.c
bfd/elf32-d10v.c
bfd/elf32-dlx.c
bfd/elf32-fr30.c
bfd/elf32-frv.c
bfd/elf32-gen.c
bfd/elf32-h8300.c
bfd/elf32-hppa.c
bfd/elf32-i370.c
bfd/elf32-i386.c
bfd/elf32-i860.c
bfd/elf32-ip2k.c
bfd/elf32-iq2000.c
bfd/elf32-m32r.c
bfd/elf32-m68hc1x.c
bfd/elf32-m68hc1x.h
bfd/elf32-m68k.c
bfd/elf32-mcore.c
bfd/elf32-msp430.c
bfd/elf32-openrisc.c
bfd/elf32-ppc.c
bfd/elf32-s390.c
bfd/elf32-sh.c
bfd/elf32-sh64.c
bfd/elf32-sparc.c
bfd/elf32-v850.c
bfd/elf32-vax.c
bfd/elf32-xstormy16.c
bfd/elf32-xtensa.c
bfd/elf64-alpha.c
bfd/elf64-gen.c
bfd/elf64-hppa.c
bfd/elf64-mmix.c
bfd/elf64-ppc.c
bfd/elf64-s390.c
bfd/elf64-sh64.c
bfd/elf64-sparc.c
bfd/elf64-x86-64.c
bfd/elfarm-nabi.c
bfd/elfcode.h
bfd/elflink.c
bfd/elfxx-ia64.c
bfd/elfxx-mips.c
bfd/elfxx-mips.h
bfd/elfxx-target.h
bfd/hppabsd-core.c
bfd/hpux-core.c
bfd/irix-core.c
bfd/libaout.h
bfd/libbfd.c
bfd/libbfd.h
bfd/linker.c
bfd/mach-o.c
bfd/netbsd-core.c
bfd/osf-core.c
bfd/pdp11.c
bfd/peXXigen.c
bfd/po/SRC-POTFILES.in
bfd/po/bfd.pot
bfd/ptrace-core.c
bfd/reloc.c
bfd/sco5-core.c
bfd/stabs.c
bfd/targets.c
bfd/trad-core.c
bfd/version.h
binutils/ChangeLog
binutils/MAINTAINERS
binutils/Makefile.am
binutils/Makefile.in
binutils/aclocal.m4
binutils/ar.c
binutils/arsup.c
binutils/config.in
binutils/configure
binutils/deflex.l
binutils/defparse.y
binutils/dlltool.c
binutils/dlltool.h
binutils/objcopy.c
binutils/objdump.c
binutils/po/binutils.pot
binutils/readelf.c
binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/ar.exp
binutils/testsuite/binutils-all/objcopy.exp
config.guess
config.sub
config/ChangeLog
config/accross.m4
config/acx.m4
configure
configure.in
cpu/ChangeLog
cpu/frv.cpu
cpu/frv.opc
cpu/m32r.cpu
cpu/m32r.opc
cpu/sh.cpu
cpu/sh.opc
cpu/sh64-compact.cpu
cpu/sh64-media.cpu
gas/ChangeLog
gas/Makefile.am
gas/Makefile.in
gas/aclocal.m4
gas/config.in
gas/config/obj-aout.c
gas/config/obj-elf.c
gas/config/tc-arc.c
gas/config/tc-arm.c
gas/config/tc-cris.c
gas/config/tc-dlx.c
gas/config/tc-frv.c
gas/config/tc-hppa.c
gas/config/tc-i386.c
gas/config/tc-i386.h
gas/config/tc-ia64.c
gas/config/tc-ia64.h
gas/config/tc-iq2000.c
gas/config/tc-m32r.c
gas/config/tc-mips.c
gas/config/tc-mips.h
gas/config/tc-ppc.c
gas/config/tc-s390.c
gas/config/tc-sh.c
gas/config/tc-sh.h
gas/config/tc-xtensa.c
gas/configure
gas/configure.in
gas/doc/Makefile.in
gas/doc/as.texinfo
gas/doc/c-arm.texi
gas/doc/c-cris.texi
gas/doc/c-hppa.texi
gas/doc/c-m32r.texi
gas/doc/c-sh.texi
gas/dw2gencfi.c
gas/expr.c
gas/po/gas.pot
gas/read.c
gas/stabs.c
gas/testsuite/ChangeLog
gas/testsuite/gas/alpha/elf-reloc-8.d
gas/testsuite/gas/cfi/cfi-alpha-1.d
gas/testsuite/gas/cfi/cfi-alpha-2.d
gas/testsuite/gas/cfi/cfi-alpha-3.d
gas/testsuite/gas/cfi/cfi-common-1.d
gas/testsuite/gas/cfi/cfi-common-2.d
gas/testsuite/gas/cfi/cfi-common-3.d
gas/testsuite/gas/cfi/cfi-i386.d
gas/testsuite/gas/cfi/cfi-m68k.d
gas/testsuite/gas/cfi/cfi-s390x-1.d
gas/testsuite/gas/cfi/cfi-x86_64.d
gas/testsuite/gas/cfi/cfi.exp
gas/testsuite/gas/cris/regreg.d
gas/testsuite/gas/dlx/alltests.exp
gas/testsuite/gas/dlx/itype.d
gas/testsuite/gas/dlx/lhi.d
gas/testsuite/gas/frv/allinsn.d
gas/testsuite/gas/frv/allinsn.exp
gas/testsuite/gas/frv/allinsn.s
gas/testsuite/gas/frv/fr405-insn.d
gas/testsuite/gas/frv/fr405-insn.l
gas/testsuite/gas/frv/fr405-insn.s
gas/testsuite/gas/frv/fr450-insn.d
gas/testsuite/gas/frv/fr450-insn.l
gas/testsuite/gas/frv/fr450-insn.s
gas/testsuite/gas/frv/fr450-media-issue.l
gas/testsuite/gas/frv/fr450-media-issue.s
gas/testsuite/gas/frv/fr450-spr.d
gas/testsuite/gas/frv/fr450-spr.s
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/katmai.d
gas/testsuite/gas/i386/padlock.d
gas/testsuite/gas/i386/padlock.s
gas/testsuite/gas/i860/dir-intel03-err.l
gas/testsuite/gas/m68hc11/m68hc11.exp
gas/testsuite/gas/macros/macros.exp
gas/testsuite/gas/ppc/altivec.d
gas/testsuite/gas/ppc/altivec_xcoff.d
gas/testsuite/gas/ppc/altivec_xcoff64.d
gas/testsuite/gas/ppc/astest.d
gas/testsuite/gas/ppc/astest2.d
gas/testsuite/gas/ppc/astest2_64.d
gas/testsuite/gas/ppc/astest64.d
gas/testsuite/gas/ppc/booke.d
gas/testsuite/gas/ppc/booke_xcoff.d
gas/testsuite/gas/ppc/booke_xcoff64.d
gas/testsuite/gas/ppc/e500.d
gas/testsuite/gas/ppc/power4.d
gas/testsuite/gas/ppc/test1elf32.d
gas/testsuite/gas/ppc/test1elf64.d
gas/testsuite/gas/ppc/test1xcoff32.d
gas/testsuite/gas/sh/basic.exp
gas/testsuite/gas/sh/sh64/err-dsp.s
gprof/ChangeLog
gprof/Makefile.am
gprof/Makefile.in
gprof/gconfig.in
gprof/po/gprof.pot
gprof/po/sv.po
include/ChangeLog
include/bfdlink.h
include/dyn-string.h
include/elf/ChangeLog
include/elf/arm.h
include/elf/common.h
include/elf/cr16c.h
include/elf/frv.h
include/elf/sh.h
include/hashtab.h
include/opcode/ChangeLog
include/opcode/i386.h
include/opcode/ppc.h
include/splay-tree.h
install-sh
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/NEWS
ld/config.in
ld/configure.tgt
ld/emulparams/elf32bmipn32.sh
ld/emulparams/elf32bsmip.sh
ld/emulparams/elf32cr16c.sh
ld/emulparams/elf32frvfd.sh
ld/emulparams/elf64bmip.sh
ld/emultempl/armelf.em
ld/emultempl/armelf_oabi.em
ld/emultempl/elf32.em
ld/emultempl/hppaelf.em
ld/emultempl/ppc64elf.em
ld/emultempl/sh64elf.em
ld/ld.texinfo
ld/ldexp.c
ld/ldfile.c
ld/ldgram.y
ld/ldlang.c
ld/ldlang.h
ld/ldlex.l
ld/ldmain.c
ld/ldmain.h
ld/lexsup.c
ld/pe-dll.c
ld/po/ld.pot
ld/po/sv.po
ld/scripttempl/elf32cr16c.sc
ld/testsuite/ChangeLog
ld/testsuite/ld-cdtest/cdtest.exp
ld/testsuite/ld-elfvers/vers.exp
ld/testsuite/ld-frv/fdpic-pie-1.d
ld/testsuite/ld-frv/fdpic-pie-2.d
ld/testsuite/ld-frv/fdpic-pie-6.d
ld/testsuite/ld-frv/fdpic-pie-7.d
ld/testsuite/ld-frv/fdpic-pie-8.d
ld/testsuite/ld-frv/fdpic-shared-1.d
ld/testsuite/ld-frv/fdpic-shared-2.d
ld/testsuite/ld-frv/fdpic-shared-3.d
ld/testsuite/ld-frv/fdpic-shared-4.d
ld/testsuite/ld-frv/fdpic-shared-5.d
ld/testsuite/ld-frv/fdpic-shared-6.d
ld/testsuite/ld-frv/fdpic-shared-7.d
ld/testsuite/ld-frv/fdpic-shared-8.d
ld/testsuite/ld-frv/fdpic-shared-local-2.d
ld/testsuite/ld-frv/fdpic-shared-local-8.d
ld/testsuite/ld-frv/fdpic-static-1.d
ld/testsuite/ld-frv/fdpic-static-2.d
ld/testsuite/ld-frv/fdpic-static-6.d
ld/testsuite/ld-frv/fdpic-static-7.d
ld/testsuite/ld-frv/fdpic-static-8.d
ld/testsuite/ld-frv/fdpic.exp
ld/testsuite/ld-frv/fr450-link.d
ld/testsuite/ld-frv/fr450-linka.s
ld/testsuite/ld-frv/fr450-linkb.s
ld/testsuite/ld-frv/fr450-linkc.s
ld/testsuite/ld-frv/frv-elf.exp
ld/testsuite/ld-powerpc/tls.d
ld/testsuite/ld-powerpc/tls32.d
ld/testsuite/ld-powerpc/tlsexe.d
ld/testsuite/ld-powerpc/tlsexe.r
ld/testsuite/ld-powerpc/tlsexe32.d
ld/testsuite/ld-powerpc/tlsexetoc.d
ld/testsuite/ld-powerpc/tlsexetoc.r
ld/testsuite/ld-powerpc/tlsso.d
ld/testsuite/ld-powerpc/tlsso32.d
ld/testsuite/ld-powerpc/tlstoc.d
ld/testsuite/ld-powerpc/tlstocso.d
ld/testsuite/ld-scripts/align.exp
ld/testsuite/ld-scripts/assert.s
ld/testsuite/ld-scripts/data.d
ld/testsuite/ld-scripts/data.s
ld/testsuite/ld-scripts/data.t
ld/testsuite/ld-scripts/defined2.d
ld/testsuite/ld-scripts/defined3.d
ld/testsuite/ld-scripts/provide-1.d
ld/testsuite/ld-scripts/provide-1.s
ld/testsuite/ld-scripts/provide-1.t
ld/testsuite/ld-scripts/provide-2.d
ld/testsuite/ld-scripts/provide-2.s
ld/testsuite/ld-scripts/provide-3.d
ld/testsuite/ld-scripts/provide-3.s
ld/testsuite/ld-scripts/provide.exp
ld/testsuite/ld-scripts/size-1.d
ld/testsuite/ld-scripts/size-1.s
ld/testsuite/ld-scripts/size-1.t
ld/testsuite/ld-scripts/size-2.d
ld/testsuite/ld-scripts/size-2.s
ld/testsuite/ld-scripts/size-2.t
ld/testsuite/ld-scripts/size.exp
libiberty/ChangeLog
libiberty/Makefile.in
libiberty/config.in
libiberty/configure
libiberty/configure.ac
libiberty/cp-demangle.c
libiberty/cp-demangle.h
libiberty/dyn-string.c
libiberty/hashtab.c
libiberty/pex-common.h
libiberty/pex-unix.c
libiberty/testsuite/demangle-expected
libiberty/testsuite/test-demangle.c
mkinstalldirs
opcodes/ChangeLog
opcodes/aclocal.m4
opcodes/config.in
opcodes/configure
opcodes/frv-asm.c
opcodes/frv-desc.c
opcodes/frv-desc.h
opcodes/frv-dis.c
opcodes/frv-ibld.c
opcodes/frv-opc.c
opcodes/frv-opc.h
opcodes/i386-dis.c
opcodes/m32r-asm.c
opcodes/po/POTFILES.in
opcodes/po/de.po
opcodes/po/opcodes.pot
opcodes/ppc-dis.c
opcodes/ppc-opc.c
opcodes/sh-dis.c
opcodes/sh-opc.h
opcodes/sparc-dis.c
src-release
texinfo/texinfo.tex
Delete:
bfd/elflink.h
bfd/mpw-config.in
bfd/mpw-make.sed
binutils/mac-binutils.r
binutils/mpw-config.in
binutils/mpw-make.sed
gas/mac-as.r
gas/mpw-config.in
gas/mpw-make.sed
include/mpw/ChangeLog
include/mpw/README
include/mpw/dir.h
include/mpw/dirent.h
include/mpw/fcntl.h
include/mpw/grp.h
include/mpw/mpw.h
include/mpw/pwd.h
include/mpw/spin.h
include/mpw/stat.h
include/mpw/sys/file.h
include/mpw/sys/param.h
include/mpw/sys/resource.h
include/mpw/sys/stat.h
include/mpw/sys/time.h
include/mpw/sys/types.h
include/mpw/utime.h
include/mpw/varargs.h
ld/mac-ld.r
ld/mpw-config.in
ld/mpw-make.sed
ld/testsuite/ld-frv/fdpic-pie-8-fail.d
libiberty/acconfig.h
mpw-README
mpw-build.in
mpw-config.in
mpw-configure
mpw-install
opcodes/mpw-config.in
opcodes/mpw-make.sed
Diffstat (limited to 'install-sh')
-rwxr-xr-x | install-sh | 468 |
1 files changed, 245 insertions, 223 deletions
@@ -1,7 +1,8 @@ #!/bin/sh -# # install - install a program, script, or datafile -# + +scriptversion=2004-02-15.20 + # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. @@ -41,13 +42,11 @@ # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. - # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" - # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" @@ -59,236 +58,259 @@ stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" -transformbasename="" -transform_arg="" +transformbasename= +transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" +chowncmd= +chgrpcmd= +stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd=$cpprog - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd=$stripprog - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) 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 +src= +dst= +dir_arg= + +usage="Usage: $0 [OPTION]... SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 -d DIRECTORIES... + +In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. +In the second, create the directory path DIR. + +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. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do + case $1 in + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit 0;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + --version) echo "$0 $scriptversion"; exit 0;; + + *) # 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 -if [ x"$src" = x ] -then - echo "$0: no input file specified" >&2 - exit 1 -else - : +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 fi -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -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 [ -f "$src" ] || [ -d "$src" ] - then - : - else - echo "$0: $src does not exist" >&2 - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "$0: no destination specified" >&2 - exit 1 - else - : - 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" ] - then - dst=$dst/`basename "$src"` - else - : - fi -fi - -## this sed command emulates the dirname command -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 - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' - ' -IFS="${IFS-$defaultIFS}" - -oIFS=$IFS -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS=$oIFS - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp=$pathcomp$1 - shift - - if [ ! -d "$pathcomp" ] ; - then - $mkdirprog "$pathcomp" - else - : - fi +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + src= + + 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 + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac - pathcomp=$pathcomp/ + # 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 + + # This sed command emulates the dirname command. + dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + + # Skip lots of stat calls in the usual case. + if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` + IFS=$oIFS + + pathcomp= + + 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 + + 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"; } + + 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 + + # don't allow the sed command to completely eliminate the filename. + test -z "$dstfile" && dstfile=`basename "$dst"` + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # 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 + + # Move or copy the file name to the temp name + $doit $instcmd "$src" "$dsttmp" && + + # 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"; } && + + # 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 + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + fi || { (exit 1); exit; } done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd "$dst" && - - 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 ] - then - dstfile=`basename "$dst"` - else - dstfile=`basename "$dst" $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename "$dst"` - else - : - fi - -# Make a couple of temp file names 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" && - -# 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. - - 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 && # The final little trick to "correctly" pass the exit status to the exit trap. - { - (exit 0); exit + (exit 0); exit } + +# 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: |