revert mips (32-bit, o32) syscall asm clean-up due to regressions
[oweals/musl.git] / tools / install.sh
1 #!/bin/sh
2 #
3 # This is an actually-safe install command which installs the new
4 # file atomically in the new location, rather than overwriting
5 # existing files.
6 #
7
8 usage() {
9 printf "usage: %s [-D] [-l] [-m mode] src dest\n" "$0" 1>&2
10 exit 1
11 }
12
13 mkdirp=
14 symlink=
15 mode=755
16
17 while getopts Dlm: name ; do
18 case "$name" in
19 D) mkdirp=yes ;;
20 l) symlink=yes ;;
21 m) mode=$OPTARG ;;
22 ?) usage ;;
23 esac
24 done
25 shift $(($OPTIND - 1))
26
27 test "$#" -eq 2 || usage
28 src=$1
29 dst=$2
30 tmp="$dst.tmp.$$"
31
32 case "$dst" in
33 */) printf "%s: %s ends in /\n", "$0" "$dst" 1>&2 ; exit 1 ;;
34 esac
35
36 set -C
37 set -e
38
39 if test "$mkdirp" ; then
40 umask 022
41 case "$2" in
42 */*) mkdir -p "${dst%/*}" ;;
43 esac
44 fi
45
46 trap 'rm -f "$tmp"' EXIT INT QUIT TERM HUP
47
48 umask 077
49
50 if test "$symlink" ; then
51 ln -s "$1" "$tmp"
52 else
53 cat < "$1" > "$tmp"
54 chmod "$mode" "$tmp"
55 fi
56
57 mv -f "$tmp" "$2"
58 test -d "$2" && {
59 rm -f "$2/$tmp"
60 printf "%s: %s is a directory\n" "$0" "$dst" 1>&2
61 exit 1
62 }
63
64 exit 0