Artifact f39bd207ff3c20fffe91951d0e296f4832874c50:


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:.