0000: 23 21 2f 62 69 6e 2f 73 68 0a 23 20 69 6e 73 74 #!/bin/sh.# inst
0010: 61 6c 6c 20 2d 20 69 6e 73 74 61 6c 6c 20 61 20 all - install a
0020: 70 72 6f 67 72 61 6d 2c 20 73 63 72 69 70 74 2c program, script,
0030: 20 6f 72 20 64 61 74 61 66 69 6c 65 0a 0a 73 63 or datafile..sc
0040: 72 69 70 74 76 65 72 73 69 6f 6e 3d 32 30 30 36 riptversion=2006
0050: 2d 31 32 2d 32 35 2e 30 30 0a 0a 23 20 54 68 69 -12-25.00..# Thi
0060: 73 20 6f 72 69 67 69 6e 61 74 65 73 20 66 72 6f s originates fro
0070: 6d 20 58 31 31 52 35 20 28 6d 69 74 2f 75 74 69 m X11R5 (mit/uti
0080: 6c 2f 73 63 72 69 70 74 73 2f 69 6e 73 74 61 6c l/scripts/instal
0090: 6c 2e 73 68 29 2c 20 77 68 69 63 68 20 77 61 73 l.sh), which was
00a0: 0a 23 20 6c 61 74 65 72 20 72 65 6c 65 61 73 65 .# later release
00b0: 64 20 69 6e 20 58 31 31 52 36 20 28 78 63 2f 63 d in X11R6 (xc/c
00c0: 6f 6e 66 69 67 2f 75 74 69 6c 2f 69 6e 73 74 61 onfig/util/insta
00d0: 6c 6c 2e 73 68 29 20 77 69 74 68 20 74 68 65 0a ll.sh) with the.
00e0: 23 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 70 79 # following copy
00f0: 72 69 67 68 74 20 61 6e 64 20 6c 69 63 65 6e 73 right and licens
0100: 65 2e 0a 23 0a 23 20 43 6f 70 79 72 69 67 68 74 e..#.# Copyright
0110: 20 28 43 29 20 31 39 39 34 20 58 20 43 6f 6e 73 (C) 1994 X Cons
0120: 6f 72 74 69 75 6d 0a 23 0a 23 20 50 65 72 6d 69 ortium.#.# Permi
0130: 73 73 69 6f 6e 20 69 73 20 68 65 72 65 62 79 20 ssion is hereby
0140: 67 72 61 6e 74 65 64 2c 20 66 72 65 65 20 6f 66 granted, free of
0150: 20 63 68 61 72 67 65 2c 20 74 6f 20 61 6e 79 20 charge, to any
0160: 70 65 72 73 6f 6e 20 6f 62 74 61 69 6e 69 6e 67 person obtaining
0170: 20 61 20 63 6f 70 79 0a 23 20 6f 66 20 74 68 69 a copy.# of thi
0180: 73 20 73 6f 66 74 77 61 72 65 20 61 6e 64 20 61 s software and a
0190: 73 73 6f 63 69 61 74 65 64 20 64 6f 63 75 6d 65 ssociated docume
01a0: 6e 74 61 74 69 6f 6e 20 66 69 6c 65 73 20 28 74 ntation files (t
01b0: 68 65 20 22 53 6f 66 74 77 61 72 65 22 29 2c 20 he "Software"),
01c0: 74 6f 0a 23 20 64 65 61 6c 20 69 6e 20 74 68 65 to.# deal in the
01d0: 20 53 6f 66 74 77 61 72 65 20 77 69 74 68 6f 75 Software withou
01e0: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 2c 20 69 t restriction, i
01f0: 6e 63 6c 75 64 69 6e 67 20 77 69 74 68 6f 75 74 ncluding without
0200: 20 6c 69 6d 69 74 61 74 69 6f 6e 20 74 68 65 0a limitation the.
0210: 23 20 72 69 67 68 74 73 20 74 6f 20 75 73 65 2c # rights to use,
0220: 20 63 6f 70 79 2c 20 6d 6f 64 69 66 79 2c 20 6d copy, modify, m
0230: 65 72 67 65 2c 20 70 75 62 6c 69 73 68 2c 20 64 erge, publish, d
0240: 69 73 74 72 69 62 75 74 65 2c 20 73 75 62 6c 69 istribute, subli
0250: 63 65 6e 73 65 2c 20 61 6e 64 2f 6f 72 0a 23 20 cense, and/or.#
0260: 73 65 6c 6c 20 63 6f 70 69 65 73 20 6f 66 20 74 sell copies of t
0270: 68 65 20 53 6f 66 74 77 61 72 65 2c 20 61 6e 64 he Software, and
0280: 20 74 6f 20 70 65 72 6d 69 74 20 70 65 72 73 6f to permit perso
0290: 6e 73 20 74 6f 20 77 68 6f 6d 20 74 68 65 20 53 ns to whom the S
02a0: 6f 66 74 77 61 72 65 20 69 73 0a 23 20 66 75 72 oftware is.# fur
02b0: 6e 69 73 68 65 64 20 74 6f 20 64 6f 20 73 6f 2c nished to do so,
02c0: 20 73 75 62 6a 65 63 74 20 74 6f 20 74 68 65 20 subject to the
02d0: 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 following condit
02e0: 69 6f 6e 73 3a 0a 23 0a 23 20 54 68 65 20 61 62 ions:.#.# The ab
02f0: 6f 76 65 20 63 6f 70 79 72 69 67 68 74 20 6e 6f ove copyright no
0300: 74 69 63 65 20 61 6e 64 20 74 68 69 73 20 70 65 tice and this pe
0310: 72 6d 69 73 73 69 6f 6e 20 6e 6f 74 69 63 65 20 rmission notice
0320: 73 68 61 6c 6c 20 62 65 20 69 6e 63 6c 75 64 65 shall be include
0330: 64 20 69 6e 0a 23 20 61 6c 6c 20 63 6f 70 69 65 d in.# all copie
0340: 73 20 6f 72 20 73 75 62 73 74 61 6e 74 69 61 6c s or substantial
0350: 20 70 6f 72 74 69 6f 6e 73 20 6f 66 20 74 68 65 portions of the
0360: 20 53 6f 66 74 77 61 72 65 2e 0a 23 0a 23 20 54 Software..#.# T
0370: 48 45 20 53 4f 46 54 57 41 52 45 20 49 53 20 50 HE SOFTWARE IS P
0380: 52 4f 56 49 44 45 44 20 22 41 53 20 49 53 22 2c ROVIDED "AS IS",
0390: 20 57 49 54 48 4f 55 54 20 57 41 52 52 41 4e 54 WITHOUT WARRANT
03a0: 59 20 4f 46 20 41 4e 59 20 4b 49 4e 44 2c 20 45 Y OF ANY KIND, E
03b0: 58 50 52 45 53 53 20 4f 52 0a 23 20 49 4d 50 4c XPRESS OR.# IMPL
03c0: 49 45 44 2c 20 49 4e 43 4c 55 44 49 4e 47 20 42 IED, INCLUDING B
03d0: 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 20 54 UT NOT LIMITED T
03e0: 4f 20 54 48 45 20 57 41 52 52 41 4e 54 49 45 53 O THE WARRANTIES
03f0: 20 4f 46 20 4d 45 52 43 48 41 4e 54 41 42 49 4c OF MERCHANTABIL
0400: 49 54 59 2c 0a 23 20 46 49 54 4e 45 53 53 20 46 ITY,.# FITNESS F
0410: 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 OR A PARTICULAR
0420: 50 55 52 50 4f 53 45 20 41 4e 44 20 4e 4f 4e 49 PURPOSE AND NONI
0430: 4e 46 52 49 4e 47 45 4d 45 4e 54 2e 20 20 49 4e NFRINGEMENT. IN
0440: 20 4e 4f 20 45 56 45 4e 54 20 53 48 41 4c 4c 20 NO EVENT SHALL
0450: 54 48 45 0a 23 20 58 20 43 4f 4e 53 4f 52 54 49 THE.# X CONSORTI
0460: 55 4d 20 42 45 20 4c 49 41 42 4c 45 20 46 4f 52 UM BE LIABLE FOR
0470: 20 41 4e 59 20 43 4c 41 49 4d 2c 20 44 41 4d 41 ANY CLAIM, DAMA
0480: 47 45 53 20 4f 52 20 4f 54 48 45 52 20 4c 49 41 GES OR OTHER LIA
0490: 42 49 4c 49 54 59 2c 20 57 48 45 54 48 45 52 20 BILITY, WHETHER
04a0: 49 4e 0a 23 20 41 4e 20 41 43 54 49 4f 4e 20 4f IN.# AN ACTION O
04b0: 46 20 43 4f 4e 54 52 41 43 54 2c 20 54 4f 52 54 F CONTRACT, TORT
04c0: 20 4f 52 20 4f 54 48 45 52 57 49 53 45 2c 20 41 OR OTHERWISE, A
04d0: 52 49 53 49 4e 47 20 46 52 4f 4d 2c 20 4f 55 54 RISING FROM, OUT
04e0: 20 4f 46 20 4f 52 20 49 4e 20 43 4f 4e 4e 45 43 OF OR IN CONNEC
04f0: 2d 0a 23 20 54 49 4f 4e 20 57 49 54 48 20 54 48 -.# TION WITH TH
0500: 45 20 53 4f 46 54 57 41 52 45 20 4f 52 20 54 48 E SOFTWARE OR TH
0510: 45 20 55 53 45 20 4f 52 20 4f 54 48 45 52 20 44 E USE OR OTHER D
0520: 45 41 4c 49 4e 47 53 20 49 4e 20 54 48 45 20 53 EALINGS IN THE S
0530: 4f 46 54 57 41 52 45 2e 0a 23 0a 23 20 45 78 63 OFTWARE..#.# Exc
0540: 65 70 74 20 61 73 20 63 6f 6e 74 61 69 6e 65 64 ept as contained
0550: 20 69 6e 20 74 68 69 73 20 6e 6f 74 69 63 65 2c in this notice,
0560: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 the name of the
0570: 20 58 20 43 6f 6e 73 6f 72 74 69 75 6d 20 73 68 X Consortium sh
0580: 61 6c 6c 20 6e 6f 74 0a 23 20 62 65 20 75 73 65 all not.# be use
0590: 64 20 69 6e 20 61 64 76 65 72 74 69 73 69 6e 67 d in advertising
05a0: 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 74 6f or otherwise to
05b0: 20 70 72 6f 6d 6f 74 65 20 74 68 65 20 73 61 6c promote the sal
05c0: 65 2c 20 75 73 65 20 6f 72 20 6f 74 68 65 72 20 e, use or other
05d0: 64 65 61 6c 2d 0a 23 20 69 6e 67 73 20 69 6e 20 deal-.# ings in
05e0: 74 68 69 73 20 53 6f 66 74 77 61 72 65 20 77 69 this Software wi
05f0: 74 68 6f 75 74 20 70 72 69 6f 72 20 77 72 69 74 thout prior writ
0600: 74 65 6e 20 61 75 74 68 6f 72 69 7a 61 74 69 6f ten authorizatio
0610: 6e 20 66 72 6f 6d 20 74 68 65 20 58 20 43 6f 6e n from the X Con
0620: 73 6f 72 2d 0a 23 20 74 69 75 6d 2e 0a 23 0a 23 sor-.# tium..#.#
0630: 0a 23 20 46 53 46 20 63 68 61 6e 67 65 73 20 74 .# FSF changes t
0640: 6f 20 74 68 69 73 20 66 69 6c 65 20 61 72 65 20 o this file are
0650: 69 6e 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f in the public do
0660: 6d 61 69 6e 2e 0a 23 0a 23 20 43 61 6c 6c 69 6e main..#.# Callin
0670: 67 20 74 68 69 73 20 73 63 72 69 70 74 20 69 6e g this script in
0680: 73 74 61 6c 6c 2d 73 68 20 69 73 20 70 72 65 66 stall-sh is pref
0690: 65 72 72 65 64 20 6f 76 65 72 20 69 6e 73 74 61 erred over insta
06a0: 6c 6c 2e 73 68 2c 20 74 6f 20 70 72 65 76 65 6e ll.sh, to preven
06b0: 74 0a 23 20 60 6d 61 6b 65 27 20 69 6d 70 6c 69 t.# `make' impli
06c0: 63 69 74 20 72 75 6c 65 73 20 66 72 6f 6d 20 63 cit rules from c
06d0: 72 65 61 74 69 6e 67 20 61 20 66 69 6c 65 20 63 reating a file c
06e0: 61 6c 6c 65 64 20 69 6e 73 74 61 6c 6c 20 66 72 alled install fr
06f0: 6f 6d 20 69 74 0a 23 20 77 68 65 6e 20 74 68 65 om it.# when the
0700: 72 65 20 69 73 20 6e 6f 20 4d 61 6b 65 66 69 6c re is no Makefil
0710: 65 2e 0a 23 0a 23 20 54 68 69 73 20 73 63 72 69 e..#.# This scri
0720: 70 74 20 69 73 20 63 6f 6d 70 61 74 69 62 6c 65 pt is compatible
0730: 20 77 69 74 68 20 74 68 65 20 42 53 44 20 69 6e with the BSD in
0740: 73 74 61 6c 6c 20 73 63 72 69 70 74 2c 20 62 75 stall script, bu
0750: 74 20 77 61 73 20 77 72 69 74 74 65 6e 0a 23 20 t was written.#
0760: 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 0a 6e from scratch...n
0770: 6c 3d 27 0a 27 0a 49 46 53 3d 22 20 22 22 09 24 l='.'.IFS=" "".$
0780: 6e 6c 22 0a 0a 23 20 73 65 74 20 44 4f 49 54 50 nl"..# set DOITP
0790: 52 4f 47 20 74 6f 20 65 63 68 6f 20 74 6f 20 74 ROG to echo to t
07a0: 65 73 74 20 74 68 69 73 20 73 63 72 69 70 74 0a est this script.
07b0: 0a 23 20 44 6f 6e 27 74 20 75 73 65 20 3a 2d 20 .# Don't use :-
07c0: 73 69 6e 63 65 20 34 2e 33 42 53 44 20 61 6e 64 since 4.3BSD and
07d0: 20 65 61 72 6c 69 65 72 20 73 68 65 6c 6c 73 20 earlier shells
07e0: 64 6f 6e 27 74 20 6c 69 6b 65 20 69 74 2e 0a 64 don't like it..d
07f0: 6f 69 74 3d 24 7b 44 4f 49 54 50 52 4f 47 2d 7d oit=${DOITPROG-}
0800: 0a 69 66 20 74 65 73 74 20 2d 7a 20 22 24 64 6f .if test -z "$do
0810: 69 74 22 3b 20 74 68 65 6e 0a 20 20 64 6f 69 74 it"; then. doit
0820: 5f 65 78 65 63 3d 65 78 65 63 0a 65 6c 73 65 0a _exec=exec.else.
0830: 20 20 64 6f 69 74 5f 65 78 65 63 3d 24 64 6f 69 doit_exec=$doi
0840: 74 0a 66 69 0a 0a 23 20 50 75 74 20 69 6e 20 61 t.fi..# Put in a
0850: 62 73 6f 6c 75 74 65 20 66 69 6c 65 20 6e 61 6d bsolute file nam
0860: 65 73 20 69 66 20 79 6f 75 20 64 6f 6e 27 74 20 es if you don't
0870: 68 61 76 65 20 74 68 65 6d 20 69 6e 20 79 6f 75 have them in you
0880: 72 20 70 61 74 68 3b 0a 23 20 6f 72 20 75 73 65 r path;.# or use
0890: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var
08a0: 73 2e 0a 0a 63 68 67 72 70 70 72 6f 67 3d 24 7b s...chgrpprog=${
08b0: 43 48 47 52 50 50 52 4f 47 2d 63 68 67 72 70 7d CHGRPPROG-chgrp}
08c0: 0a 63 68 6d 6f 64 70 72 6f 67 3d 24 7b 43 48 4d .chmodprog=${CHM
08d0: 4f 44 50 52 4f 47 2d 63 68 6d 6f 64 7d 0a 63 68 ODPROG-chmod}.ch
08e0: 6f 77 6e 70 72 6f 67 3d 24 7b 43 48 4f 57 4e 50 ownprog=${CHOWNP
08f0: 52 4f 47 2d 63 68 6f 77 6e 7d 0a 63 6d 70 70 72 ROG-chown}.cmppr
0900: 6f 67 3d 24 7b 43 4d 50 50 52 4f 47 2d 63 6d 70 og=${CMPPROG-cmp
0910: 7d 0a 63 70 70 72 6f 67 3d 24 7b 43 50 50 52 4f }.cpprog=${CPPRO
0920: 47 2d 63 70 7d 0a 6d 6b 64 69 72 70 72 6f 67 3d G-cp}.mkdirprog=
0930: 24 7b 4d 4b 44 49 52 50 52 4f 47 2d 6d 6b 64 69 ${MKDIRPROG-mkdi
0940: 72 7d 0a 6d 76 70 72 6f 67 3d 24 7b 4d 56 50 52 r}.mvprog=${MVPR
0950: 4f 47 2d 6d 76 7d 0a 72 6d 70 72 6f 67 3d 24 7b OG-mv}.rmprog=${
0960: 52 4d 50 52 4f 47 2d 72 6d 7d 0a 73 74 72 69 70 RMPROG-rm}.strip
0970: 70 72 6f 67 3d 24 7b 53 54 52 49 50 50 52 4f 47 prog=${STRIPPROG
0980: 2d 73 74 72 69 70 7d 0a 0a 70 6f 73 69 78 5f 67 -strip}..posix_g
0990: 6c 6f 62 3d 27 3f 27 0a 69 6e 69 74 69 61 6c 69 lob='?'.initiali
09a0: 7a 65 5f 70 6f 73 69 78 5f 67 6c 6f 62 3d 27 0a ze_posix_glob='.
09b0: 20 20 74 65 73 74 20 22 24 70 6f 73 69 78 5f 67 test "$posix_g
09c0: 6c 6f 62 22 20 21 3d 20 22 3f 22 20 7c 7c 20 7b lob" != "?" || {
09d0: 0a 20 20 20 20 69 66 20 28 73 65 74 20 2d 66 29 . if (set -f)
09e0: 20 32 3e 2f 64 65 76 2f 6e 75 6c 6c 3b 20 74 68 2>/dev/null; th
09f0: 65 6e 0a 20 20 20 20 20 20 70 6f 73 69 78 5f 67 en. posix_g
0a00: 6c 6f 62 3d 0a 20 20 20 20 65 6c 73 65 0a 20 20 lob=. else.
0a10: 20 20 20 20 70 6f 73 69 78 5f 67 6c 6f 62 3d 3a posix_glob=:
0a20: 0a 20 20 20 20 66 69 0a 20 20 7d 0a 27 0a 0a 70 . fi. }.'..p
0a30: 6f 73 69 78 5f 6d 6b 64 69 72 3d 0a 0a 23 20 44 osix_mkdir=..# D
0a40: 65 73 69 72 65 64 20 6d 6f 64 65 20 6f 66 20 69 esired mode of i
0a50: 6e 73 74 61 6c 6c 65 64 20 66 69 6c 65 2e 0a 6d nstalled file..m
0a60: 6f 64 65 3d 30 37 35 35 0a 0a 63 68 67 72 70 63 ode=0755..chgrpc
0a70: 6d 64 3d 0a 63 68 6d 6f 64 63 6d 64 3d 24 63 68 md=.chmodcmd=$ch
0a80: 6d 6f 64 70 72 6f 67 0a 63 68 6f 77 6e 63 6d 64 modprog.chowncmd
0a90: 3d 0a 6d 76 63 6d 64 3d 24 6d 76 70 72 6f 67 0a =.mvcmd=$mvprog.
0aa0: 72 6d 63 6d 64 3d 22 24 72 6d 70 72 6f 67 20 2d rmcmd="$rmprog -
0ab0: 66 22 0a 73 74 72 69 70 63 6d 64 3d 0a 0a 73 72 f".stripcmd=..sr
0ac0: 63 3d 0a 64 73 74 3d 0a 64 69 72 5f 61 72 67 3d c=.dst=.dir_arg=
0ad0: 0a 64 73 74 5f 61 72 67 3d 0a 0a 63 6f 70 79 5f .dst_arg=..copy_
0ae0: 6f 6e 5f 63 68 61 6e 67 65 3d 66 61 6c 73 65 0a on_change=false.
0af0: 6e 6f 5f 74 61 72 67 65 74 5f 64 69 72 65 63 74 no_target_direct
0b00: 6f 72 79 3d 0a 0a 75 73 61 67 65 3d 22 5c 0a 55 ory=..usage="\.U
0b10: 73 61 67 65 3a 20 24 30 20 5b 4f 50 54 49 4f 4e sage: $0 [OPTION
0b20: 5d 2e 2e 2e 20 5b 2d 54 5d 20 53 52 43 46 49 4c ]... [-T] SRCFIL
0b30: 45 20 44 53 54 46 49 4c 45 0a 20 20 20 6f 72 3a E DSTFILE. or:
0b40: 20 24 30 20 5b 4f 50 54 49 4f 4e 5d 2e 2e 2e 20 $0 [OPTION]...
0b50: 53 52 43 46 49 4c 45 53 2e 2e 2e 20 44 49 52 45 SRCFILES... DIRE
0b60: 43 54 4f 52 59 0a 20 20 20 6f 72 3a 20 24 30 20 CTORY. or: $0
0b70: 5b 4f 50 54 49 4f 4e 5d 2e 2e 2e 20 2d 74 20 44 [OPTION]... -t D
0b80: 49 52 45 43 54 4f 52 59 20 53 52 43 46 49 4c 45 IRECTORY SRCFILE
0b90: 53 2e 2e 2e 0a 20 20 20 6f 72 3a 20 24 30 20 5b S.... or: $0 [
0ba0: 4f 50 54 49 4f 4e 5d 2e 2e 2e 20 2d 64 20 44 49 OPTION]... -d DI
0bb0: 52 45 43 54 4f 52 49 45 53 2e 2e 2e 0a 0a 49 6e RECTORIES.....In
0bc0: 20 74 68 65 20 31 73 74 20 66 6f 72 6d 2c 20 63 the 1st form, c
0bd0: 6f 70 79 20 53 52 43 46 49 4c 45 20 74 6f 20 44 opy SRCFILE to D
0be0: 53 54 46 49 4c 45 2e 0a 49 6e 20 74 68 65 20 32 STFILE..In the 2
0bf0: 6e 64 20 61 6e 64 20 33 72 64 2c 20 63 6f 70 79 nd and 3rd, copy
0c00: 20 61 6c 6c 20 53 52 43 46 49 4c 45 53 20 74 6f all SRCFILES to
0c10: 20 44 49 52 45 43 54 4f 52 59 2e 0a 49 6e 20 74 DIRECTORY..In t
0c20: 68 65 20 34 74 68 2c 20 63 72 65 61 74 65 20 44 he 4th, create D
0c30: 49 52 45 43 54 4f 52 49 45 53 2e 0a 0a 4f 70 74 IRECTORIES...Opt
0c40: 69 6f 6e 73 3a 0a 20 20 20 20 20 2d 2d 68 65 6c ions:. --hel
0c50: 70 20 20 20 20 20 64 69 73 70 6c 61 79 20 74 68 p display th
0c60: 69 73 20 68 65 6c 70 20 61 6e 64 20 65 78 69 74 is help and exit
0c70: 2e 0a 20 20 20 20 20 2d 2d 76 65 72 73 69 6f 6e .. --version
0c80: 20 20 64 69 73 70 6c 61 79 20 76 65 72 73 69 6f display versio
0c90: 6e 20 69 6e 66 6f 20 61 6e 64 20 65 78 69 74 2e n info and exit.
0ca0: 0a 0a 20 20 2d 63 20 20 20 20 20 20 20 20 20 20 .. -c
0cb0: 20 20 28 69 67 6e 6f 72 65 64 29 0a 20 20 2d 43 (ignored). -C
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 inst
0cd0: 61 6c 6c 20 6f 6e 6c 79 20 69 66 20 64 69 66 66 all only if diff
0ce0: 65 72 65 6e 74 20 28 70 72 65 73 65 72 76 65 20 erent (preserve
0cf0: 74 68 65 20 6c 61 73 74 20 64 61 74 61 20 6d 6f the last data mo
0d00: 64 69 66 69 63 61 74 69 6f 6e 20 74 69 6d 65 29 dification time)
0d10: 0a 20 20 2d 64 20 20 20 20 20 20 20 20 20 20 20 . -d
0d20: 20 63 72 65 61 74 65 20 64 69 72 65 63 74 6f 72 create director
0d30: 69 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 69 ies instead of i
0d40: 6e 73 74 61 6c 6c 69 6e 67 20 66 69 6c 65 73 2e nstalling files.
0d50: 0a 20 20 2d 67 20 47 52 4f 55 50 20 20 20 20 20 . -g GROUP
0d60: 20 24 63 68 67 72 70 70 72 6f 67 20 69 6e 73 74 $chgrpprog inst
0d70: 61 6c 6c 65 64 20 66 69 6c 65 73 20 74 6f 20 47 alled files to G
0d80: 52 4f 55 50 2e 0a 20 20 2d 6d 20 4d 4f 44 45 20 ROUP.. -m MODE
0d90: 20 20 20 20 20 20 24 63 68 6d 6f 64 70 72 6f 67 $chmodprog
0da0: 20 69 6e 73 74 61 6c 6c 65 64 20 66 69 6c 65 73 installed files
0db0: 20 74 6f 20 4d 4f 44 45 2e 0a 20 20 2d 6f 20 55 to MODE.. -o U
0dc0: 53 45 52 20 20 20 20 20 20 20 24 63 68 6f 77 6e SER $chown
0dd0: 70 72 6f 67 20 69 6e 73 74 61 6c 6c 65 64 20 66 prog installed f
0de0: 69 6c 65 73 20 74 6f 20 55 53 45 52 2e 0a 20 20 iles to USER..
0df0: 2d 73 20 20 20 20 20 20 20 20 20 20 20 20 24 73 -s $s
0e00: 74 72 69 70 70 72 6f 67 20 69 6e 73 74 61 6c 6c tripprog install
0e10: 65 64 20 66 69 6c 65 73 2e 0a 20 20 2d 74 20 44 ed files.. -t D
0e20: 49 52 45 43 54 4f 52 59 20 20 69 6e 73 74 61 6c IRECTORY instal
0e30: 6c 20 69 6e 74 6f 20 44 49 52 45 43 54 4f 52 59 l into DIRECTORY
0e40: 2e 0a 20 20 2d 54 20 20 20 20 20 20 20 20 20 20 .. -T
0e50: 20 20 72 65 70 6f 72 74 20 61 6e 20 65 72 72 6f report an erro
0e60: 72 20 69 66 20 44 53 54 46 49 4c 45 20 69 73 20 r if DSTFILE is
0e70: 61 20 64 69 72 65 63 74 6f 72 79 2e 0a 0a 45 6e a directory...En
0e80: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 vironment variab
0e90: 6c 65 73 20 6f 76 65 72 72 69 64 65 20 74 68 65 les override the
0ea0: 20 64 65 66 61 75 6c 74 20 63 6f 6d 6d 61 6e 64 default command
0eb0: 73 3a 0a 20 20 43 48 47 52 50 50 52 4f 47 20 43 s:. CHGRPPROG C
0ec0: 48 4d 4f 44 50 52 4f 47 20 43 48 4f 57 4e 50 52 HMODPROG CHOWNPR
0ed0: 4f 47 20 43 4d 50 50 52 4f 47 20 43 50 50 52 4f OG CMPPROG CPPRO
0ee0: 47 20 4d 4b 44 49 52 50 52 4f 47 20 4d 56 50 52 G MKDIRPROG MVPR
0ef0: 4f 47 0a 20 20 52 4d 50 52 4f 47 20 53 54 52 49 OG. RMPROG STRI
0f00: 50 50 52 4f 47 0a 22 0a 0a 77 68 69 6c 65 20 74 PPROG."..while t
0f10: 65 73 74 20 24 23 20 2d 6e 65 20 30 3b 20 64 6f est $# -ne 0; do
0f20: 0a 20 20 63 61 73 65 20 24 31 20 69 6e 0a 20 20 . case $1 in.
0f30: 20 20 2d 63 29 20 3b 3b 0a 0a 20 20 20 20 2d 43 -c) ;;.. -C
0f40: 29 20 63 6f 70 79 5f 6f 6e 5f 63 68 61 6e 67 65 ) copy_on_change
0f50: 3d 74 72 75 65 3b 3b 0a 0a 20 20 20 20 2d 64 29 =true;;.. -d)
0f60: 20 64 69 72 5f 61 72 67 3d 74 72 75 65 3b 3b 0a dir_arg=true;;.
0f70: 0a 20 20 20 20 2d 67 29 20 63 68 67 72 70 63 6d . -g) chgrpcm
0f80: 64 3d 22 24 63 68 67 72 70 70 72 6f 67 20 24 32 d="$chgrpprog $2
0f90: 22 0a 09 73 68 69 66 74 3b 3b 0a 0a 20 20 20 20 "..shift;;..
0fa0: 2d 2d 68 65 6c 70 29 20 65 63 68 6f 20 22 24 75 --help) echo "$u
0fb0: 73 61 67 65 22 3b 20 65 78 69 74 20 24 3f 3b 3b sage"; exit $?;;
0fc0: 0a 0a 20 20 20 20 2d 6d 29 20 6d 6f 64 65 3d 24 .. -m) mode=$
0fd0: 32 0a 09 63 61 73 65 20 24 6d 6f 64 65 20 69 6e 2..case $mode in
0fe0: 0a 09 20 20 2a 27 20 27 2a 20 7c 20 2a 27 09 27 .. *' '* | *'.'
0ff0: 2a 20 7c 20 2a 27 0a 27 2a 09 20 20 7c 20 2a 27 * | *'.'*. | *'
1000: 2a 27 2a 20 7c 20 2a 27 3f 27 2a 20 7c 20 2a 27 *'* | *'?'* | *'
1010: 5b 27 2a 29 0a 09 20 20 20 20 65 63 68 6f 20 22 ['*).. echo "
1020: 24 30 3a 20 69 6e 76 61 6c 69 64 20 6d 6f 64 65 $0: invalid mode
1030: 3a 20 24 6d 6f 64 65 22 20 3e 26 32 0a 09 20 20 : $mode" >&2..
1040: 20 20 65 78 69 74 20 31 3b 3b 0a 09 65 73 61 63 exit 1;;..esac
1050: 0a 09 73 68 69 66 74 3b 3b 0a 0a 20 20 20 20 2d ..shift;;.. -
1060: 6f 29 20 63 68 6f 77 6e 63 6d 64 3d 22 24 63 68 o) chowncmd="$ch
1070: 6f 77 6e 70 72 6f 67 20 24 32 22 0a 09 73 68 69 ownprog $2"..shi
1080: 66 74 3b 3b 0a 0a 20 20 20 20 2d 73 29 20 73 74 ft;;.. -s) st
1090: 72 69 70 63 6d 64 3d 24 73 74 72 69 70 70 72 6f ripcmd=$strippro
10a0: 67 3b 3b 0a 0a 20 20 20 20 2d 74 29 20 64 73 74 g;;.. -t) dst
10b0: 5f 61 72 67 3d 24 32 0a 09 73 68 69 66 74 3b 3b _arg=$2..shift;;
10c0: 0a 0a 20 20 20 20 2d 54 29 20 6e 6f 5f 74 61 72 .. -T) no_tar
10d0: 67 65 74 5f 64 69 72 65 63 74 6f 72 79 3d 74 72 get_directory=tr
10e0: 75 65 3b 3b 0a 0a 20 20 20 20 2d 2d 76 65 72 73 ue;;.. --vers
10f0: 69 6f 6e 29 20 65 63 68 6f 20 22 24 30 20 24 73 ion) echo "$0 $s
1100: 63 72 69 70 74 76 65 72 73 69 6f 6e 22 3b 20 65 criptversion"; e
1110: 78 69 74 20 24 3f 3b 3b 0a 0a 20 20 20 20 2d 2d xit $?;;.. --
1120: 29 09 73 68 69 66 74 0a 09 62 72 65 61 6b 3b 3b ).shift..break;;
1130: 0a 0a 20 20 20 20 2d 2a 29 09 65 63 68 6f 20 22 .. -*).echo "
1140: 24 30 3a 20 69 6e 76 61 6c 69 64 20 6f 70 74 69 $0: invalid opti
1150: 6f 6e 3a 20 24 31 22 20 3e 26 32 0a 09 65 78 69 on: $1" >&2..exi
1160: 74 20 31 3b 3b 0a 0a 20 20 20 20 2a 29 20 20 62 t 1;;.. *) b
1170: 72 65 61 6b 3b 3b 0a 20 20 65 73 61 63 0a 20 20 reak;;. esac.
1180: 73 68 69 66 74 0a 64 6f 6e 65 0a 0a 69 66 20 74 shift.done..if t
1190: 65 73 74 20 24 23 20 2d 6e 65 20 30 20 26 26 20 est $# -ne 0 &&
11a0: 74 65 73 74 20 2d 7a 20 22 24 64 69 72 5f 61 72 test -z "$dir_ar
11b0: 67 24 64 73 74 5f 61 72 67 22 3b 20 74 68 65 6e g$dst_arg"; then
11c0: 0a 20 20 23 20 57 68 65 6e 20 2d 64 20 69 73 20 . # When -d is
11d0: 75 73 65 64 2c 20 61 6c 6c 20 72 65 6d 61 69 6e used, all remain
11e0: 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 61 72 ing arguments ar
11f0: 65 20 64 69 72 65 63 74 6f 72 69 65 73 20 74 6f e directories to
1200: 20 63 72 65 61 74 65 2e 0a 20 20 23 20 57 68 65 create.. # Whe
1210: 6e 20 2d 74 20 69 73 20 75 73 65 64 2c 20 74 68 n -t is used, th
1220: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 73 e destination is
1230: 20 61 6c 72 65 61 64 79 20 73 70 65 63 69 66 69 already specifi
1240: 65 64 2e 0a 20 20 23 20 4f 74 68 65 72 77 69 73 ed.. # Otherwis
1250: 65 2c 20 74 68 65 20 6c 61 73 74 20 61 72 67 75 e, the last argu
1260: 6d 65 6e 74 20 69 73 20 74 68 65 20 64 65 73 74 ment is the dest
1270: 69 6e 61 74 69 6f 6e 2e 20 20 52 65 6d 6f 76 65 ination. Remove
1280: 20 69 74 20 66 72 6f 6d 20 24 40 2e 0a 20 20 66 it from $@.. f
1290: 6f 72 20 61 72 67 0a 20 20 64 6f 0a 20 20 20 20 or arg. do.
12a0: 69 66 20 74 65 73 74 20 2d 6e 20 22 24 64 73 74 if test -n "$dst
12b0: 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20 20 20 20 _arg"; then.
12c0: 20 20 23 20 24 40 20 69 73 20 6e 6f 74 20 65 6d # $@ is not em
12d0: 70 74 79 3a 20 69 74 20 63 6f 6e 74 61 69 6e 73 pty: it contains
12e0: 20 61 74 20 6c 65 61 73 74 20 24 61 72 67 2e 0a at least $arg..
12f0: 20 20 20 20 20 20 73 65 74 20 66 6e 6f 72 64 20 set fnord
1300: 22 24 40 22 20 22 24 64 73 74 5f 61 72 67 22 0a "$@" "$dst_arg".
1310: 20 20 20 20 20 20 73 68 69 66 74 20 23 20 66 6e shift # fn
1320: 6f 72 64 0a 20 20 20 20 66 69 0a 20 20 20 20 73 ord. fi. s
1330: 68 69 66 74 20 23 20 61 72 67 0a 20 20 20 20 64 hift # arg. d
1340: 73 74 5f 61 72 67 3d 24 61 72 67 0a 20 20 64 6f st_arg=$arg. do
1350: 6e 65 0a 66 69 0a 0a 69 66 20 74 65 73 74 20 24 ne.fi..if test $
1360: 23 20 2d 65 71 20 30 3b 20 74 68 65 6e 0a 20 20 # -eq 0; then.
1370: 69 66 20 74 65 73 74 20 2d 7a 20 22 24 64 69 72 if test -z "$dir
1380: 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20 20 20 20 _arg"; then.
1390: 65 63 68 6f 20 22 24 30 3a 20 6e 6f 20 69 6e 70 echo "$0: no inp
13a0: 75 74 20 66 69 6c 65 20 73 70 65 63 69 66 69 65 ut file specifie
13b0: 64 2e 22 20 3e 26 32 0a 20 20 20 20 65 78 69 74 d." >&2. exit
13c0: 20 31 0a 20 20 66 69 0a 20 20 23 20 49 74 27 73 1. fi. # It's
13d0: 20 4f 4b 20 74 6f 20 63 61 6c 6c 20 60 69 6e 73 OK to call `ins
13e0: 74 61 6c 6c 2d 73 68 20 2d 64 27 20 77 69 74 68 tall-sh -d' with
13f0: 6f 75 74 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20 out argument..
1400: 23 20 54 68 69 73 20 63 61 6e 20 68 61 70 70 65 # This can happe
1410: 6e 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 n when creating
1420: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 64 69 72 65 conditional dire
1430: 63 74 6f 72 69 65 73 2e 0a 20 20 65 78 69 74 20 ctories.. exit
1440: 30 0a 66 69 0a 0a 69 66 20 74 65 73 74 20 2d 7a 0.fi..if test -z
1450: 20 22 24 64 69 72 5f 61 72 67 22 3b 20 74 68 65 "$dir_arg"; the
1460: 6e 0a 20 20 74 72 61 70 20 27 28 65 78 69 74 20 n. trap '(exit
1470: 24 3f 29 3b 20 65 78 69 74 27 20 31 20 32 20 31 $?); exit' 1 2 1
1480: 33 20 31 35 0a 0a 20 20 23 20 53 65 74 20 75 6d 3 15.. # Set um
1490: 61 73 6b 20 73 6f 20 61 73 20 6e 6f 74 20 74 6f ask so as not to
14a0: 20 63 72 65 61 74 65 20 74 65 6d 70 73 20 77 69 create temps wi
14b0: 74 68 20 74 6f 6f 2d 67 65 6e 65 72 6f 75 73 20 th too-generous
14c0: 6d 6f 64 65 73 2e 0a 20 20 23 20 48 6f 77 65 76 modes.. # Howev
14d0: 65 72 2c 20 27 73 74 72 69 70 27 20 72 65 71 75 er, 'strip' requ
14e0: 69 72 65 73 20 62 6f 74 68 20 72 65 61 64 20 61 ires both read a
14f0: 6e 64 20 77 72 69 74 65 20 61 63 63 65 73 73 20 nd write access
1500: 74 6f 20 74 65 6d 70 73 2e 0a 20 20 63 61 73 65 to temps.. case
1510: 20 24 6d 6f 64 65 20 69 6e 0a 20 20 20 20 23 20 $mode in. #
1520: 4f 70 74 69 6d 69 7a 65 20 63 6f 6d 6d 6f 6e 20 Optimize common
1530: 63 61 73 65 73 2e 0a 20 20 20 20 2a 36 34 34 29 cases.. *644)
1540: 20 63 70 5f 75 6d 61 73 6b 3d 31 33 33 3b 3b 0a cp_umask=133;;.
1550: 20 20 20 20 2a 37 35 35 29 20 63 70 5f 75 6d 61 *755) cp_uma
1560: 73 6b 3d 32 32 3b 3b 0a 0a 20 20 20 20 2a 5b 30 sk=22;;.. *[0
1570: 2d 37 5d 29 0a 20 20 20 20 20 20 69 66 20 74 65 -7]). if te
1580: 73 74 20 2d 7a 20 22 24 73 74 72 69 70 63 6d 64 st -z "$stripcmd
1590: 22 3b 20 74 68 65 6e 0a 09 75 5f 70 6c 75 73 5f "; then..u_plus_
15a0: 72 77 3d 0a 20 20 20 20 20 20 65 6c 73 65 0a 09 rw=. else..
15b0: 75 5f 70 6c 75 73 5f 72 77 3d 27 25 20 32 30 30 u_plus_rw='% 200
15c0: 27 0a 20 20 20 20 20 20 66 69 0a 20 20 20 20 20 '. fi.
15d0: 20 63 70 5f 75 6d 61 73 6b 3d 60 65 78 70 72 20 cp_umask=`expr
15e0: 27 28 27 20 37 37 37 20 2d 20 24 6d 6f 64 65 20 '(' 777 - $mode
15f0: 25 20 31 30 30 30 20 27 29 27 20 24 75 5f 70 6c % 1000 ')' $u_pl
1600: 75 73 5f 72 77 60 3b 3b 0a 20 20 20 20 2a 29 0a us_rw`;;. *).
1610: 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2d 7a if test -z
1620: 20 22 24 73 74 72 69 70 63 6d 64 22 3b 20 74 68 "$stripcmd"; th
1630: 65 6e 0a 09 75 5f 70 6c 75 73 5f 72 77 3d 0a 20 en..u_plus_rw=.
1640: 20 20 20 20 20 65 6c 73 65 0a 09 75 5f 70 6c 75 else..u_plu
1650: 73 5f 72 77 3d 2c 75 2b 72 77 0a 20 20 20 20 20 s_rw=,u+rw.
1660: 20 66 69 0a 20 20 20 20 20 20 63 70 5f 75 6d 61 fi. cp_uma
1670: 73 6b 3d 24 6d 6f 64 65 24 75 5f 70 6c 75 73 5f sk=$mode$u_plus_
1680: 72 77 3b 3b 0a 20 20 65 73 61 63 0a 66 69 0a 0a rw;;. esac.fi..
1690: 66 6f 72 20 73 72 63 0a 64 6f 0a 20 20 23 20 50 for src.do. # P
16a0: 72 6f 74 65 63 74 20 6e 61 6d 65 73 20 73 74 61 rotect names sta
16b0: 72 74 69 6e 67 20 77 69 74 68 20 60 2d 27 2e 0a rting with `-'..
16c0: 20 20 63 61 73 65 20 24 73 72 63 20 69 6e 0a 20 case $src in.
16d0: 20 20 20 2d 2a 29 20 73 72 63 3d 2e 2f 24 73 72 -*) src=./$sr
16e0: 63 3b 3b 0a 20 20 65 73 61 63 0a 0a 20 20 69 66 c;;. esac.. if
16f0: 20 74 65 73 74 20 2d 6e 20 22 24 64 69 72 5f 61 test -n "$dir_a
1700: 72 67 22 3b 20 74 68 65 6e 0a 20 20 20 20 64 73 rg"; then. ds
1710: 74 3d 24 73 72 63 0a 20 20 20 20 64 73 74 64 69 t=$src. dstdi
1720: 72 3d 24 64 73 74 0a 20 20 20 20 74 65 73 74 20 r=$dst. test
1730: 2d 64 20 22 24 64 73 74 64 69 72 22 0a 20 20 20 -d "$dstdir".
1740: 20 64 73 74 64 69 72 5f 73 74 61 74 75 73 3d 24 dstdir_status=$
1750: 3f 0a 20 20 65 6c 73 65 0a 0a 20 20 20 20 23 20 ?. else.. #
1760: 57 61 69 74 69 6e 67 20 66 6f 72 20 74 68 69 73 Waiting for this
1770: 20 74 6f 20 62 65 20 64 65 74 65 63 74 65 64 20 to be detected
1780: 62 79 20 74 68 65 20 22 24 63 70 70 72 6f 67 20 by the "$cpprog
1790: 24 73 72 63 20 24 64 73 74 74 6d 70 22 20 63 6f $src $dsttmp" co
17a0: 6d 6d 61 6e 64 0a 20 20 20 20 23 20 6d 69 67 68 mmand. # migh
17b0: 74 20 63 61 75 73 65 20 64 69 72 65 63 74 6f 72 t cause director
17c0: 69 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 ies to be create
17d0: 64 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 62 d, which would b
17e0: 65 20 65 73 70 65 63 69 61 6c 6c 79 20 62 61 64 e especially bad
17f0: 0a 20 20 20 20 23 20 69 66 20 24 73 72 63 20 28 . # if $src (
1800: 61 6e 64 20 74 68 75 73 20 24 64 73 74 74 6d 70 and thus $dsttmp
1810: 29 20 63 6f 6e 74 61 69 6e 73 20 27 2a 27 2e 0a ) contains '*'..
1820: 20 20 20 20 69 66 20 74 65 73 74 20 21 20 2d 66 if test ! -f
1830: 20 22 24 73 72 63 22 20 26 26 20 74 65 73 74 20 "$src" && test
1840: 21 20 2d 64 20 22 24 73 72 63 22 3b 20 74 68 65 ! -d "$src"; the
1850: 6e 0a 20 20 20 20 20 20 65 63 68 6f 20 22 24 30 n. echo "$0
1860: 3a 20 24 73 72 63 20 64 6f 65 73 20 6e 6f 74 20 : $src does not
1870: 65 78 69 73 74 2e 22 20 3e 26 32 0a 20 20 20 20 exist." >&2.
1880: 20 20 65 78 69 74 20 31 0a 20 20 20 20 66 69 0a exit 1. fi.
1890: 0a 20 20 20 20 69 66 20 74 65 73 74 20 2d 7a 20 . if test -z
18a0: 22 24 64 73 74 5f 61 72 67 22 3b 20 74 68 65 6e "$dst_arg"; then
18b0: 0a 20 20 20 20 20 20 65 63 68 6f 20 22 24 30 3a . echo "$0:
18c0: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 no destination
18d0: 73 70 65 63 69 66 69 65 64 2e 22 20 3e 26 32 0a specified." >&2.
18e0: 20 20 20 20 20 20 65 78 69 74 20 31 0a 20 20 20 exit 1.
18f0: 20 66 69 0a 0a 20 20 20 20 64 73 74 3d 24 64 73 fi.. dst=$ds
1900: 74 5f 61 72 67 0a 20 20 20 20 23 20 50 72 6f 74 t_arg. # Prot
1910: 65 63 74 20 6e 61 6d 65 73 20 73 74 61 72 74 69 ect names starti
1920: 6e 67 20 77 69 74 68 20 60 2d 27 2e 0a 20 20 20 ng with `-'..
1930: 20 63 61 73 65 20 24 64 73 74 20 69 6e 0a 20 20 case $dst in.
1940: 20 20 20 20 2d 2a 29 20 64 73 74 3d 2e 2f 24 64 -*) dst=./$d
1950: 73 74 3b 3b 0a 20 20 20 20 65 73 61 63 0a 0a 20 st;;. esac..
1960: 20 20 20 23 20 49 66 20 64 65 73 74 69 6e 61 74 # If destinat
1970: 69 6f 6e 20 69 73 20 61 20 64 69 72 65 63 74 6f ion is a directo
1980: 72 79 2c 20 61 70 70 65 6e 64 20 74 68 65 20 69 ry, append the i
1990: 6e 70 75 74 20 66 69 6c 65 6e 61 6d 65 3b 20 77 nput filename; w
19a0: 6f 6e 27 74 20 77 6f 72 6b 0a 20 20 20 20 23 20 on't work. #
19b0: 69 66 20 64 6f 75 62 6c 65 20 73 6c 61 73 68 65 if double slashe
19c0: 73 20 61 72 65 6e 27 74 20 69 67 6e 6f 72 65 64 s aren't ignored
19d0: 2e 0a 20 20 20 20 69 66 20 74 65 73 74 20 2d 64 .. if test -d
19e0: 20 22 24 64 73 74 22 3b 20 74 68 65 6e 0a 20 20 "$dst"; then.
19f0: 20 20 20 20 69 66 20 74 65 73 74 20 2d 6e 20 22 if test -n "
1a00: 24 6e 6f 5f 74 61 72 67 65 74 5f 64 69 72 65 63 $no_target_direc
1a10: 74 6f 72 79 22 3b 20 74 68 65 6e 0a 09 65 63 68 tory"; then..ech
1a20: 6f 20 22 24 30 3a 20 24 64 73 74 5f 61 72 67 3a o "$0: $dst_arg:
1a30: 20 49 73 20 61 20 64 69 72 65 63 74 6f 72 79 22 Is a directory"
1a40: 20 3e 26 32 0a 09 65 78 69 74 20 31 0a 20 20 20 >&2..exit 1.
1a50: 20 20 20 66 69 0a 20 20 20 20 20 20 64 73 74 64 fi. dstd
1a60: 69 72 3d 24 64 73 74 0a 20 20 20 20 20 20 64 73 ir=$dst. ds
1a70: 74 3d 24 64 73 74 64 69 72 2f 60 62 61 73 65 6e t=$dstdir/`basen
1a80: 61 6d 65 20 22 24 73 72 63 22 60 0a 20 20 20 20 ame "$src"`.
1a90: 20 20 64 73 74 64 69 72 5f 73 74 61 74 75 73 3d dstdir_status=
1aa0: 30 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 0. else.
1ab0: 20 23 20 50 72 65 66 65 72 20 64 69 72 6e 61 6d # Prefer dirnam
1ac0: 65 2c 20 62 75 74 20 66 61 6c 6c 20 62 61 63 6b e, but fall back
1ad0: 20 6f 6e 20 61 20 73 75 62 73 74 69 74 75 74 65 on a substitute
1ae0: 20 69 66 20 64 69 72 6e 61 6d 65 20 66 61 69 6c if dirname fail
1af0: 73 2e 0a 20 20 20 20 20 20 64 73 74 64 69 72 3d s.. dstdir=
1b00: 60 0a 09 28 64 69 72 6e 61 6d 65 20 22 24 64 73 `..(dirname "$ds
1b10: 74 22 29 20 32 3e 2f 64 65 76 2f 6e 75 6c 6c 20 t") 2>/dev/null
1b20: 7c 7c 0a 09 65 78 70 72 20 58 22 24 64 73 74 22 ||..expr X"$dst"
1b30: 20 3a 20 27 58 5c 28 2e 2a 5b 5e 2f 5d 5c 29 2f : 'X\(.*[^/]\)/
1b40: 2f 2a 5b 5e 2f 5d 5b 5e 2f 5d 2a 2f 2a 24 27 20 /*[^/][^/]*/*$'
1b50: 5c 7c 20 5c 0a 09 20 20 20 20 20 58 22 24 64 73 \| \.. X"$ds
1b60: 74 22 20 3a 20 27 58 5c 28 2f 2f 5c 29 5b 5e 2f t" : 'X\(//\)[^/
1b70: 5d 27 20 5c 7c 20 5c 0a 09 20 20 20 20 20 58 22 ]' \| \.. X"
1b80: 24 64 73 74 22 20 3a 20 27 58 5c 28 2f 2f 5c 29 $dst" : 'X\(//\)
1b90: 24 27 20 5c 7c 20 5c 0a 09 20 20 20 20 20 58 22 $' \| \.. X"
1ba0: 24 64 73 74 22 20 3a 20 27 58 5c 28 2f 5c 29 27 $dst" : 'X\(/\)'
1bb0: 20 5c 7c 20 2e 20 32 3e 2f 64 65 76 2f 6e 75 6c \| . 2>/dev/nul
1bc0: 6c 20 7c 7c 0a 09 65 63 68 6f 20 58 22 24 64 73 l ||..echo X"$ds
1bd0: 74 22 20 7c 0a 09 20 20 20 20 73 65 64 20 27 2f t" |.. sed '/
1be0: 5e 58 5c 28 2e 2a 5b 5e 2f 5d 5c 29 5c 2f 5c 2f ^X\(.*[^/]\)\/\/
1bf0: 2a 5b 5e 2f 5d 5b 5e 2f 5d 2a 5c 2f 2a 24 2f 7b *[^/][^/]*\/*$/{
1c00: 0a 09 09 20 20 20 73 2f 2f 5c 31 2f 0a 09 09 20 ... s//\1/...
1c10: 20 20 71 0a 09 09 20 7d 0a 09 09 20 2f 5e 58 5c q... }... /^X\
1c20: 28 5c 2f 5c 2f 5c 29 5b 5e 2f 5d 2e 2a 2f 7b 0a (\/\/\)[^/].*/{.
1c30: 09 09 20 20 20 73 2f 2f 5c 31 2f 0a 09 09 20 20 .. s//\1/...
1c40: 20 71 0a 09 09 20 7d 0a 09 09 20 2f 5e 58 5c 28 q... }... /^X\(
1c50: 5c 2f 5c 2f 5c 29 24 2f 7b 0a 09 09 20 20 20 73 \/\/\)$/{... s
1c60: 2f 2f 5c 31 2f 0a 09 09 20 20 20 71 0a 09 09 20 //\1/... q...
1c70: 7d 0a 09 09 20 2f 5e 58 5c 28 5c 2f 5c 29 2e 2a }... /^X\(\/\).*
1c80: 2f 7b 0a 09 09 20 20 20 73 2f 2f 5c 31 2f 0a 09 /{... s//\1/..
1c90: 09 20 20 20 71 0a 09 09 20 7d 0a 09 09 20 73 2f . q... }... s/
1ca0: 2e 2a 2f 2e 2f 3b 20 71 27 0a 20 20 20 20 20 20 .*/./; q'.
1cb0: 60 0a 0a 20 20 20 20 20 20 74 65 73 74 20 2d 64 `.. test -d
1cc0: 20 22 24 64 73 74 64 69 72 22 0a 20 20 20 20 20 "$dstdir".
1cd0: 20 64 73 74 64 69 72 5f 73 74 61 74 75 73 3d 24 dstdir_status=$
1ce0: 3f 0a 20 20 20 20 66 69 0a 20 20 66 69 0a 0a 20 ?. fi. fi..
1cf0: 20 6f 62 73 6f 6c 65 74 65 5f 6d 6b 64 69 72 5f obsolete_mkdir_
1d00: 75 73 65 64 3d 66 61 6c 73 65 0a 0a 20 20 69 66 used=false.. if
1d10: 20 74 65 73 74 20 24 64 73 74 64 69 72 5f 73 74 test $dstdir_st
1d20: 61 74 75 73 20 21 3d 20 30 3b 20 74 68 65 6e 0a atus != 0; then.
1d30: 20 20 20 20 63 61 73 65 20 24 70 6f 73 69 78 5f case $posix_
1d40: 6d 6b 64 69 72 20 69 6e 0a 20 20 20 20 20 20 27 mkdir in. '
1d50: 27 29 0a 09 23 20 43 72 65 61 74 65 20 69 6e 74 ')..# Create int
1d60: 65 72 6d 65 64 69 61 74 65 20 64 69 72 73 20 75 ermediate dirs u
1d70: 73 69 6e 67 20 6d 6f 64 65 20 37 35 35 20 61 73 sing mode 755 as
1d80: 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 modified by the
1d90: 20 75 6d 61 73 6b 2e 0a 09 23 20 54 68 69 73 20 umask...# This
1da0: 69 73 20 6c 69 6b 65 20 46 72 65 65 42 53 44 20 is like FreeBSD
1db0: 27 69 6e 73 74 61 6c 6c 27 20 61 73 20 6f 66 20 'install' as of
1dc0: 31 39 39 37 2d 31 30 2d 32 38 2e 0a 09 75 6d 61 1997-10-28...uma
1dd0: 73 6b 3d 60 75 6d 61 73 6b 60 0a 09 63 61 73 65 sk=`umask`..case
1de0: 20 24 73 74 72 69 70 63 6d 64 2e 24 75 6d 61 73 $stripcmd.$umas
1df0: 6b 20 69 6e 0a 09 20 20 23 20 4f 70 74 69 6d 69 k in.. # Optimi
1e00: 7a 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 73 2e ze common cases.
1e10: 0a 09 20 20 2a 5b 32 33 36 37 5d 5b 32 33 36 37 .. *[2367][2367
1e20: 5d 29 20 6d 6b 64 69 72 5f 75 6d 61 73 6b 3d 24 ]) mkdir_umask=$
1e30: 75 6d 61 73 6b 3b 3b 0a 09 20 20 2e 2a 30 5b 30 umask;;.. .*0[0
1e40: 32 5d 5b 30 32 5d 20 7c 20 2e 5b 30 32 5d 5b 30 2][02] | .[02][0
1e50: 32 5d 20 7c 20 2e 5b 30 32 5d 29 20 6d 6b 64 69 2] | .[02]) mkdi
1e60: 72 5f 75 6d 61 73 6b 3d 32 32 3b 3b 0a 0a 09 20 r_umask=22;;...
1e70: 20 2a 5b 30 2d 37 5d 29 0a 09 20 20 20 20 6d 6b *[0-7]).. mk
1e80: 64 69 72 5f 75 6d 61 73 6b 3d 60 65 78 70 72 20 dir_umask=`expr
1e90: 24 75 6d 61 73 6b 20 2b 20 32 32 20 5c 0a 09 20 $umask + 22 \..
1ea0: 20 20 20 20 20 2d 20 24 75 6d 61 73 6b 20 25 20 - $umask %
1eb0: 31 30 30 20 25 20 34 30 20 2b 20 24 75 6d 61 73 100 % 40 + $umas
1ec0: 6b 20 25 20 32 30 20 5c 0a 09 20 20 20 20 20 20 k % 20 \..
1ed0: 2d 20 24 75 6d 61 73 6b 20 25 20 31 30 20 25 20 - $umask % 10 %
1ee0: 34 20 2b 20 24 75 6d 61 73 6b 20 25 20 32 0a 09 4 + $umask % 2..
1ef0: 20 20 20 20 60 3b 3b 0a 09 20 20 2a 29 20 6d 6b `;;.. *) mk
1f00: 64 69 72 5f 75 6d 61 73 6b 3d 24 75 6d 61 73 6b dir_umask=$umask
1f10: 2c 67 6f 2d 77 3b 3b 0a 09 65 73 61 63 0a 0a 09 ,go-w;;..esac...
1f20: 23 20 57 69 74 68 20 2d 64 2c 20 63 72 65 61 74 # With -d, creat
1f30: 65 20 74 68 65 20 6e 65 77 20 64 69 72 65 63 74 e the new direct
1f40: 6f 72 79 20 77 69 74 68 20 74 68 65 20 75 73 65 ory with the use
1f50: 72 2d 73 70 65 63 69 66 69 65 64 20 6d 6f 64 65 r-specified mode
1f60: 2e 0a 09 23 20 4f 74 68 65 72 77 69 73 65 2c 20 ...# Otherwise,
1f70: 72 65 6c 79 20 6f 6e 20 24 6d 6b 64 69 72 5f 75 rely on $mkdir_u
1f80: 6d 61 73 6b 2e 0a 09 69 66 20 74 65 73 74 20 2d mask...if test -
1f90: 6e 20 22 24 64 69 72 5f 61 72 67 22 3b 20 74 68 n "$dir_arg"; th
1fa0: 65 6e 0a 09 20 20 6d 6b 64 69 72 5f 6d 6f 64 65 en.. mkdir_mode
1fb0: 3d 2d 6d 24 6d 6f 64 65 0a 09 65 6c 73 65 0a 09 =-m$mode..else..
1fc0: 20 20 6d 6b 64 69 72 5f 6d 6f 64 65 3d 0a 09 66 mkdir_mode=..f
1fd0: 69 0a 0a 09 70 6f 73 69 78 5f 6d 6b 64 69 72 3d i...posix_mkdir=
1fe0: 66 61 6c 73 65 0a 09 63 61 73 65 20 24 75 6d 61 false..case $uma
1ff0: 73 6b 20 69 6e 0a 09 20 20 2a 5b 31 32 33 35 36 sk in.. *[12356
2000: 37 5d 5b 30 2d 37 5d 5b 30 2d 37 5d 29 0a 09 20 7][0-7][0-7])..
2010: 20 20 20 23 20 50 4f 53 49 58 20 6d 6b 64 69 72 # POSIX mkdir
2020: 20 2d 70 20 73 65 74 73 20 75 2b 77 78 20 62 69 -p sets u+wx bi
2030: 74 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 ts regardless of
2040: 20 75 6d 61 73 6b 2c 20 77 68 69 63 68 0a 09 20 umask, which..
2050: 20 20 20 23 20 69 73 20 69 6e 63 6f 6d 70 61 74 # is incompat
2060: 69 62 6c 65 20 77 69 74 68 20 46 72 65 65 42 53 ible with FreeBS
2070: 44 20 27 69 6e 73 74 61 6c 6c 27 20 77 68 65 6e D 'install' when
2080: 20 28 75 6d 61 73 6b 20 26 20 33 30 30 29 20 21 (umask & 300) !
2090: 3d 20 30 2e 0a 09 20 20 20 20 3b 3b 0a 09 20 20 = 0... ;;..
20a0: 2a 29 0a 09 20 20 20 20 74 6d 70 64 69 72 3d 24 *).. tmpdir=$
20b0: 7b 54 4d 50 44 49 52 2d 2f 74 6d 70 7d 2f 69 6e {TMPDIR-/tmp}/in
20c0: 73 24 52 41 4e 44 4f 4d 2d 24 24 0a 09 20 20 20 s$RANDOM-$$..
20d0: 20 74 72 61 70 20 27 72 65 74 3d 24 3f 3b 20 72 trap 'ret=$?; r
20e0: 6d 64 69 72 20 22 24 74 6d 70 64 69 72 2f 64 22 mdir "$tmpdir/d"
20f0: 20 22 24 74 6d 70 64 69 72 22 20 32 3e 2f 64 65 "$tmpdir" 2>/de
2100: 76 2f 6e 75 6c 6c 3b 20 65 78 69 74 20 24 72 65 v/null; exit $re
2110: 74 27 20 30 0a 0a 09 20 20 20 20 69 66 20 28 75 t' 0... if (u
2120: 6d 61 73 6b 20 24 6d 6b 64 69 72 5f 75 6d 61 73 mask $mkdir_umas
2130: 6b 20 26 26 0a 09 09 65 78 65 63 20 24 6d 6b 64 k &&...exec $mkd
2140: 69 72 70 72 6f 67 20 24 6d 6b 64 69 72 5f 6d 6f irprog $mkdir_mo
2150: 64 65 20 2d 70 20 2d 2d 20 22 24 74 6d 70 64 69 de -p -- "$tmpdi
2160: 72 2f 64 22 29 20 3e 2f 64 65 76 2f 6e 75 6c 6c r/d") >/dev/null
2170: 20 32 3e 26 31 0a 09 20 20 20 20 74 68 65 6e 0a 2>&1.. then.
2180: 09 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2d . if test -
2190: 7a 20 22 24 64 69 72 5f 61 72 67 22 20 7c 7c 20 z "$dir_arg" ||
21a0: 7b 0a 09 09 20 20 20 23 20 43 68 65 63 6b 20 66 {... # Check f
21b0: 6f 72 20 50 4f 53 49 58 20 69 6e 63 6f 6d 70 61 or POSIX incompa
21c0: 74 69 62 69 6c 69 74 69 65 73 20 77 69 74 68 20 tibilities with
21d0: 2d 6d 2e 0a 09 09 20 20 20 23 20 48 50 2d 55 58 -m.... # HP-UX
21e0: 20 31 31 2e 32 33 20 61 6e 64 20 49 52 49 58 20 11.23 and IRIX
21f0: 36 2e 35 20 6d 6b 64 69 72 20 2d 6d 20 2d 70 20 6.5 mkdir -m -p
2200: 73 65 74 73 20 67 72 6f 75 70 2d 20 6f 72 0a 09 sets group- or..
2210: 09 20 20 20 23 20 6f 74 68 65 72 2d 77 72 69 74 . # other-writ
2220: 65 61 62 6c 65 20 62 69 74 20 6f 66 20 70 61 72 eable bit of par
2230: 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 77 68 ent directory wh
2240: 65 6e 20 69 74 20 73 68 6f 75 6c 64 6e 27 74 2e en it shouldn't.
2250: 0a 09 09 20 20 20 23 20 46 72 65 65 42 53 44 20 ... # FreeBSD
2260: 36 2e 31 20 6d 6b 64 69 72 20 2d 6d 20 2d 70 20 6.1 mkdir -m -p
2270: 73 65 74 73 20 6d 6f 64 65 20 6f 66 20 65 78 69 sets mode of exi
2280: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2e sting directory.
2290: 0a 09 09 20 20 20 6c 73 5f 6c 64 5f 74 6d 70 64 ... ls_ld_tmpd
22a0: 69 72 3d 60 6c 73 20 2d 6c 64 20 22 24 74 6d 70 ir=`ls -ld "$tmp
22b0: 64 69 72 22 60 0a 09 09 20 20 20 63 61 73 65 20 dir"`... case
22c0: 24 6c 73 5f 6c 64 5f 74 6d 70 64 69 72 20 69 6e $ls_ld_tmpdir in
22d0: 0a 09 09 20 20 20 20 20 64 3f 3f 3f 3f 2d 3f 72 ... d????-?r
22e0: 2d 2a 29 20 64 69 66 66 65 72 65 6e 74 5f 6d 6f -*) different_mo
22f0: 64 65 3d 37 30 30 3b 3b 0a 09 09 20 20 20 20 20 de=700;;...
2300: 64 3f 3f 3f 3f 2d 3f 2d 2d 2a 29 20 64 69 66 66 d????-?--*) diff
2310: 65 72 65 6e 74 5f 6d 6f 64 65 3d 37 35 35 3b 3b erent_mode=755;;
2320: 0a 09 09 20 20 20 20 20 2a 29 20 66 61 6c 73 65 ... *) false
2330: 3b 3b 0a 09 09 20 20 20 65 73 61 63 20 26 26 0a ;;... esac &&.
2340: 09 09 20 20 20 24 6d 6b 64 69 72 70 72 6f 67 20 .. $mkdirprog
2350: 2d 6d 24 64 69 66 66 65 72 65 6e 74 5f 6d 6f 64 -m$different_mod
2360: 65 20 2d 70 20 2d 2d 20 22 24 74 6d 70 64 69 72 e -p -- "$tmpdir
2370: 22 20 26 26 20 7b 0a 09 09 20 20 20 20 20 6c 73 " && {... ls
2380: 5f 6c 64 5f 74 6d 70 64 69 72 5f 31 3d 60 6c 73 _ld_tmpdir_1=`ls
2390: 20 2d 6c 64 20 22 24 74 6d 70 64 69 72 22 60 0a -ld "$tmpdir"`.
23a0: 09 09 20 20 20 20 20 74 65 73 74 20 22 24 6c 73 .. test "$ls
23b0: 5f 6c 64 5f 74 6d 70 64 69 72 22 20 3d 20 22 24 _ld_tmpdir" = "$
23c0: 6c 73 5f 6c 64 5f 74 6d 70 64 69 72 5f 31 22 0a ls_ld_tmpdir_1".
23d0: 09 09 20 20 20 7d 0a 09 09 20 7d 0a 09 20 20 20 .. }... }..
23e0: 20 20 20 74 68 65 6e 20 70 6f 73 69 78 5f 6d 6b then posix_mk
23f0: 64 69 72 3d 3a 0a 09 20 20 20 20 20 20 66 69 0a dir=:.. fi.
2400: 09 20 20 20 20 20 20 72 6d 64 69 72 20 22 24 74 . rmdir "$t
2410: 6d 70 64 69 72 2f 64 22 20 22 24 74 6d 70 64 69 mpdir/d" "$tmpdi
2420: 72 22 0a 09 20 20 20 20 65 6c 73 65 0a 09 20 20 r".. else..
2430: 20 20 20 20 23 20 52 65 6d 6f 76 65 20 61 6e 79 # Remove any
2440: 20 64 69 72 73 20 6c 65 66 74 20 62 65 68 69 6e dirs left behin
2450: 64 20 62 79 20 61 6e 63 69 65 6e 74 20 6d 6b 64 d by ancient mkd
2460: 69 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f ir implementatio
2470: 6e 73 2e 0a 09 20 20 20 20 20 20 72 6d 64 69 72 ns... rmdir
2480: 20 2e 2f 24 6d 6b 64 69 72 5f 6d 6f 64 65 20 2e ./$mkdir_mode .
2490: 2f 2d 70 20 2e 2f 2d 2d 20 32 3e 2f 64 65 76 2f /-p ./-- 2>/dev/
24a0: 6e 75 6c 6c 0a 09 20 20 20 20 66 69 0a 09 20 20 null.. fi..
24b0: 20 20 74 72 61 70 20 27 27 20 30 3b 3b 0a 09 65 trap '' 0;;..e
24c0: 73 61 63 3b 3b 0a 20 20 20 20 65 73 61 63 0a 0a sac;;. esac..
24d0: 20 20 20 20 69 66 0a 20 20 20 20 20 20 24 70 6f if. $po
24e0: 73 69 78 5f 6d 6b 64 69 72 20 26 26 20 28 0a 09 six_mkdir && (..
24f0: 75 6d 61 73 6b 20 24 6d 6b 64 69 72 5f 75 6d 61 umask $mkdir_uma
2500: 73 6b 20 26 26 0a 09 24 64 6f 69 74 5f 65 78 65 sk &&..$doit_exe
2510: 63 20 24 6d 6b 64 69 72 70 72 6f 67 20 24 6d 6b c $mkdirprog $mk
2520: 64 69 72 5f 6d 6f 64 65 20 2d 70 20 2d 2d 20 22 dir_mode -p -- "
2530: 24 64 73 74 64 69 72 22 0a 20 20 20 20 20 20 29 $dstdir". )
2540: 0a 20 20 20 20 74 68 65 6e 20 3a 0a 20 20 20 20 . then :.
2550: 65 6c 73 65 0a 0a 20 20 20 20 20 20 23 20 54 68 else.. # Th
2560: 65 20 75 6d 61 73 6b 20 69 73 20 72 69 64 69 63 e umask is ridic
2570: 75 6c 6f 75 73 2c 20 6f 72 20 6d 6b 64 69 72 20 ulous, or mkdir
2580: 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 66 6f 72 6d does not conform
2590: 20 74 6f 20 50 4f 53 49 58 2c 0a 20 20 20 20 20 to POSIX,.
25a0: 20 23 20 6f 72 20 69 74 20 66 61 69 6c 65 64 20 # or it failed
25b0: 70 6f 73 73 69 62 6c 79 20 64 75 65 20 74 6f 20 possibly due to
25c0: 61 20 72 61 63 65 20 63 6f 6e 64 69 74 69 6f 6e a race condition
25d0: 2e 20 20 43 72 65 61 74 65 20 74 68 65 0a 20 20 . Create the.
25e0: 20 20 20 20 23 20 64 69 72 65 63 74 6f 72 79 20 # directory
25f0: 74 68 65 20 73 6c 6f 77 20 77 61 79 2c 20 73 74 the slow way, st
2600: 65 70 20 62 79 20 73 74 65 70 2c 20 63 68 65 63 ep by step, chec
2610: 6b 69 6e 67 20 66 6f 72 20 72 61 63 65 73 20 61 king for races a
2620: 73 20 77 65 20 67 6f 2e 0a 0a 20 20 20 20 20 20 s we go...
2630: 63 61 73 65 20 24 64 73 74 64 69 72 20 69 6e 0a case $dstdir in.
2640: 09 2f 2a 29 20 70 72 65 66 69 78 3d 27 2f 27 3b ./*) prefix='/';
2650: 3b 0a 09 2d 2a 29 20 70 72 65 66 69 78 3d 27 2e ;..-*) prefix='.
2660: 2f 27 3b 3b 0a 09 2a 29 20 20 70 72 65 66 69 78 /';;..*) prefix
2670: 3d 27 27 3b 3b 0a 20 20 20 20 20 20 65 73 61 63 ='';;. esac
2680: 0a 0a 20 20 20 20 20 20 65 76 61 6c 20 22 24 69 .. eval "$i
2690: 6e 69 74 69 61 6c 69 7a 65 5f 70 6f 73 69 78 5f nitialize_posix_
26a0: 67 6c 6f 62 22 0a 0a 20 20 20 20 20 20 6f 49 46 glob".. oIF
26b0: 53 3d 24 49 46 53 0a 20 20 20 20 20 20 49 46 53 S=$IFS. IFS
26c0: 3d 2f 0a 20 20 20 20 20 20 24 70 6f 73 69 78 5f =/. $posix_
26d0: 67 6c 6f 62 20 73 65 74 20 2d 66 0a 20 20 20 20 glob set -f.
26e0: 20 20 73 65 74 20 66 6e 6f 72 64 20 24 64 73 74 set fnord $dst
26f0: 64 69 72 0a 20 20 20 20 20 20 73 68 69 66 74 0a dir. shift.
2700: 20 20 20 20 20 20 24 70 6f 73 69 78 5f 67 6c 6f $posix_glo
2710: 62 20 73 65 74 20 2b 66 0a 20 20 20 20 20 20 49 b set +f. I
2720: 46 53 3d 24 6f 49 46 53 0a 0a 20 20 20 20 20 20 FS=$oIFS..
2730: 70 72 65 66 69 78 65 73 3d 0a 0a 20 20 20 20 20 prefixes=..
2740: 20 66 6f 72 20 64 0a 20 20 20 20 20 20 64 6f 0a for d. do.
2750: 09 74 65 73 74 20 2d 7a 20 22 24 64 22 20 26 26 .test -z "$d" &&
2760: 20 63 6f 6e 74 69 6e 75 65 0a 0a 09 70 72 65 66 continue...pref
2770: 69 78 3d 24 70 72 65 66 69 78 24 64 0a 09 69 66 ix=$prefix$d..if
2780: 20 74 65 73 74 20 2d 64 20 22 24 70 72 65 66 69 test -d "$prefi
2790: 78 22 3b 20 74 68 65 6e 0a 09 20 20 70 72 65 66 x"; then.. pref
27a0: 69 78 65 73 3d 0a 09 65 6c 73 65 0a 09 20 20 69 ixes=..else.. i
27b0: 66 20 24 70 6f 73 69 78 5f 6d 6b 64 69 72 3b 20 f $posix_mkdir;
27c0: 74 68 65 6e 0a 09 20 20 20 20 28 75 6d 61 73 6b then.. (umask
27d0: 3d 24 6d 6b 64 69 72 5f 75 6d 61 73 6b 20 26 26 =$mkdir_umask &&
27e0: 0a 09 20 20 20 20 20 24 64 6f 69 74 5f 65 78 65 .. $doit_exe
27f0: 63 20 24 6d 6b 64 69 72 70 72 6f 67 20 24 6d 6b c $mkdirprog $mk
2800: 64 69 72 5f 6d 6f 64 65 20 2d 70 20 2d 2d 20 22 dir_mode -p -- "
2810: 24 64 73 74 64 69 72 22 29 20 26 26 20 62 72 65 $dstdir") && bre
2820: 61 6b 0a 09 20 20 20 20 23 20 44 6f 6e 27 74 20 ak.. # Don't
2830: 66 61 69 6c 20 69 66 20 74 77 6f 20 69 6e 73 74 fail if two inst
2840: 61 6e 63 65 73 20 61 72 65 20 72 75 6e 6e 69 6e ances are runnin
2850: 67 20 63 6f 6e 63 75 72 72 65 6e 74 6c 79 2e 0a g concurrently..
2860: 09 20 20 20 20 74 65 73 74 20 2d 64 20 22 24 70 . test -d "$p
2870: 72 65 66 69 78 22 20 7c 7c 20 65 78 69 74 20 31 refix" || exit 1
2880: 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 63 61 .. else.. ca
2890: 73 65 20 24 70 72 65 66 69 78 20 69 6e 0a 09 20 se $prefix in..
28a0: 20 20 20 20 20 2a 5c 27 2a 29 20 71 70 72 65 66 *\'*) qpref
28b0: 69 78 3d 60 65 63 68 6f 20 22 24 70 72 65 66 69 ix=`echo "$prefi
28c0: 78 22 20 7c 20 73 65 64 20 22 73 2f 27 2f 27 5c x" | sed "s/'/'\
28d0: 5c 5c 5c 5c 5c 5c 5c 27 27 2f 67 22 60 3b 3b 0a \\\\\\\''/g"`;;.
28e0: 09 20 20 20 20 20 20 2a 29 20 71 70 72 65 66 69 . *) qprefi
28f0: 78 3d 24 70 72 65 66 69 78 3b 3b 0a 09 20 20 20 x=$prefix;;..
2900: 20 65 73 61 63 0a 09 20 20 20 20 70 72 65 66 69 esac.. prefi
2910: 78 65 73 3d 22 24 70 72 65 66 69 78 65 73 20 27 xes="$prefixes '
2920: 24 71 70 72 65 66 69 78 27 22 0a 09 20 20 66 69 $qprefix'".. fi
2930: 0a 09 66 69 0a 09 70 72 65 66 69 78 3d 24 70 72 ..fi..prefix=$pr
2940: 65 66 69 78 2f 0a 20 20 20 20 20 20 64 6f 6e 65 efix/. done
2950: 0a 0a 20 20 20 20 20 20 69 66 20 74 65 73 74 20 .. if test
2960: 2d 6e 20 22 24 70 72 65 66 69 78 65 73 22 3b 20 -n "$prefixes";
2970: 74 68 65 6e 0a 09 23 20 44 6f 6e 27 74 20 66 61 then..# Don't fa
2980: 69 6c 20 69 66 20 74 77 6f 20 69 6e 73 74 61 6e il if two instan
2990: 63 65 73 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 ces are running
29a0: 63 6f 6e 63 75 72 72 65 6e 74 6c 79 2e 0a 09 28 concurrently...(
29b0: 75 6d 61 73 6b 20 24 6d 6b 64 69 72 5f 75 6d 61 umask $mkdir_uma
29c0: 73 6b 20 26 26 0a 09 20 65 76 61 6c 20 22 5c 24 sk &&.. eval "\$
29d0: 64 6f 69 74 5f 65 78 65 63 20 5c 24 6d 6b 64 69 doit_exec \$mkdi
29e0: 72 70 72 6f 67 20 24 70 72 65 66 69 78 65 73 22 rprog $prefixes"
29f0: 29 20 7c 7c 0a 09 20 20 74 65 73 74 20 2d 64 20 ) ||.. test -d
2a00: 22 24 64 73 74 64 69 72 22 20 7c 7c 20 65 78 69 "$dstdir" || exi
2a10: 74 20 31 0a 09 6f 62 73 6f 6c 65 74 65 5f 6d 6b t 1..obsolete_mk
2a20: 64 69 72 5f 75 73 65 64 3d 74 72 75 65 0a 20 20 dir_used=true.
2a30: 20 20 20 20 66 69 0a 20 20 20 20 66 69 0a 20 20 fi. fi.
2a40: 66 69 0a 0a 20 20 69 66 20 74 65 73 74 20 2d 6e fi.. if test -n
2a50: 20 22 24 64 69 72 5f 61 72 67 22 3b 20 74 68 65 "$dir_arg"; the
2a60: 6e 0a 20 20 20 20 7b 20 74 65 73 74 20 2d 7a 20 n. { test -z
2a70: 22 24 63 68 6f 77 6e 63 6d 64 22 20 7c 7c 20 24 "$chowncmd" || $
2a80: 64 6f 69 74 20 24 63 68 6f 77 6e 63 6d 64 20 22 doit $chowncmd "
2a90: 24 64 73 74 22 3b 20 7d 20 26 26 0a 20 20 20 20 $dst"; } &&.
2aa0: 7b 20 74 65 73 74 20 2d 7a 20 22 24 63 68 67 72 { test -z "$chgr
2ab0: 70 63 6d 64 22 20 7c 7c 20 24 64 6f 69 74 20 24 pcmd" || $doit $
2ac0: 63 68 67 72 70 63 6d 64 20 22 24 64 73 74 22 3b chgrpcmd "$dst";
2ad0: 20 7d 20 26 26 0a 20 20 20 20 7b 20 74 65 73 74 } &&. { test
2ae0: 20 22 24 6f 62 73 6f 6c 65 74 65 5f 6d 6b 64 69 "$obsolete_mkdi
2af0: 72 5f 75 73 65 64 24 63 68 6f 77 6e 63 6d 64 24 r_used$chowncmd$
2b00: 63 68 67 72 70 63 6d 64 22 20 3d 20 66 61 6c 73 chgrpcmd" = fals
2b10: 65 20 7c 7c 0a 20 20 20 20 20 20 74 65 73 74 20 e ||. test
2b20: 2d 7a 20 22 24 63 68 6d 6f 64 63 6d 64 22 20 7c -z "$chmodcmd" |
2b30: 7c 20 24 64 6f 69 74 20 24 63 68 6d 6f 64 63 6d | $doit $chmodcm
2b40: 64 20 24 6d 6f 64 65 20 22 24 64 73 74 22 3b 20 d $mode "$dst";
2b50: 7d 20 7c 7c 20 65 78 69 74 20 31 0a 20 20 65 6c } || exit 1. el
2b60: 73 65 0a 0a 20 20 20 20 23 20 4d 61 6b 65 20 61 se.. # Make a
2b70: 20 63 6f 75 70 6c 65 20 6f 66 20 74 65 6d 70 20 couple of temp
2b80: 66 69 6c 65 20 6e 61 6d 65 73 20 69 6e 20 74 68 file names in th
2b90: 65 20 70 72 6f 70 65 72 20 64 69 72 65 63 74 6f e proper directo
2ba0: 72 79 2e 0a 20 20 20 20 64 73 74 74 6d 70 3d 24 ry.. dsttmp=$
2bb0: 64 73 74 64 69 72 2f 5f 69 6e 73 74 2e 24 24 5f dstdir/_inst.$$_
2bc0: 0a 20 20 20 20 72 6d 74 6d 70 3d 24 64 73 74 64 . rmtmp=$dstd
2bd0: 69 72 2f 5f 72 6d 2e 24 24 5f 0a 0a 20 20 20 20 ir/_rm.$$_..
2be0: 23 20 54 72 61 70 20 74 6f 20 63 6c 65 61 6e 20 # Trap to clean
2bf0: 75 70 20 74 68 6f 73 65 20 74 65 6d 70 20 66 69 up those temp fi
2c00: 6c 65 73 20 61 74 20 65 78 69 74 2e 0a 20 20 20 les at exit..
2c10: 20 74 72 61 70 20 27 72 65 74 3d 24 3f 3b 20 72 trap 'ret=$?; r
2c20: 6d 20 2d 66 20 22 24 64 73 74 74 6d 70 22 20 22 m -f "$dsttmp" "
2c30: 24 72 6d 74 6d 70 22 20 26 26 20 65 78 69 74 20 $rmtmp" && exit
2c40: 24 72 65 74 27 20 30 0a 0a 20 20 20 20 23 20 43 $ret' 0.. # C
2c50: 6f 70 79 20 74 68 65 20 66 69 6c 65 20 6e 61 6d opy the file nam
2c60: 65 20 74 6f 20 74 68 65 20 74 65 6d 70 20 6e 61 e to the temp na
2c70: 6d 65 2e 0a 20 20 20 20 28 75 6d 61 73 6b 20 24 me.. (umask $
2c80: 63 70 5f 75 6d 61 73 6b 20 26 26 20 24 64 6f 69 cp_umask && $doi
2c90: 74 5f 65 78 65 63 20 24 63 70 70 72 6f 67 20 22 t_exec $cpprog "
2ca0: 24 73 72 63 22 20 22 24 64 73 74 74 6d 70 22 29 $src" "$dsttmp")
2cb0: 20 26 26 0a 0a 20 20 20 20 23 20 61 6e 64 20 73 &&.. # and s
2cc0: 65 74 20 61 6e 79 20 6f 70 74 69 6f 6e 73 3b 20 et any options;
2cd0: 64 6f 20 63 68 6d 6f 64 20 6c 61 73 74 20 74 6f do chmod last to
2ce0: 20 70 72 65 73 65 72 76 65 20 73 65 74 75 69 64 preserve setuid
2cf0: 20 62 69 74 73 2e 0a 20 20 20 20 23 0a 20 20 20 bits.. #.
2d00: 20 23 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 # If any of the
2d10: 73 65 20 66 61 69 6c 2c 20 77 65 20 61 62 6f 72 se fail, we abor
2d20: 74 20 74 68 65 20 77 68 6f 6c 65 20 74 68 69 6e t the whole thin
2d30: 67 2e 20 20 49 66 20 77 65 20 77 61 6e 74 20 74 g. If we want t
2d40: 6f 0a 20 20 20 20 23 20 69 67 6e 6f 72 65 20 65 o. # ignore e
2d50: 72 72 6f 72 73 20 66 72 6f 6d 20 61 6e 79 20 6f rrors from any o
2d60: 66 20 74 68 65 73 65 2c 20 6a 75 73 74 20 6d 61 f these, just ma
2d70: 6b 65 20 73 75 72 65 20 6e 6f 74 20 74 6f 20 69 ke sure not to i
2d80: 67 6e 6f 72 65 0a 20 20 20 20 23 20 65 72 72 6f gnore. # erro
2d90: 72 73 20 66 72 6f 6d 20 74 68 65 20 61 62 6f 76 rs from the abov
2da0: 65 20 22 24 64 6f 69 74 20 24 63 70 70 72 6f 67 e "$doit $cpprog
2db0: 20 24 73 72 63 20 24 64 73 74 74 6d 70 22 20 63 $src $dsttmp" c
2dc0: 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 23 0a 20 20 ommand.. #.
2dd0: 20 20 7b 20 74 65 73 74 20 2d 7a 20 22 24 63 68 { test -z "$ch
2de0: 6f 77 6e 63 6d 64 22 20 7c 7c 20 24 64 6f 69 74 owncmd" || $doit
2df0: 20 24 63 68 6f 77 6e 63 6d 64 20 22 24 64 73 74 $chowncmd "$dst
2e00: 74 6d 70 22 3b 20 7d 20 26 26 0a 20 20 20 20 7b tmp"; } &&. {
2e10: 20 74 65 73 74 20 2d 7a 20 22 24 63 68 67 72 70 test -z "$chgrp
2e20: 63 6d 64 22 20 7c 7c 20 24 64 6f 69 74 20 24 63 cmd" || $doit $c
2e30: 68 67 72 70 63 6d 64 20 22 24 64 73 74 74 6d 70 hgrpcmd "$dsttmp
2e40: 22 3b 20 7d 20 26 26 0a 20 20 20 20 7b 20 74 65 "; } &&. { te
2e50: 73 74 20 2d 7a 20 22 24 73 74 72 69 70 63 6d 64 st -z "$stripcmd
2e60: 22 20 7c 7c 20 24 64 6f 69 74 20 24 73 74 72 69 " || $doit $stri
2e70: 70 63 6d 64 20 22 24 64 73 74 74 6d 70 22 3b 20 pcmd "$dsttmp";
2e80: 7d 20 26 26 0a 20 20 20 20 7b 20 74 65 73 74 20 } &&. { test
2e90: 2d 7a 20 22 24 63 68 6d 6f 64 63 6d 64 22 20 7c -z "$chmodcmd" |
2ea0: 7c 20 24 64 6f 69 74 20 24 63 68 6d 6f 64 63 6d | $doit $chmodcm
2eb0: 64 20 24 6d 6f 64 65 20 22 24 64 73 74 74 6d 70 d $mode "$dsttmp
2ec0: 22 3b 20 7d 20 26 26 0a 0a 20 20 20 20 23 20 49 "; } &&.. # I
2ed0: 66 20 2d 43 2c 20 64 6f 6e 27 74 20 62 6f 74 68 f -C, don't both
2ee0: 65 72 20 74 6f 20 63 6f 70 79 20 69 66 20 69 74 er to copy if it
2ef0: 20 77 6f 75 6c 64 6e 27 74 20 63 68 61 6e 67 65 wouldn't change
2f00: 20 74 68 65 20 66 69 6c 65 2e 0a 20 20 20 20 69 the file.. i
2f10: 66 20 24 63 6f 70 79 5f 6f 6e 5f 63 68 61 6e 67 f $copy_on_chang
2f20: 65 20 26 26 0a 20 20 20 20 20 20 20 6f 6c 64 3d e &&. old=
2f30: 60 4c 43 5f 41 4c 4c 3d 43 20 6c 73 20 2d 64 6c `LC_ALL=C ls -dl
2f40: 4c 20 22 24 64 73 74 22 09 32 3e 2f 64 65 76 2f L "$dst".2>/dev/
2f50: 6e 75 6c 6c 60 20 26 26 0a 20 20 20 20 20 20 20 null` &&.
2f60: 6e 65 77 3d 60 4c 43 5f 41 4c 4c 3d 43 20 6c 73 new=`LC_ALL=C ls
2f70: 20 2d 64 6c 4c 20 22 24 64 73 74 74 6d 70 22 09 -dlL "$dsttmp".
2f80: 32 3e 2f 64 65 76 2f 6e 75 6c 6c 60 20 26 26 0a 2>/dev/null` &&.
2f90: 0a 20 20 20 20 20 20 20 65 76 61 6c 20 22 24 69 . eval "$i
2fa0: 6e 69 74 69 61 6c 69 7a 65 5f 70 6f 73 69 78 5f nitialize_posix_
2fb0: 67 6c 6f 62 22 20 26 26 0a 20 20 20 20 20 20 20 glob" &&.
2fc0: 24 70 6f 73 69 78 5f 67 6c 6f 62 20 73 65 74 20 $posix_glob set
2fd0: 2d 66 20 26 26 0a 20 20 20 20 20 20 20 73 65 74 -f &&. set
2fe0: 20 58 20 24 6f 6c 64 20 26 26 20 6f 6c 64 3d 3a X $old && old=:
2ff0: 24 32 3a 24 34 3a 24 35 3a 24 36 20 26 26 0a 20 $2:$4:$5:$6 &&.
3000: 20 20 20 20 20 20 73 65 74 20 58 20 24 6e 65 77 set X $new
3010: 20 26 26 20 6e 65 77 3d 3a 24 32 3a 24 34 3a 24 && new=:$2:$4:$
3020: 35 3a 24 36 20 26 26 0a 20 20 20 20 20 20 20 24 5:$6 &&. $
3030: 70 6f 73 69 78 5f 67 6c 6f 62 20 73 65 74 20 2b posix_glob set +
3040: 66 20 26 26 0a 0a 20 20 20 20 20 20 20 74 65 73 f &&.. tes
3050: 74 20 22 24 6f 6c 64 22 20 3d 20 22 24 6e 65 77 t "$old" = "$new
3060: 22 20 26 26 0a 20 20 20 20 20 20 20 24 63 6d 70 " &&. $cmp
3070: 70 72 6f 67 20 22 24 64 73 74 22 20 22 24 64 73 prog "$dst" "$ds
3080: 74 74 6d 70 22 20 3e 2f 64 65 76 2f 6e 75 6c 6c ttmp" >/dev/null
3090: 20 32 3e 26 31 0a 20 20 20 20 74 68 65 6e 0a 20 2>&1. then.
30a0: 20 20 20 20 20 72 6d 20 2d 66 20 22 24 64 73 74 rm -f "$dst
30b0: 74 6d 70 22 0a 20 20 20 20 65 6c 73 65 0a 20 20 tmp". else.
30c0: 20 20 20 20 23 20 52 65 6e 61 6d 65 20 74 68 65 # Rename the
30d0: 20 66 69 6c 65 20 74 6f 20 74 68 65 20 72 65 61 file to the rea
30e0: 6c 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 20 l destination..
30f0: 20 20 20 20 20 24 64 6f 69 74 20 24 6d 76 63 6d $doit $mvcm
3100: 64 20 2d 66 20 22 24 64 73 74 74 6d 70 22 20 22 d -f "$dsttmp" "
3110: 24 64 73 74 22 20 32 3e 2f 64 65 76 2f 6e 75 6c $dst" 2>/dev/nul
3120: 6c 20 7c 7c 0a 0a 20 20 20 20 20 20 23 20 54 68 l ||.. # Th
3130: 65 20 72 65 6e 61 6d 65 20 66 61 69 6c 65 64 2c e rename failed,
3140: 20 70 65 72 68 61 70 73 20 62 65 63 61 75 73 65 perhaps because
3150: 20 6d 76 20 63 61 6e 27 74 20 72 65 6e 61 6d 65 mv can't rename
3160: 20 73 6f 6d 65 74 68 69 6e 67 20 65 6c 73 65 0a something else.
3170: 20 20 20 20 20 20 23 20 74 6f 20 69 74 73 65 6c # to itsel
3180: 66 2c 20 6f 72 20 70 65 72 68 61 70 73 20 62 65 f, or perhaps be
3190: 63 61 75 73 65 20 6d 76 20 69 73 20 73 6f 20 61 cause mv is so a
31a0: 6e 63 69 65 6e 74 20 74 68 61 74 20 69 74 20 64 ncient that it d
31b0: 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 23 20 oes not. #
31c0: 73 75 70 70 6f 72 74 20 2d 66 2e 0a 20 20 20 20 support -f..
31d0: 20 20 7b 0a 09 23 20 4e 6f 77 20 72 65 6d 6f 76 {..# Now remov
31e0: 65 20 6f 72 20 6d 6f 76 65 20 61 73 69 64 65 20 e or move aside
31f0: 61 6e 79 20 6f 6c 64 20 66 69 6c 65 20 61 74 20 any old file at
3200: 64 65 73 74 69 6e 61 74 69 6f 6e 20 6c 6f 63 61 destination loca
3210: 74 69 6f 6e 2e 0a 09 23 20 57 65 20 74 72 79 20 tion...# We try
3220: 74 68 69 73 20 74 77 6f 20 77 61 79 73 20 73 69 this two ways si
3230: 6e 63 65 20 72 6d 20 63 61 6e 27 74 20 75 6e 6c nce rm can't unl
3240: 69 6e 6b 20 69 74 73 65 6c 66 20 6f 6e 20 73 6f ink itself on so
3250: 6d 65 0a 09 23 20 73 79 73 74 65 6d 73 20 61 6e me..# systems an
3260: 64 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f d the destinatio
3270: 6e 20 66 69 6c 65 20 6d 69 67 68 74 20 62 65 20 n file might be
3280: 62 75 73 79 20 66 6f 72 20 6f 74 68 65 72 0a 09 busy for other..
3290: 23 20 72 65 61 73 6f 6e 73 2e 20 20 49 6e 20 74 # reasons. In t
32a0: 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 66 69 his case, the fi
32b0: 6e 61 6c 20 63 6c 65 61 6e 75 70 20 6d 69 67 68 nal cleanup migh
32c0: 74 20 66 61 69 6c 20 62 75 74 20 74 68 65 20 6e t fail but the n
32d0: 65 77 0a 09 23 20 66 69 6c 65 20 73 68 6f 75 6c ew..# file shoul
32e0: 64 20 73 74 69 6c 6c 20 69 6e 73 74 61 6c 6c 20 d still install
32f0: 73 75 63 63 65 73 73 66 75 6c 6c 79 2e 0a 09 7b successfully...{
3300: 0a 09 20 20 74 65 73 74 20 21 20 2d 66 20 22 24 .. test ! -f "$
3310: 64 73 74 22 20 7c 7c 0a 09 20 20 24 64 6f 69 74 dst" ||.. $doit
3320: 20 24 72 6d 63 6d 64 20 2d 66 20 22 24 64 73 74 $rmcmd -f "$dst
3330: 22 20 32 3e 2f 64 65 76 2f 6e 75 6c 6c 20 7c 7c " 2>/dev/null ||
3340: 0a 09 20 20 7b 20 24 64 6f 69 74 20 24 6d 76 63 .. { $doit $mvc
3350: 6d 64 20 2d 66 20 22 24 64 73 74 22 20 22 24 72 md -f "$dst" "$r
3360: 6d 74 6d 70 22 20 32 3e 2f 64 65 76 2f 6e 75 6c mtmp" 2>/dev/nul
3370: 6c 20 26 26 0a 09 20 20 20 20 7b 20 24 64 6f 69 l &&.. { $doi
3380: 74 20 24 72 6d 63 6d 64 20 2d 66 20 22 24 72 6d t $rmcmd -f "$rm
3390: 74 6d 70 22 20 32 3e 2f 64 65 76 2f 6e 75 6c 6c tmp" 2>/dev/null
33a0: 3b 20 3a 3b 20 7d 0a 09 20 20 7d 20 7c 7c 0a 09 ; :; }.. } ||..
33b0: 20 20 7b 20 65 63 68 6f 20 22 24 30 3a 20 63 61 { echo "$0: ca
33c0: 6e 6e 6f 74 20 75 6e 6c 69 6e 6b 20 6f 72 20 72 nnot unlink or r
33d0: 65 6e 61 6d 65 20 24 64 73 74 22 20 3e 26 32 0a ename $dst" >&2.
33e0: 09 20 20 20 20 28 65 78 69 74 20 31 29 3b 20 65 . (exit 1); e
33f0: 78 69 74 20 31 0a 09 20 20 7d 0a 09 7d 20 26 26 xit 1.. }..} &&
3400: 0a 0a 09 23 20 4e 6f 77 20 72 65 6e 61 6d 65 20 ...# Now rename
3410: 74 68 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20 the file to the
3420: 72 65 61 6c 20 64 65 73 74 69 6e 61 74 69 6f 6e real destination
3430: 2e 0a 09 24 64 6f 69 74 20 24 6d 76 63 6d 64 20 ...$doit $mvcmd
3440: 22 24 64 73 74 74 6d 70 22 20 22 24 64 73 74 22 "$dsttmp" "$dst"
3450: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 66 69 20 . }. fi
3460: 7c 7c 20 65 78 69 74 20 31 0a 0a 20 20 20 20 74 || exit 1.. t
3470: 72 61 70 20 27 27 20 30 0a 20 20 66 69 0a 64 6f rap '' 0. fi.do
3480: 6e 65 0a 0a 23 20 4c 6f 63 61 6c 20 76 61 72 69 ne..# Local vari
3490: 61 62 6c 65 73 3a 0a 23 20 65 76 61 6c 3a 20 28 ables:.# eval: (
34a0: 61 64 64 2d 68 6f 6f 6b 20 27 77 72 69 74 65 2d add-hook 'write-
34b0: 66 69 6c 65 2d 68 6f 6f 6b 73 20 27 74 69 6d 65 file-hooks 'time
34c0: 2d 73 74 61 6d 70 29 0a 23 20 74 69 6d 65 2d 73 -stamp).# time-s
34d0: 74 61 6d 70 2d 73 74 61 72 74 3a 20 22 73 63 72 tamp-start: "scr
34e0: 69 70 74 76 65 72 73 69 6f 6e 3d 22 0a 23 20 74 iptversion=".# t
34f0: 69 6d 65 2d 73 74 61 6d 70 2d 66 6f 72 6d 61 74 ime-stamp-format
3500: 3a 20 22 25 3a 79 2d 25 30 32 6d 2d 25 30 32 64 : "%:y-%02m-%02d
3510: 2e 25 30 32 48 22 0a 23 20 74 69 6d 65 2d 73 74 .%02H".# time-st
3520: 61 6d 70 2d 65 6e 64 3a 20 22 24 22 0a 23 20 45 amp-end: "$".# E
3530: 6e 64 3a 0a nd:.