Hex Artifact Content

Artifact f46cea65709582bed664d69a40095db0490968df69c355e30cd8905f0b60a153:


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 32 30  riptversion=2020
0050: 2d 30 37 2d 32 36 2e 32 32 3b 20 23 20 55 54 43  -07-26.22; # UTC
0060: 0a 0a 23 20 54 68 69 73 20 6f 72 69 67 69 6e 61  ..# This origina
0070: 74 65 73 20 66 72 6f 6d 20 58 31 31 52 35 20 28  tes from X11R5 (
0080: 6d 69 74 2f 75 74 69 6c 2f 73 63 72 69 70 74 73  mit/util/scripts
0090: 2f 69 6e 73 74 61 6c 6c 2e 73 68 29 2c 20 77 68  /install.sh), wh
00a0: 69 63 68 20 77 61 73 0a 23 20 6c 61 74 65 72 20  ich was.# later 
00b0: 72 65 6c 65 61 73 65 64 20 69 6e 20 58 31 31 52  released in X11R
00c0: 36 20 28 78 63 2f 63 6f 6e 66 69 67 2f 75 74 69  6 (xc/config/uti
00d0: 6c 2f 69 6e 73 74 61 6c 6c 2e 73 68 29 20 77 69  l/install.sh) wi
00e0: 74 68 20 74 68 65 0a 23 20 66 6f 6c 6c 6f 77 69  th the.# followi
00f0: 6e 67 20 63 6f 70 79 72 69 67 68 74 20 61 6e 64  ng copyright and
0100: 20 6c 69 63 65 6e 73 65 2e 0a 23 0a 23 20 43 6f   license..#.# Co
0110: 70 79 72 69 67 68 74 20 28 43 29 20 31 39 39 34  pyright (C) 1994
0120: 20 58 20 43 6f 6e 73 6f 72 74 69 75 6d 0a 23 0a   X Consortium.#.
0130: 23 20 50 65 72 6d 69 73 73 69 6f 6e 20 69 73 20  # Permission is 
0140: 68 65 72 65 62 79 20 67 72 61 6e 74 65 64 2c 20  hereby granted, 
0150: 66 72 65 65 20 6f 66 20 63 68 61 72 67 65 2c 20  free of charge, 
0160: 74 6f 20 61 6e 79 20 70 65 72 73 6f 6e 20 6f 62  to any person ob
0170: 74 61 69 6e 69 6e 67 20 61 20 63 6f 70 79 0a 23  taining a copy.#
0180: 20 6f 66 20 74 68 69 73 20 73 6f 66 74 77 61 72   of this softwar
0190: 65 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64  e and associated
01a0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
01b0: 69 6c 65 73 20 28 74 68 65 20 22 53 6f 66 74 77  iles (the "Softw
01c0: 61 72 65 22 29 2c 20 74 6f 0a 23 20 64 65 61 6c  are"), to.# deal
01d0: 20 69 6e 20 74 68 65 20 53 6f 66 74 77 61 72 65   in the Software
01e0: 20 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 63   without restric
01f0: 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20  tion, including 
0200: 77 69 74 68 6f 75 74 20 6c 69 6d 69 74 61 74 69  without limitati
0210: 6f 6e 20 74 68 65 0a 23 20 72 69 67 68 74 73 20  on the.# rights 
0220: 74 6f 20 75 73 65 2c 20 63 6f 70 79 2c 20 6d 6f  to use, copy, mo
0230: 64 69 66 79 2c 20 6d 65 72 67 65 2c 20 70 75 62  dify, merge, pub
0240: 6c 69 73 68 2c 20 64 69 73 74 72 69 62 75 74 65  lish, distribute
0250: 2c 20 73 75 62 6c 69 63 65 6e 73 65 2c 20 61 6e  , sublicense, an
0260: 64 2f 6f 72 0a 23 20 73 65 6c 6c 20 63 6f 70 69  d/or.# sell copi
0270: 65 73 20 6f 66 20 74 68 65 20 53 6f 66 74 77 61  es of the Softwa
0280: 72 65 2c 20 61 6e 64 20 74 6f 20 70 65 72 6d 69  re, and to permi
0290: 74 20 70 65 72 73 6f 6e 73 20 74 6f 20 77 68 6f  t persons to who
02a0: 6d 20 74 68 65 20 53 6f 66 74 77 61 72 65 20 69  m the Software i
02b0: 73 0a 23 20 66 75 72 6e 69 73 68 65 64 20 74 6f  s.# furnished to
02c0: 20 64 6f 20 73 6f 2c 20 73 75 62 6a 65 63 74 20   do so, subject 
02d0: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
02e0: 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a 23 0a 23   conditions:.#.#
02f0: 20 54 68 65 20 61 62 6f 76 65 20 63 6f 70 79 72   The above copyr
0300: 69 67 68 74 20 6e 6f 74 69 63 65 20 61 6e 64 20  ight notice and 
0310: 74 68 69 73 20 70 65 72 6d 69 73 73 69 6f 6e 20  this permission 
0320: 6e 6f 74 69 63 65 20 73 68 61 6c 6c 20 62 65 20  notice shall be 
0330: 69 6e 63 6c 75 64 65 64 20 69 6e 0a 23 20 61 6c  included in.# al
0340: 6c 20 63 6f 70 69 65 73 20 6f 72 20 73 75 62 73  l copies or subs
0350: 74 61 6e 74 69 61 6c 20 70 6f 72 74 69 6f 6e 73  tantial portions
0360: 20 6f 66 20 74 68 65 20 53 6f 66 74 77 61 72 65   of the Software
0370: 2e 0a 23 0a 23 20 54 48 45 20 53 4f 46 54 57 41  ..#.# THE SOFTWA
0380: 52 45 20 49 53 20 50 52 4f 56 49 44 45 44 20 22  RE IS PROVIDED "
0390: 41 53 20 49 53 22 2c 20 57 49 54 48 4f 55 54 20  AS IS", WITHOUT 
03a0: 57 41 52 52 41 4e 54 59 20 4f 46 20 41 4e 59 20  WARRANTY OF ANY 
03b0: 4b 49 4e 44 2c 20 45 58 50 52 45 53 53 20 4f 52  KIND, EXPRESS OR
03c0: 0a 23 20 49 4d 50 4c 49 45 44 2c 20 49 4e 43 4c  .# IMPLIED, INCL
03d0: 55 44 49 4e 47 20 42 55 54 20 4e 4f 54 20 4c 49  UDING BUT NOT LI
03e0: 4d 49 54 45 44 20 54 4f 20 54 48 45 20 57 41 52  MITED TO THE WAR
03f0: 52 41 4e 54 49 45 53 20 4f 46 20 4d 45 52 43 48  RANTIES OF MERCH
0400: 41 4e 54 41 42 49 4c 49 54 59 2c 0a 23 20 46 49  ANTABILITY,.# FI
0410: 54 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54  TNESS FOR A PART
0420: 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 20 41  ICULAR PURPOSE A
0430: 4e 44 20 4e 4f 4e 49 4e 46 52 49 4e 47 45 4d 45  ND NONINFRINGEME
0440: 4e 54 2e 20 20 49 4e 20 4e 4f 20 45 56 45 4e 54  NT.  IN NO EVENT
0450: 20 53 48 41 4c 4c 20 54 48 45 0a 23 20 58 20 43   SHALL THE.# X C
0460: 4f 4e 53 4f 52 54 49 55 4d 20 42 45 20 4c 49 41  ONSORTIUM BE LIA
0470: 42 4c 45 20 46 4f 52 20 41 4e 59 20 43 4c 41 49  BLE FOR ANY CLAI
0480: 4d 2c 20 44 41 4d 41 47 45 53 20 4f 52 20 4f 54  M, DAMAGES OR OT
0490: 48 45 52 20 4c 49 41 42 49 4c 49 54 59 2c 20 57  HER LIABILITY, W
04a0: 48 45 54 48 45 52 20 49 4e 0a 23 20 41 4e 20 41  HETHER IN.# AN A
04b0: 43 54 49 4f 4e 20 4f 46 20 43 4f 4e 54 52 41 43  CTION OF CONTRAC
04c0: 54 2c 20 54 4f 52 54 20 4f 52 20 4f 54 48 45 52  T, TORT OR OTHER
04d0: 57 49 53 45 2c 20 41 52 49 53 49 4e 47 20 46 52  WISE, ARISING FR
04e0: 4f 4d 2c 20 4f 55 54 20 4f 46 20 4f 52 20 49 4e  OM, OUT OF OR IN
04f0: 20 43 4f 4e 4e 45 43 2d 0a 23 20 54 49 4f 4e 20   CONNEC-.# TION 
0500: 57 49 54 48 20 54 48 45 20 53 4f 46 54 57 41 52  WITH THE SOFTWAR
0510: 45 20 4f 52 20 54 48 45 20 55 53 45 20 4f 52 20  E OR THE USE OR 
0520: 4f 54 48 45 52 20 44 45 41 4c 49 4e 47 53 20 49  OTHER DEALINGS I
0530: 4e 20 54 48 45 20 53 4f 46 54 57 41 52 45 2e 0a  N THE SOFTWARE..
0540: 23 0a 23 20 45 78 63 65 70 74 20 61 73 20 63 6f  #.# Except as co
0550: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
0560: 6e 6f 74 69 63 65 2c 20 74 68 65 20 6e 61 6d 65  notice, the name
0570: 20 6f 66 20 74 68 65 20 58 20 43 6f 6e 73 6f 72   of the X Consor
0580: 74 69 75 6d 20 73 68 61 6c 6c 20 6e 6f 74 0a 23  tium shall not.#
0590: 20 62 65 20 75 73 65 64 20 69 6e 20 61 64 76 65   be used in adve
05a0: 72 74 69 73 69 6e 67 20 6f 72 20 6f 74 68 65 72  rtising or other
05b0: 77 69 73 65 20 74 6f 20 70 72 6f 6d 6f 74 65 20  wise to promote 
05c0: 74 68 65 20 73 61 6c 65 2c 20 75 73 65 20 6f 72  the sale, use or
05d0: 20 6f 74 68 65 72 20 64 65 61 6c 2d 0a 23 20 69   other deal-.# i
05e0: 6e 67 73 20 69 6e 20 74 68 69 73 20 53 6f 66 74  ngs in this Soft
05f0: 77 61 72 65 20 77 69 74 68 6f 75 74 20 70 72 69  ware without pri
0600: 6f 72 20 77 72 69 74 74 65 6e 20 61 75 74 68 6f  or written autho
0610: 72 69 7a 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  rization from th
0620: 65 20 58 20 43 6f 6e 73 6f 72 2d 0a 23 20 74 69  e X Consor-.# ti
0630: 75 6d 2e 0a 23 0a 23 0a 23 20 46 53 46 20 63 68  um..#.#.# FSF ch
0640: 61 6e 67 65 73 20 74 6f 20 74 68 69 73 20 66 69  anges to this fi
0650: 6c 65 20 61 72 65 20 69 6e 20 74 68 65 20 70 75  le are in the pu
0660: 62 6c 69 63 20 64 6f 6d 61 69 6e 2e 0a 23 0a 23  blic domain..#.#
0670: 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 73 63   Calling this sc
0680: 72 69 70 74 20 69 6e 73 74 61 6c 6c 2d 73 68 20  ript install-sh 
0690: 69 73 20 70 72 65 66 65 72 72 65 64 20 6f 76 65  is preferred ove
06a0: 72 20 69 6e 73 74 61 6c 6c 2e 73 68 2c 20 74 6f  r install.sh, to
06b0: 20 70 72 65 76 65 6e 74 0a 23 20 27 6d 61 6b 65   prevent.# 'make
06c0: 27 20 69 6d 70 6c 69 63 69 74 20 72 75 6c 65 73  ' implicit rules
06d0: 20 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 61   from creating a
06e0: 20 66 69 6c 65 20 63 61 6c 6c 65 64 20 69 6e 73   file called ins
06f0: 74 61 6c 6c 20 66 72 6f 6d 20 69 74 0a 23 20 77  tall from it.# w
0700: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no 
0710: 4d 61 6b 65 66 69 6c 65 2e 0a 23 0a 23 20 54 68  Makefile..#.# Th
0720: 69 73 20 73 63 72 69 70 74 20 69 73 20 63 6f 6d  is script is com
0730: 70 61 74 69 62 6c 65 20 77 69 74 68 20 74 68 65  patible with the
0740: 20 42 53 44 20 69 6e 73 74 61 6c 6c 20 73 63 72   BSD install scr
0750: 69 70 74 2c 20 62 75 74 20 77 61 73 20 77 72 69  ipt, but was wri
0760: 74 74 65 6e 0a 23 20 66 72 6f 6d 20 73 63 72 61  tten.# from scra
0770: 74 63 68 2e 0a 0a 74 61 62 3d 27 09 27 0a 6e 6c  tch...tab='.'.nl
0780: 3d 27 0a 27 0a 49 46 53 3d 22 20 24 74 61 62 24  ='.'.IFS=" $tab$
0790: 6e 6c 22 0a 0a 23 20 53 65 74 20 44 4f 49 54 50  nl"..# Set DOITP
07a0: 52 4f 47 20 74 6f 20 22 65 63 68 6f 22 20 74 6f  ROG to "echo" to
07b0: 20 74 65 73 74 20 74 68 69 73 20 73 63 72 69 70   test this scrip
07c0: 74 2e 0a 0a 64 6f 69 74 3d 24 7b 44 4f 49 54 50  t...doit=${DOITP
07d0: 52 4f 47 2d 7d 0a 64 6f 69 74 5f 65 78 65 63 3d  ROG-}.doit_exec=
07e0: 24 7b 64 6f 69 74 3a 2d 65 78 65 63 7d 0a 0a 23  ${doit:-exec}..#
07f0: 20 50 75 74 20 69 6e 20 61 62 73 6f 6c 75 74 65   Put in absolute
0800: 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 66 20 79   file names if y
0810: 6f 75 20 64 6f 6e 27 74 20 68 61 76 65 20 74 68  ou don't have th
0820: 65 6d 20 69 6e 20 79 6f 75 72 20 70 61 74 68 3b  em in your path;
0830: 0a 23 20 6f 72 20 75 73 65 20 65 6e 76 69 72 6f  .# or use enviro
0840: 6e 6d 65 6e 74 20 76 61 72 73 2e 0a 0a 63 68 67  nment vars...chg
0850: 72 70 70 72 6f 67 3d 24 7b 43 48 47 52 50 50 52  rpprog=${CHGRPPR
0860: 4f 47 2d 63 68 67 72 70 7d 0a 63 68 6d 6f 64 70  OG-chgrp}.chmodp
0870: 72 6f 67 3d 24 7b 43 48 4d 4f 44 50 52 4f 47 2d  rog=${CHMODPROG-
0880: 63 68 6d 6f 64 7d 0a 63 68 6f 77 6e 70 72 6f 67  chmod}.chownprog
0890: 3d 24 7b 43 48 4f 57 4e 50 52 4f 47 2d 63 68 6f  =${CHOWNPROG-cho
08a0: 77 6e 7d 0a 63 6d 70 70 72 6f 67 3d 24 7b 43 4d  wn}.cmpprog=${CM
08b0: 50 50 52 4f 47 2d 63 6d 70 7d 0a 63 70 70 72 6f  PPROG-cmp}.cppro
08c0: 67 3d 24 7b 43 50 50 52 4f 47 2d 63 70 7d 0a 6d  g=${CPPROG-cp}.m
08d0: 6b 64 69 72 70 72 6f 67 3d 24 7b 4d 4b 44 49 52  kdirprog=${MKDIR
08e0: 50 52 4f 47 2d 6d 6b 64 69 72 7d 0a 6d 76 70 72  PROG-mkdir}.mvpr
08f0: 6f 67 3d 24 7b 4d 56 50 52 4f 47 2d 6d 76 7d 0a  og=${MVPROG-mv}.
0900: 72 6d 70 72 6f 67 3d 24 7b 52 4d 50 52 4f 47 2d  rmprog=${RMPROG-
0910: 72 6d 7d 0a 73 74 72 69 70 70 72 6f 67 3d 24 7b  rm}.stripprog=${
0920: 53 54 52 49 50 50 52 4f 47 2d 73 74 72 69 70 7d  STRIPPROG-strip}
0930: 0a 0a 70 6f 73 69 78 5f 6d 6b 64 69 72 3d 0a 0a  ..posix_mkdir=..
0940: 23 20 44 65 73 69 72 65 64 20 6d 6f 64 65 20 6f  # Desired mode o
0950: 66 20 69 6e 73 74 61 6c 6c 65 64 20 66 69 6c 65  f installed file
0960: 2e 0a 6d 6f 64 65 3d 30 37 35 35 0a 0a 23 20 43  ..mode=0755..# C
0970: 72 65 61 74 65 20 64 69 72 73 20 28 69 6e 63 6c  reate dirs (incl
0980: 75 64 69 6e 67 20 69 6e 74 65 72 6d 65 64 69 61  uding intermedia
0990: 74 65 20 64 69 72 73 29 20 75 73 69 6e 67 20 6d  te dirs) using m
09a0: 6f 64 65 20 37 35 35 2e 0a 23 20 54 68 69 73 20  ode 755..# This 
09b0: 69 73 20 6c 69 6b 65 20 47 4e 55 20 27 69 6e 73  is like GNU 'ins
09c0: 74 61 6c 6c 27 20 61 73 20 6f 66 20 63 6f 72 65  tall' as of core
09d0: 75 74 69 6c 73 20 38 2e 33 32 20 28 32 30 32 30  utils 8.32 (2020
09e0: 29 2e 0a 6d 6b 64 69 72 5f 75 6d 61 73 6b 3d 32  )..mkdir_umask=2
09f0: 32 0a 0a 63 68 67 72 70 63 6d 64 3d 0a 63 68 6d  2..chgrpcmd=.chm
0a00: 6f 64 63 6d 64 3d 24 63 68 6d 6f 64 70 72 6f 67  odcmd=$chmodprog
0a10: 0a 63 68 6f 77 6e 63 6d 64 3d 0a 6d 76 63 6d 64  .chowncmd=.mvcmd
0a20: 3d 24 6d 76 70 72 6f 67 0a 72 6d 63 6d 64 3d 22  =$mvprog.rmcmd="
0a30: 24 72 6d 70 72 6f 67 20 2d 66 22 0a 73 74 72 69  $rmprog -f".stri
0a40: 70 63 6d 64 3d 0a 0a 73 72 63 3d 0a 64 73 74 3d  pcmd=..src=.dst=
0a50: 0a 64 69 72 5f 61 72 67 3d 0a 64 73 74 5f 61 72  .dir_arg=.dst_ar
0a60: 67 3d 0a 0a 63 6f 70 79 5f 6f 6e 5f 63 68 61 6e  g=..copy_on_chan
0a70: 67 65 3d 66 61 6c 73 65 0a 69 73 5f 74 61 72 67  ge=false.is_targ
0a80: 65 74 5f 61 5f 64 69 72 65 63 74 6f 72 79 3d 70  et_a_directory=p
0a90: 6f 73 73 69 62 6c 79 0a 0a 75 73 61 67 65 3d 22  ossibly..usage="
0aa0: 5c 0a 55 73 61 67 65 3a 20 24 30 20 5b 4f 50 54  \.Usage: $0 [OPT
0ab0: 49 4f 4e 5d 2e 2e 2e 20 5b 2d 54 5d 20 53 52 43  ION]... [-T] SRC
0ac0: 46 49 4c 45 20 44 53 54 46 49 4c 45 0a 20 20 20  FILE DSTFILE.   
0ad0: 6f 72 3a 20 24 30 20 5b 4f 50 54 49 4f 4e 5d 2e  or: $0 [OPTION].
0ae0: 2e 2e 20 53 52 43 46 49 4c 45 53 2e 2e 2e 20 44  .. SRCFILES... D
0af0: 49 52 45 43 54 4f 52 59 0a 20 20 20 6f 72 3a 20  IRECTORY.   or: 
0b00: 24 30 20 5b 4f 50 54 49 4f 4e 5d 2e 2e 2e 20 2d  $0 [OPTION]... -
0b10: 74 20 44 49 52 45 43 54 4f 52 59 20 53 52 43 46  t DIRECTORY SRCF
0b20: 49 4c 45 53 2e 2e 2e 0a 20 20 20 6f 72 3a 20 24  ILES....   or: $
0b30: 30 20 5b 4f 50 54 49 4f 4e 5d 2e 2e 2e 20 2d 64  0 [OPTION]... -d
0b40: 20 44 49 52 45 43 54 4f 52 49 45 53 2e 2e 2e 0a   DIRECTORIES....
0b50: 0a 49 6e 20 74 68 65 20 31 73 74 20 66 6f 72 6d  .In the 1st form
0b60: 2c 20 63 6f 70 79 20 53 52 43 46 49 4c 45 20 74  , copy SRCFILE t
0b70: 6f 20 44 53 54 46 49 4c 45 2e 0a 49 6e 20 74 68  o DSTFILE..In th
0b80: 65 20 32 6e 64 20 61 6e 64 20 33 72 64 2c 20 63  e 2nd and 3rd, c
0b90: 6f 70 79 20 61 6c 6c 20 53 52 43 46 49 4c 45 53  opy all SRCFILES
0ba0: 20 74 6f 20 44 49 52 45 43 54 4f 52 59 2e 0a 49   to DIRECTORY..I
0bb0: 6e 20 74 68 65 20 34 74 68 2c 20 63 72 65 61 74  n the 4th, creat
0bc0: 65 20 44 49 52 45 43 54 4f 52 49 45 53 2e 0a 0a  e DIRECTORIES...
0bd0: 4f 70 74 69 6f 6e 73 3a 0a 20 20 20 20 20 2d 2d  Options:.     --
0be0: 68 65 6c 70 20 20 20 20 20 64 69 73 70 6c 61 79  help     display
0bf0: 20 74 68 69 73 20 68 65 6c 70 20 61 6e 64 20 65   this help and e
0c00: 78 69 74 2e 0a 20 20 20 20 20 2d 2d 76 65 72 73  xit..     --vers
0c10: 69 6f 6e 20 20 64 69 73 70 6c 61 79 20 76 65 72  ion  display ver
0c20: 73 69 6f 6e 20 69 6e 66 6f 20 61 6e 64 20 65 78  sion info and ex
0c30: 69 74 2e 0a 0a 20 20 2d 63 20 20 20 20 20 20 20  it...  -c       
0c40: 20 20 20 20 20 28 69 67 6e 6f 72 65 64 29 0a 20       (ignored). 
0c50: 20 2d 43 20 20 20 20 20 20 20 20 20 20 20 20 69   -C            i
0c60: 6e 73 74 61 6c 6c 20 6f 6e 6c 79 20 69 66 20 64  nstall only if d
0c70: 69 66 66 65 72 65 6e 74 20 28 70 72 65 73 65 72  ifferent (preser
0c80: 76 65 20 74 68 65 20 6c 61 73 74 20 64 61 74 61  ve the last data
0c90: 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 74 69   modification ti
0ca0: 6d 65 29 0a 20 20 2d 64 20 20 20 20 20 20 20 20  me).  -d        
0cb0: 20 20 20 20 63 72 65 61 74 65 20 64 69 72 65 63      create direc
0cc0: 74 6f 72 69 65 73 20 69 6e 73 74 65 61 64 20 6f  tories instead o
0cd0: 66 20 69 6e 73 74 61 6c 6c 69 6e 67 20 66 69 6c  f installing fil
0ce0: 65 73 2e 0a 20 20 2d 67 20 47 52 4f 55 50 20 20  es..  -g GROUP  
0cf0: 20 20 20 20 24 63 68 67 72 70 70 72 6f 67 20 69      $chgrpprog i
0d00: 6e 73 74 61 6c 6c 65 64 20 66 69 6c 65 73 20 74  nstalled files t
0d10: 6f 20 47 52 4f 55 50 2e 0a 20 20 2d 6d 20 4d 4f  o GROUP..  -m MO
0d20: 44 45 20 20 20 20 20 20 20 24 63 68 6d 6f 64 70  DE       $chmodp
0d30: 72 6f 67 20 69 6e 73 74 61 6c 6c 65 64 20 66 69  rog installed fi
0d40: 6c 65 73 20 74 6f 20 4d 4f 44 45 2e 0a 20 20 2d  les to MODE..  -
0d50: 6f 20 55 53 45 52 20 20 20 20 20 20 20 24 63 68  o USER       $ch
0d60: 6f 77 6e 70 72 6f 67 20 69 6e 73 74 61 6c 6c 65  ownprog installe
0d70: 64 20 66 69 6c 65 73 20 74 6f 20 55 53 45 52 2e  d files to USER.
0d80: 0a 20 20 2d 73 20 20 20 20 20 20 20 20 20 20 20  .  -s           
0d90: 20 24 73 74 72 69 70 70 72 6f 67 20 69 6e 73 74   $stripprog inst
0da0: 61 6c 6c 65 64 20 66 69 6c 65 73 2e 0a 20 20 2d  alled files..  -
0db0: 53 20 4f 50 54 49 4f 4e 20 20 20 20 20 24 73 74  S OPTION     $st
0dc0: 72 69 70 70 72 6f 67 20 69 6e 73 74 61 6c 6c 65  ripprog installe
0dd0: 64 20 66 69 6c 65 73 20 75 73 69 6e 67 20 4f 50  d files using OP
0de0: 54 49 4f 4e 2e 0a 20 20 2d 74 20 44 49 52 45 43  TION..  -t DIREC
0df0: 54 4f 52 59 20 20 69 6e 73 74 61 6c 6c 20 69 6e  TORY  install in
0e00: 74 6f 20 44 49 52 45 43 54 4f 52 59 2e 0a 20 20  to DIRECTORY..  
0e10: 2d 54 20 20 20 20 20 20 20 20 20 20 20 20 72 65  -T            re
0e20: 70 6f 72 74 20 61 6e 20 65 72 72 6f 72 20 69 66  port an error if
0e30: 20 44 53 54 46 49 4c 45 20 69 73 20 61 20 64 69   DSTFILE is a di
0e40: 72 65 63 74 6f 72 79 2e 0a 0a 45 6e 76 69 72 6f  rectory...Enviro
0e50: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20  nment variables 
0e60: 6f 76 65 72 72 69 64 65 20 74 68 65 20 64 65 66  override the def
0e70: 61 75 6c 74 20 63 6f 6d 6d 61 6e 64 73 3a 0a 20  ault commands:. 
0e80: 20 43 48 47 52 50 50 52 4f 47 20 43 48 4d 4f 44   CHGRPPROG CHMOD
0e90: 50 52 4f 47 20 43 48 4f 57 4e 50 52 4f 47 20 43  PROG CHOWNPROG C
0ea0: 4d 50 50 52 4f 47 20 43 50 50 52 4f 47 20 4d 4b  MPPROG CPPROG MK
0eb0: 44 49 52 50 52 4f 47 20 4d 56 50 52 4f 47 0a 20  DIRPROG MVPROG. 
0ec0: 20 52 4d 50 52 4f 47 20 53 54 52 49 50 50 52 4f   RMPROG STRIPPRO
0ed0: 47 0a 22 0a 0a 77 68 69 6c 65 20 74 65 73 74 20  G."..while test 
0ee0: 24 23 20 2d 6e 65 20 30 3b 20 64 6f 0a 20 20 63  $# -ne 0; do.  c
0ef0: 61 73 65 20 24 31 20 69 6e 0a 20 20 20 20 2d 63  ase $1 in.    -c
0f00: 29 20 3b 3b 0a 0a 20 20 20 20 2d 43 29 20 63 6f  ) ;;..    -C) co
0f10: 70 79 5f 6f 6e 5f 63 68 61 6e 67 65 3d 74 72 75  py_on_change=tru
0f20: 65 3b 3b 0a 0a 20 20 20 20 2d 64 29 20 64 69 72  e;;..    -d) dir
0f30: 5f 61 72 67 3d 74 72 75 65 3b 3b 0a 0a 20 20 20  _arg=true;;..   
0f40: 20 2d 67 29 20 63 68 67 72 70 63 6d 64 3d 22 24   -g) chgrpcmd="$
0f50: 63 68 67 72 70 70 72 6f 67 20 24 32 22 0a 20 20  chgrpprog $2".  
0f60: 20 20 20 20 20 20 73 68 69 66 74 3b 3b 0a 0a 20        shift;;.. 
0f70: 20 20 20 2d 2d 68 65 6c 70 29 20 65 63 68 6f 20     --help) echo 
0f80: 22 24 75 73 61 67 65 22 3b 20 65 78 69 74 20 24  "$usage"; exit $
0f90: 3f 3b 3b 0a 0a 20 20 20 20 2d 6d 29 20 6d 6f 64  ?;;..    -m) mod
0fa0: 65 3d 24 32 0a 20 20 20 20 20 20 20 20 63 61 73  e=$2.        cas
0fb0: 65 20 24 6d 6f 64 65 20 69 6e 0a 20 20 20 20 20  e $mode in.     
0fc0: 20 20 20 20 20 2a 27 20 27 2a 20 7c 20 2a 22 24       *' '* | *"$
0fd0: 74 61 62 22 2a 20 7c 20 2a 22 24 6e 6c 22 2a 20  tab"* | *"$nl"* 
0fe0: 7c 20 2a 27 2a 27 2a 20 7c 20 2a 27 3f 27 2a 20  | *'*'* | *'?'* 
0ff0: 7c 20 2a 27 5b 27 2a 29 0a 20 20 20 20 20 20 20  | *'['*).       
1000: 20 20 20 20 20 65 63 68 6f 20 22 24 30 3a 20 69       echo "$0: i
1010: 6e 76 61 6c 69 64 20 6d 6f 64 65 3a 20 24 6d 6f  nvalid mode: $mo
1020: 64 65 22 20 3e 26 32 0a 20 20 20 20 20 20 20 20  de" >&2.        
1030: 20 20 20 20 65 78 69 74 20 31 3b 3b 0a 20 20 20      exit 1;;.   
1040: 20 20 20 20 20 65 73 61 63 0a 20 20 20 20 20 20       esac.      
1050: 20 20 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 20 20 20 20  ownprog $2".    
1080: 20 20 20 20 73 68 69 66 74 3b 3b 0a 0a 20 20 20      shift;;..   
1090: 20 2d 73 29 20 73 74 72 69 70 63 6d 64 3d 24 73   -s) stripcmd=$s
10a0: 74 72 69 70 70 72 6f 67 3b 3b 0a 0a 20 20 20 20  tripprog;;..    
10b0: 2d 53 29 20 73 74 72 69 70 63 6d 64 3d 22 24 73  -S) stripcmd="$s
10c0: 74 72 69 70 70 72 6f 67 20 24 32 22 0a 20 20 20  tripprog $2".   
10d0: 20 20 20 20 20 73 68 69 66 74 3b 3b 0a 0a 20 20       shift;;..  
10e0: 20 20 2d 74 29 0a 20 20 20 20 20 20 20 20 69 73    -t).        is
10f0: 5f 74 61 72 67 65 74 5f 61 5f 64 69 72 65 63 74  _target_a_direct
1100: 6f 72 79 3d 61 6c 77 61 79 73 0a 20 20 20 20 20  ory=always.     
1110: 20 20 20 64 73 74 5f 61 72 67 3d 24 32 0a 20 20     dst_arg=$2.  
1120: 20 20 20 20 20 20 23 20 50 72 6f 74 65 63 74 20        # Protect 
1130: 6e 61 6d 65 73 20 70 72 6f 62 6c 65 6d 61 74 69  names problemati
1140: 63 20 66 6f 72 20 27 74 65 73 74 27 20 61 6e 64  c for 'test' and
1150: 20 6f 74 68 65 72 20 75 74 69 6c 69 74 69 65 73   other utilities
1160: 2e 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 24  ..        case $
1170: 64 73 74 5f 61 72 67 20 69 6e 0a 20 20 20 20 20  dst_arg in.     
1180: 20 20 20 20 20 2d 2a 20 7c 20 5b 3d 5c 28 5c 29       -* | [=\(\)
1190: 21 5d 29 20 64 73 74 5f 61 72 67 3d 2e 2f 24 64  !]) dst_arg=./$d
11a0: 73 74 5f 61 72 67 3b 3b 0a 20 20 20 20 20 20 20  st_arg;;.       
11b0: 20 65 73 61 63 0a 20 20 20 20 20 20 20 20 73 68   esac.        sh
11c0: 69 66 74 3b 3b 0a 0a 20 20 20 20 2d 54 29 20 69  ift;;..    -T) i
11d0: 73 5f 74 61 72 67 65 74 5f 61 5f 64 69 72 65 63  s_target_a_direc
11e0: 74 6f 72 79 3d 6e 65 76 65 72 3b 3b 0a 0a 20 20  tory=never;;..  
11f0: 20 20 2d 2d 76 65 72 73 69 6f 6e 29 20 65 63 68    --version) ech
1200: 6f 20 22 24 30 20 24 73 63 72 69 70 74 76 65 72  o "$0 $scriptver
1210: 73 69 6f 6e 22 3b 20 65 78 69 74 20 24 3f 3b 3b  sion"; exit $?;;
1220: 0a 0a 20 20 20 20 2d 2d 29 20 73 68 69 66 74 0a  ..    --) shift.
1230: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 3b 0a          break;;.
1240: 0a 20 20 20 20 2d 2a 29 20 65 63 68 6f 20 22 24  .    -*) echo "$
1250: 30 3a 20 69 6e 76 61 6c 69 64 20 6f 70 74 69 6f  0: invalid optio
1260: 6e 3a 20 24 31 22 20 3e 26 32 0a 20 20 20 20 20  n: $1" >&2.     
1270: 20 20 20 65 78 69 74 20 31 3b 3b 0a 0a 20 20 20     exit 1;;..   
1280: 20 2a 29 20 20 62 72 65 61 6b 3b 3b 0a 20 20 65   *)  break;;.  e
1290: 73 61 63 0a 20 20 73 68 69 66 74 0a 64 6f 6e 65  sac.  shift.done
12a0: 0a 0a 23 20 57 65 20 61 6c 6c 6f 77 20 74 68 65  ..# We allow the
12b0: 20 75 73 65 20 6f 66 20 6f 70 74 69 6f 6e 73 20   use of options 
12c0: 2d 64 20 61 6e 64 20 2d 54 20 74 6f 67 65 74 68  -d and -T togeth
12d0: 65 72 2c 20 62 79 20 6d 61 6b 69 6e 67 20 2d 64  er, by making -d
12e0: 0a 23 20 74 61 6b 65 20 74 68 65 20 70 72 65 63  .# take the prec
12f0: 65 64 65 6e 63 65 3b 20 74 68 69 73 20 69 73 20  edence; this is 
1300: 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  for compatibilit
1310: 79 20 77 69 74 68 20 47 4e 55 20 69 6e 73 74 61  y with GNU insta
1320: 6c 6c 2e 0a 0a 69 66 20 74 65 73 74 20 2d 6e 20  ll...if test -n 
1330: 22 24 64 69 72 5f 61 72 67 22 3b 20 74 68 65 6e  "$dir_arg"; then
1340: 0a 20 20 69 66 20 74 65 73 74 20 2d 6e 20 22 24  .  if test -n "$
1350: 64 73 74 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20  dst_arg"; then. 
1360: 20 20 20 65 63 68 6f 20 22 24 30 3a 20 74 61 72     echo "$0: tar
1370: 67 65 74 20 64 69 72 65 63 74 6f 72 79 20 6e 6f  get directory no
1380: 74 20 61 6c 6c 6f 77 65 64 20 77 68 65 6e 20 69  t allowed when i
1390: 6e 73 74 61 6c 6c 69 6e 67 20 61 20 64 69 72 65  nstalling a dire
13a0: 63 74 6f 72 79 2e 22 20 3e 26 32 0a 20 20 20 20  ctory." >&2.    
13b0: 65 78 69 74 20 31 0a 20 20 66 69 0a 66 69 0a 0a  exit 1.  fi.fi..
13c0: 69 66 20 74 65 73 74 20 24 23 20 2d 6e 65 20 30  if test $# -ne 0
13d0: 20 26 26 20 74 65 73 74 20 2d 7a 20 22 24 64 69   && test -z "$di
13e0: 72 5f 61 72 67 24 64 73 74 5f 61 72 67 22 3b 20  r_arg$dst_arg"; 
13f0: 74 68 65 6e 0a 20 20 23 20 57 68 65 6e 20 2d 64  then.  # When -d
1400: 20 69 73 20 75 73 65 64 2c 20 61 6c 6c 20 72 65   is used, all re
1410: 6d 61 69 6e 69 6e 67 20 61 72 67 75 6d 65 6e 74  maining argument
1420: 73 20 61 72 65 20 64 69 72 65 63 74 6f 72 69 65  s are directorie
1430: 73 20 74 6f 20 63 72 65 61 74 65 2e 0a 20 20 23  s to create..  #
1440: 20 57 68 65 6e 20 2d 74 20 69 73 20 75 73 65 64   When -t is used
1450: 2c 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  , the destinatio
1460: 6e 20 69 73 20 61 6c 72 65 61 64 79 20 73 70 65  n is already spe
1470: 63 69 66 69 65 64 2e 0a 20 20 23 20 4f 74 68 65  cified..  # Othe
1480: 72 77 69 73 65 2c 20 74 68 65 20 6c 61 73 74 20  rwise, the last 
1490: 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20  argument is the 
14a0: 64 65 73 74 69 6e 61 74 69 6f 6e 2e 20 20 52 65  destination.  Re
14b0: 6d 6f 76 65 20 69 74 20 66 72 6f 6d 20 24 40 2e  move it from $@.
14c0: 0a 20 20 66 6f 72 20 61 72 67 0a 20 20 64 6f 0a  .  for arg.  do.
14d0: 20 20 20 20 69 66 20 74 65 73 74 20 2d 6e 20 22      if test -n "
14e0: 24 64 73 74 5f 61 72 67 22 3b 20 74 68 65 6e 0a  $dst_arg"; then.
14f0: 20 20 20 20 20 20 23 20 24 40 20 69 73 20 6e 6f        # $@ is no
1500: 74 20 65 6d 70 74 79 3a 20 69 74 20 63 6f 6e 74  t empty: it cont
1510: 61 69 6e 73 20 61 74 20 6c 65 61 73 74 20 24 61  ains at least $a
1520: 72 67 2e 0a 20 20 20 20 20 20 73 65 74 20 66 6e  rg..      set fn
1530: 6f 72 64 20 22 24 40 22 20 22 24 64 73 74 5f 61  ord "$@" "$dst_a
1540: 72 67 22 0a 20 20 20 20 20 20 73 68 69 66 74 20  rg".      shift 
1550: 23 20 66 6e 6f 72 64 0a 20 20 20 20 66 69 0a 20  # fnord.    fi. 
1560: 20 20 20 73 68 69 66 74 20 23 20 61 72 67 0a 20     shift # arg. 
1570: 20 20 20 64 73 74 5f 61 72 67 3d 24 61 72 67 0a     dst_arg=$arg.
1580: 20 20 20 20 23 20 50 72 6f 74 65 63 74 20 6e 61      # Protect na
1590: 6d 65 73 20 70 72 6f 62 6c 65 6d 61 74 69 63 20  mes problematic 
15a0: 66 6f 72 20 27 74 65 73 74 27 20 61 6e 64 20 6f  for 'test' and o
15b0: 74 68 65 72 20 75 74 69 6c 69 74 69 65 73 2e 0a  ther utilities..
15c0: 20 20 20 20 63 61 73 65 20 24 64 73 74 5f 61 72      case $dst_ar
15d0: 67 20 69 6e 0a 20 20 20 20 20 20 2d 2a 20 7c 20  g in.      -* | 
15e0: 5b 3d 5c 28 5c 29 21 5d 29 20 64 73 74 5f 61 72  [=\(\)!]) dst_ar
15f0: 67 3d 2e 2f 24 64 73 74 5f 61 72 67 3b 3b 0a 20  g=./$dst_arg;;. 
1600: 20 20 20 65 73 61 63 0a 20 20 64 6f 6e 65 0a 66     esac.  done.f
1610: 69 0a 0a 69 66 20 74 65 73 74 20 24 23 20 2d 65  i..if test $# -e
1620: 71 20 30 3b 20 74 68 65 6e 0a 20 20 69 66 20 74  q 0; then.  if t
1630: 65 73 74 20 2d 7a 20 22 24 64 69 72 5f 61 72 67  est -z "$dir_arg
1640: 22 3b 20 74 68 65 6e 0a 20 20 20 20 65 63 68 6f  "; then.    echo
1650: 20 22 24 30 3a 20 6e 6f 20 69 6e 70 75 74 20 66   "$0: no input f
1660: 69 6c 65 20 73 70 65 63 69 66 69 65 64 2e 22 20  ile specified." 
1670: 3e 26 32 0a 20 20 20 20 65 78 69 74 20 31 0a 20  >&2.    exit 1. 
1680: 20 66 69 0a 20 20 23 20 49 74 27 73 20 4f 4b 20   fi.  # It's OK 
1690: 74 6f 20 63 61 6c 6c 20 27 69 6e 73 74 61 6c 6c  to call 'install
16a0: 2d 73 68 20 2d 64 27 20 77 69 74 68 6f 75 74 20  -sh -d' without 
16b0: 61 72 67 75 6d 65 6e 74 2e 0a 20 20 23 20 54 68  argument..  # Th
16c0: 69 73 20 63 61 6e 20 68 61 70 70 65 6e 20 77 68  is can happen wh
16d0: 65 6e 20 63 72 65 61 74 69 6e 67 20 63 6f 6e 64  en creating cond
16e0: 69 74 69 6f 6e 61 6c 20 64 69 72 65 63 74 6f 72  itional director
16f0: 69 65 73 2e 0a 20 20 65 78 69 74 20 30 0a 66 69  ies..  exit 0.fi
1700: 0a 0a 69 66 20 74 65 73 74 20 2d 7a 20 22 24 64  ..if test -z "$d
1710: 69 72 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20 20  ir_arg"; then.  
1720: 69 66 20 74 65 73 74 20 24 23 20 2d 67 74 20 31  if test $# -gt 1
1730: 20 7c 7c 20 74 65 73 74 20 22 24 69 73 5f 74 61   || test "$is_ta
1740: 72 67 65 74 5f 61 5f 64 69 72 65 63 74 6f 72 79  rget_a_directory
1750: 22 20 3d 20 61 6c 77 61 79 73 3b 20 74 68 65 6e  " = always; then
1760: 0a 20 20 20 20 69 66 20 74 65 73 74 20 21 20 2d  .    if test ! -
1770: 64 20 22 24 64 73 74 5f 61 72 67 22 3b 20 74 68  d "$dst_arg"; th
1780: 65 6e 0a 20 20 20 20 20 20 65 63 68 6f 20 22 24  en.      echo "$
1790: 30 3a 20 24 64 73 74 5f 61 72 67 3a 20 49 73 20  0: $dst_arg: Is 
17a0: 6e 6f 74 20 61 20 64 69 72 65 63 74 6f 72 79 2e  not a directory.
17b0: 22 20 3e 26 32 0a 20 20 20 20 20 20 65 78 69 74  " >&2.      exit
17c0: 20 31 0a 20 20 20 20 66 69 0a 20 20 66 69 0a 66   1.    fi.  fi.f
17d0: 69 0a 0a 69 66 20 74 65 73 74 20 2d 7a 20 22 24  i..if test -z "$
17e0: 64 69 72 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20  dir_arg"; then. 
17f0: 20 64 6f 5f 65 78 69 74 3d 27 28 65 78 69 74 20   do_exit='(exit 
1800: 24 72 65 74 29 3b 20 65 78 69 74 20 24 72 65 74  $ret); exit $ret
1810: 27 0a 20 20 74 72 61 70 20 22 72 65 74 3d 31 32  '.  trap "ret=12
1820: 39 3b 20 24 64 6f 5f 65 78 69 74 22 20 31 0a 20  9; $do_exit" 1. 
1830: 20 74 72 61 70 20 22 72 65 74 3d 31 33 30 3b 20   trap "ret=130; 
1840: 24 64 6f 5f 65 78 69 74 22 20 32 0a 20 20 74 72  $do_exit" 2.  tr
1850: 61 70 20 22 72 65 74 3d 31 34 31 3b 20 24 64 6f  ap "ret=141; $do
1860: 5f 65 78 69 74 22 20 31 33 0a 20 20 74 72 61 70  _exit" 13.  trap
1870: 20 22 72 65 74 3d 31 34 33 3b 20 24 64 6f 5f 65   "ret=143; $do_e
1880: 78 69 74 22 20 31 35 0a 0a 20 20 23 20 53 65 74  xit" 15..  # Set
1890: 20 75 6d 61 73 6b 20 73 6f 20 61 73 20 6e 6f 74   umask so as not
18a0: 20 74 6f 20 63 72 65 61 74 65 20 74 65 6d 70 73   to create temps
18b0: 20 77 69 74 68 20 74 6f 6f 2d 67 65 6e 65 72 6f   with too-genero
18c0: 75 73 20 6d 6f 64 65 73 2e 0a 20 20 23 20 48 6f  us modes..  # Ho
18d0: 77 65 76 65 72 2c 20 27 73 74 72 69 70 27 20 72  wever, 'strip' r
18e0: 65 71 75 69 72 65 73 20 62 6f 74 68 20 72 65 61  equires both rea
18f0: 64 20 61 6e 64 20 77 72 69 74 65 20 61 63 63 65  d and write acce
1900: 73 73 20 74 6f 20 74 65 6d 70 73 2e 0a 20 20 63  ss to temps..  c
1910: 61 73 65 20 24 6d 6f 64 65 20 69 6e 0a 20 20 20  ase $mode in.   
1920: 20 23 20 4f 70 74 69 6d 69 7a 65 20 63 6f 6d 6d   # Optimize comm
1930: 6f 6e 20 63 61 73 65 73 2e 0a 20 20 20 20 2a 36  on cases..    *6
1940: 34 34 29 20 63 70 5f 75 6d 61 73 6b 3d 31 33 33  44) cp_umask=133
1950: 3b 3b 0a 20 20 20 20 2a 37 35 35 29 20 63 70 5f  ;;.    *755) cp_
1960: 75 6d 61 73 6b 3d 32 32 3b 3b 0a 0a 20 20 20 20  umask=22;;..    
1970: 2a 5b 30 2d 37 5d 29 0a 20 20 20 20 20 20 69 66  *[0-7]).      if
1980: 20 74 65 73 74 20 2d 7a 20 22 24 73 74 72 69 70   test -z "$strip
1990: 63 6d 64 22 3b 20 74 68 65 6e 0a 20 20 20 20 20  cmd"; then.     
19a0: 20 20 20 75 5f 70 6c 75 73 5f 72 77 3d 0a 20 20     u_plus_rw=.  
19b0: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
19c0: 20 75 5f 70 6c 75 73 5f 72 77 3d 27 25 20 32 30   u_plus_rw='% 20
19d0: 30 27 0a 20 20 20 20 20 20 66 69 0a 20 20 20 20  0'.      fi.    
19e0: 20 20 63 70 5f 75 6d 61 73 6b 3d 60 65 78 70 72    cp_umask=`expr
19f0: 20 27 28 27 20 37 37 37 20 2d 20 24 6d 6f 64 65   '(' 777 - $mode
1a00: 20 25 20 31 30 30 30 20 27 29 27 20 24 75 5f 70   % 1000 ')' $u_p
1a10: 6c 75 73 5f 72 77 60 3b 3b 0a 20 20 20 20 2a 29  lus_rw`;;.    *)
1a20: 0a 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2d  .      if test -
1a30: 7a 20 22 24 73 74 72 69 70 63 6d 64 22 3b 20 74  z "$stripcmd"; t
1a40: 68 65 6e 0a 20 20 20 20 20 20 20 20 75 5f 70 6c  hen.        u_pl
1a50: 75 73 5f 72 77 3d 0a 20 20 20 20 20 20 65 6c 73  us_rw=.      els
1a60: 65 0a 20 20 20 20 20 20 20 20 75 5f 70 6c 75 73  e.        u_plus
1a70: 5f 72 77 3d 2c 75 2b 72 77 0a 20 20 20 20 20 20  _rw=,u+rw.      
1a80: 66 69 0a 20 20 20 20 20 20 63 70 5f 75 6d 61 73  fi.      cp_umas
1a90: 6b 3d 24 6d 6f 64 65 24 75 5f 70 6c 75 73 5f 72  k=$mode$u_plus_r
1aa0: 77 3b 3b 0a 20 20 65 73 61 63 0a 66 69 0a 0a 66  w;;.  esac.fi..f
1ab0: 6f 72 20 73 72 63 0a 64 6f 0a 20 20 23 20 50 72  or src.do.  # Pr
1ac0: 6f 74 65 63 74 20 6e 61 6d 65 73 20 70 72 6f 62  otect names prob
1ad0: 6c 65 6d 61 74 69 63 20 66 6f 72 20 27 74 65 73  lematic for 'tes
1ae0: 74 27 20 61 6e 64 20 6f 74 68 65 72 20 75 74 69  t' and other uti
1af0: 6c 69 74 69 65 73 2e 0a 20 20 63 61 73 65 20 24  lities..  case $
1b00: 73 72 63 20 69 6e 0a 20 20 20 20 2d 2a 20 7c 20  src in.    -* | 
1b10: 5b 3d 5c 28 5c 29 21 5d 29 20 73 72 63 3d 2e 2f  [=\(\)!]) src=./
1b20: 24 73 72 63 3b 3b 0a 20 20 65 73 61 63 0a 0a 20  $src;;.  esac.. 
1b30: 20 69 66 20 74 65 73 74 20 2d 6e 20 22 24 64 69   if test -n "$di
1b40: 72 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20 20 20  r_arg"; then.   
1b50: 20 64 73 74 3d 24 73 72 63 0a 20 20 20 20 64 73   dst=$src.    ds
1b60: 74 64 69 72 3d 24 64 73 74 0a 20 20 20 20 74 65  tdir=$dst.    te
1b70: 73 74 20 2d 64 20 22 24 64 73 74 64 69 72 22 0a  st -d "$dstdir".
1b80: 20 20 20 20 64 73 74 64 69 72 5f 73 74 61 74 75      dstdir_statu
1b90: 73 3d 24 3f 0a 20 20 65 6c 73 65 0a 0a 20 20 20  s=$?.  else..   
1ba0: 20 23 20 57 61 69 74 69 6e 67 20 66 6f 72 20 74   # Waiting for t
1bb0: 68 69 73 20 74 6f 20 62 65 20 64 65 74 65 63 74  his to be detect
1bc0: 65 64 20 62 79 20 74 68 65 20 22 24 63 70 70 72  ed by the "$cppr
1bd0: 6f 67 20 24 73 72 63 20 24 64 73 74 74 6d 70 22  og $src $dsttmp"
1be0: 20 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 23 20 6d   command.    # m
1bf0: 69 67 68 74 20 63 61 75 73 65 20 64 69 72 65 63  ight cause direc
1c00: 74 6f 72 69 65 73 20 74 6f 20 62 65 20 63 72 65  tories to be cre
1c10: 61 74 65 64 2c 20 77 68 69 63 68 20 77 6f 75 6c  ated, which woul
1c20: 64 20 62 65 20 65 73 70 65 63 69 61 6c 6c 79 20  d be especially 
1c30: 62 61 64 0a 20 20 20 20 23 20 69 66 20 24 73 72  bad.    # if $sr
1c40: 63 20 28 61 6e 64 20 74 68 75 73 20 24 64 73 74  c (and thus $dst
1c50: 74 6d 70 29 20 63 6f 6e 74 61 69 6e 73 20 27 2a  tmp) contains '*
1c60: 27 2e 0a 20 20 20 20 69 66 20 74 65 73 74 20 21  '..    if test !
1c70: 20 2d 66 20 22 24 73 72 63 22 20 26 26 20 74 65   -f "$src" && te
1c80: 73 74 20 21 20 2d 64 20 22 24 73 72 63 22 3b 20  st ! -d "$src"; 
1c90: 74 68 65 6e 0a 20 20 20 20 20 20 65 63 68 6f 20  then.      echo 
1ca0: 22 24 30 3a 20 24 73 72 63 20 64 6f 65 73 20 6e  "$0: $src does n
1cb0: 6f 74 20 65 78 69 73 74 2e 22 20 3e 26 32 0a 20  ot exist." >&2. 
1cc0: 20 20 20 20 20 65 78 69 74 20 31 0a 20 20 20 20       exit 1.    
1cd0: 66 69 0a 0a 20 20 20 20 69 66 20 74 65 73 74 20  fi..    if test 
1ce0: 2d 7a 20 22 24 64 73 74 5f 61 72 67 22 3b 20 74  -z "$dst_arg"; t
1cf0: 68 65 6e 0a 20 20 20 20 20 20 65 63 68 6f 20 22  hen.      echo "
1d00: 24 30 3a 20 6e 6f 20 64 65 73 74 69 6e 61 74 69  $0: no destinati
1d10: 6f 6e 20 73 70 65 63 69 66 69 65 64 2e 22 20 3e  on specified." >
1d20: 26 32 0a 20 20 20 20 20 20 65 78 69 74 20 31 0a  &2.      exit 1.
1d30: 20 20 20 20 66 69 0a 20 20 20 20 64 73 74 3d 24      fi.    dst=$
1d40: 64 73 74 5f 61 72 67 0a 0a 20 20 20 20 23 20 49  dst_arg..    # I
1d50: 66 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 73  f destination is
1d60: 20 61 20 64 69 72 65 63 74 6f 72 79 2c 20 61 70   a directory, ap
1d70: 70 65 6e 64 20 74 68 65 20 69 6e 70 75 74 20 66  pend the input f
1d80: 69 6c 65 6e 61 6d 65 2e 0a 20 20 20 20 69 66 20  ilename..    if 
1d90: 74 65 73 74 20 2d 64 20 22 24 64 73 74 22 3b 20  test -d "$dst"; 
1da0: 74 68 65 6e 0a 20 20 20 20 20 20 69 66 20 74 65  then.      if te
1db0: 73 74 20 22 24 69 73 5f 74 61 72 67 65 74 5f 61  st "$is_target_a
1dc0: 5f 64 69 72 65 63 74 6f 72 79 22 20 3d 20 6e 65  _directory" = ne
1dd0: 76 65 72 3b 20 74 68 65 6e 0a 20 20 20 20 20 20  ver; then.      
1de0: 20 20 65 63 68 6f 20 22 24 30 3a 20 24 64 73 74    echo "$0: $dst
1df0: 5f 61 72 67 3a 20 49 73 20 61 20 64 69 72 65 63  _arg: Is a direc
1e00: 74 6f 72 79 22 20 3e 26 32 0a 20 20 20 20 20 20  tory" >&2.      
1e10: 20 20 65 78 69 74 20 31 0a 20 20 20 20 20 20 66    exit 1.      f
1e20: 69 0a 20 20 20 20 20 20 64 73 74 64 69 72 3d 24  i.      dstdir=$
1e30: 64 73 74 0a 20 20 20 20 20 20 64 73 74 62 61 73  dst.      dstbas
1e40: 65 3d 60 62 61 73 65 6e 61 6d 65 20 22 24 73 72  e=`basename "$sr
1e50: 63 22 60 0a 20 20 20 20 20 20 63 61 73 65 20 24  c"`.      case $
1e60: 64 73 74 20 69 6e 0a 09 2a 2f 29 20 64 73 74 3d  dst in..*/) dst=
1e70: 24 64 73 74 24 64 73 74 62 61 73 65 3b 3b 0a 09  $dst$dstbase;;..
1e80: 2a 29 20 20 64 73 74 3d 24 64 73 74 2f 24 64 73  *)  dst=$dst/$ds
1e90: 74 62 61 73 65 3b 3b 0a 20 20 20 20 20 20 65 73  tbase;;.      es
1ea0: 61 63 0a 20 20 20 20 20 20 64 73 74 64 69 72 5f  ac.      dstdir_
1eb0: 73 74 61 74 75 73 3d 30 0a 20 20 20 20 65 6c 73  status=0.    els
1ec0: 65 0a 20 20 20 20 20 20 64 73 74 64 69 72 3d 60  e.      dstdir=`
1ed0: 64 69 72 6e 61 6d 65 20 22 24 64 73 74 22 60 0a  dirname "$dst"`.
1ee0: 20 20 20 20 20 20 74 65 73 74 20 2d 64 20 22 24        test -d "$
1ef0: 64 73 74 64 69 72 22 0a 20 20 20 20 20 20 64 73  dstdir".      ds
1f00: 74 64 69 72 5f 73 74 61 74 75 73 3d 24 3f 0a 20  tdir_status=$?. 
1f10: 20 20 20 66 69 0a 20 20 66 69 0a 0a 20 20 63 61     fi.  fi..  ca
1f20: 73 65 20 24 64 73 74 64 69 72 20 69 6e 0a 20 20  se $dstdir in.  
1f30: 20 20 2a 2f 29 20 64 73 74 64 69 72 73 6c 61 73    */) dstdirslas
1f40: 68 3d 24 64 73 74 64 69 72 3b 3b 0a 20 20 20 20  h=$dstdir;;.    
1f50: 2a 29 20 20 64 73 74 64 69 72 73 6c 61 73 68 3d  *)  dstdirslash=
1f60: 24 64 73 74 64 69 72 2f 3b 3b 0a 20 20 65 73 61  $dstdir/;;.  esa
1f70: 63 0a 0a 20 20 6f 62 73 6f 6c 65 74 65 5f 6d 6b  c..  obsolete_mk
1f80: 64 69 72 5f 75 73 65 64 3d 66 61 6c 73 65 0a 0a  dir_used=false..
1f90: 20 20 69 66 20 74 65 73 74 20 24 64 73 74 64 69    if test $dstdi
1fa0: 72 5f 73 74 61 74 75 73 20 21 3d 20 30 3b 20 74  r_status != 0; t
1fb0: 68 65 6e 0a 20 20 20 20 63 61 73 65 20 24 70 6f  hen.    case $po
1fc0: 73 69 78 5f 6d 6b 64 69 72 20 69 6e 0a 20 20 20  six_mkdir in.   
1fd0: 20 20 20 27 27 29 0a 20 20 20 20 20 20 20 20 23     '').        #
1fe0: 20 57 69 74 68 20 2d 64 2c 20 63 72 65 61 74 65   With -d, create
1ff0: 20 74 68 65 20 6e 65 77 20 64 69 72 65 63 74 6f   the new directo
2000: 72 79 20 77 69 74 68 20 74 68 65 20 75 73 65 72  ry with the user
2010: 2d 73 70 65 63 69 66 69 65 64 20 6d 6f 64 65 2e  -specified mode.
2020: 0a 20 20 20 20 20 20 20 20 23 20 4f 74 68 65 72  .        # Other
2030: 77 69 73 65 2c 20 72 65 6c 79 20 6f 6e 20 24 6d  wise, rely on $m
2040: 6b 64 69 72 5f 75 6d 61 73 6b 2e 0a 20 20 20 20  kdir_umask..    
2050: 20 20 20 20 69 66 20 74 65 73 74 20 2d 6e 20 22      if test -n "
2060: 24 64 69 72 5f 61 72 67 22 3b 20 74 68 65 6e 0a  $dir_arg"; then.
2070: 20 20 20 20 20 20 20 20 20 20 6d 6b 64 69 72 5f            mkdir_
2080: 6d 6f 64 65 3d 2d 6d 24 6d 6f 64 65 0a 20 20 20  mode=-m$mode.   
2090: 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20       else.      
20a0: 20 20 20 20 6d 6b 64 69 72 5f 6d 6f 64 65 3d 0a      mkdir_mode=.
20b0: 20 20 20 20 20 20 20 20 66 69 0a 0a 20 20 20 20          fi..    
20c0: 20 20 20 20 70 6f 73 69 78 5f 6d 6b 64 69 72 3d      posix_mkdir=
20d0: 66 61 6c 73 65 0a 09 23 20 54 68 65 20 24 52 41  false..# The $RA
20e0: 4e 44 4f 4d 20 76 61 72 69 61 62 6c 65 20 69 73  NDOM variable is
20f0: 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 28 65   not portable (e
2100: 2e 67 2e 2c 20 64 61 73 68 29 2e 20 20 55 73 65  .g., dash).  Use
2110: 20 69 74 0a 09 23 20 68 65 72 65 20 68 6f 77 65   it..# here howe
2120: 76 65 72 20 77 68 65 6e 20 70 6f 73 73 69 62 6c  ver when possibl
2130: 65 20 6a 75 73 74 20 74 6f 20 6c 6f 77 65 72 20  e just to lower 
2140: 63 6f 6c 6c 69 73 69 6f 6e 20 63 68 61 6e 63 65  collision chance
2150: 2e 0a 09 74 6d 70 64 69 72 3d 24 7b 54 4d 50 44  ...tmpdir=${TMPD
2160: 49 52 2d 2f 74 6d 70 7d 2f 69 6e 73 24 52 41 4e  IR-/tmp}/ins$RAN
2170: 44 4f 4d 2d 24 24 0a 0a 09 74 72 61 70 20 27 0a  DOM-$$...trap '.
2180: 09 20 20 72 65 74 3d 24 3f 0a 09 20 20 72 6d 64  .  ret=$?..  rmd
2190: 69 72 20 22 24 74 6d 70 64 69 72 2f 61 2f 62 22  ir "$tmpdir/a/b"
21a0: 20 22 24 74 6d 70 64 69 72 2f 61 22 20 22 24 74   "$tmpdir/a" "$t
21b0: 6d 70 64 69 72 22 20 32 3e 2f 64 65 76 2f 6e 75  mpdir" 2>/dev/nu
21c0: 6c 6c 0a 09 20 20 65 78 69 74 20 24 72 65 74 0a  ll..  exit $ret.
21d0: 09 27 20 30 0a 0a 09 23 20 42 65 63 61 75 73 65  .' 0...# Because
21e0: 20 22 6d 6b 64 69 72 20 2d 70 22 20 66 6f 6c 6c   "mkdir -p" foll
21f0: 6f 77 73 20 65 78 69 73 74 69 6e 67 20 73 79 6d  ows existing sym
2200: 6c 69 6e 6b 73 20 61 6e 64 20 77 65 20 6c 69 6b  links and we lik
2210: 65 6c 79 20 77 6f 72 6b 0a 09 23 20 64 69 72 65  ely work..# dire
2220: 63 74 6c 79 20 69 6e 20 77 6f 72 6c 64 2d 77 72  ctly in world-wr
2230: 69 74 65 61 62 6c 65 20 2f 74 6d 70 2c 20 6d 61  iteable /tmp, ma
2240: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
2250: 20 27 24 74 6d 70 64 69 72 27 0a 09 23 20 64 69   '$tmpdir'..# di
2260: 72 65 63 74 6f 72 79 20 69 73 20 73 75 63 63 65  rectory is succe
2270: 73 73 66 75 6c 6c 79 20 63 72 65 61 74 65 64 20  ssfully created 
2280: 66 69 72 73 74 20 62 65 66 6f 72 65 20 77 65 20  first before we 
2290: 61 63 74 75 61 6c 6c 79 20 74 65 73 74 0a 09 23  actually test..#
22a0: 20 27 6d 6b 64 69 72 20 2d 70 27 2e 0a 09 69 66   'mkdir -p'...if
22b0: 20 28 75 6d 61 73 6b 20 24 6d 6b 64 69 72 5f 75   (umask $mkdir_u
22c0: 6d 61 73 6b 20 26 26 0a 09 20 20 20 20 24 6d 6b  mask &&..    $mk
22d0: 64 69 72 70 72 6f 67 20 24 6d 6b 64 69 72 5f 6d  dirprog $mkdir_m
22e0: 6f 64 65 20 22 24 74 6d 70 64 69 72 22 20 26 26  ode "$tmpdir" &&
22f0: 0a 09 20 20 20 20 65 78 65 63 20 24 6d 6b 64 69  ..    exec $mkdi
2300: 72 70 72 6f 67 20 24 6d 6b 64 69 72 5f 6d 6f 64  rprog $mkdir_mod
2310: 65 20 2d 70 20 2d 2d 20 22 24 74 6d 70 64 69 72  e -p -- "$tmpdir
2320: 2f 61 2f 62 22 29 20 3e 2f 64 65 76 2f 6e 75 6c  /a/b") >/dev/nul
2330: 6c 20 32 3e 26 31 0a 09 74 68 65 6e 0a 09 20 20  l 2>&1..then..  
2340: 69 66 20 74 65 73 74 20 2d 7a 20 22 24 64 69 72  if test -z "$dir
2350: 5f 61 72 67 22 20 7c 7c 20 7b 0a 09 20 20 20 20  _arg" || {..    
2360: 20 20 20 23 20 43 68 65 63 6b 20 66 6f 72 20 50     # Check for P
2370: 4f 53 49 58 20 69 6e 63 6f 6d 70 61 74 69 62 69  OSIX incompatibi
2380: 6c 69 74 69 65 73 20 77 69 74 68 20 2d 6d 2e 0a  lities with -m..
2390: 09 20 20 20 20 20 20 20 23 20 48 50 2d 55 58 20  .       # HP-UX 
23a0: 31 31 2e 32 33 20 61 6e 64 20 49 52 49 58 20 36  11.23 and IRIX 6
23b0: 2e 35 20 6d 6b 64 69 72 20 2d 6d 20 2d 70 20 73  .5 mkdir -m -p s
23c0: 65 74 73 20 67 72 6f 75 70 2d 20 6f 72 0a 09 20  ets group- or.. 
23d0: 20 20 20 20 20 20 23 20 6f 74 68 65 72 2d 77 72        # other-wr
23e0: 69 74 61 62 6c 65 20 62 69 74 20 6f 66 20 70 61  itable bit of pa
23f0: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 77  rent directory w
2400: 68 65 6e 20 69 74 20 73 68 6f 75 6c 64 6e 27 74  hen it shouldn't
2410: 2e 0a 09 20 20 20 20 20 20 20 23 20 46 72 65 65  ...       # Free
2420: 42 53 44 20 36 2e 31 20 6d 6b 64 69 72 20 2d 6d  BSD 6.1 mkdir -m
2430: 20 2d 70 20 73 65 74 73 20 6d 6f 64 65 20 6f 66   -p sets mode of
2440: 20 65 78 69 73 74 69 6e 67 20 64 69 72 65 63 74   existing direct
2450: 6f 72 79 2e 0a 09 20 20 20 20 20 20 20 74 65 73  ory...       tes
2460: 74 5f 74 6d 70 64 69 72 3d 22 24 74 6d 70 64 69  t_tmpdir="$tmpdi
2470: 72 2f 61 22 0a 09 20 20 20 20 20 20 20 6c 73 5f  r/a"..       ls_
2480: 6c 64 5f 74 6d 70 64 69 72 3d 60 6c 73 20 2d 6c  ld_tmpdir=`ls -l
2490: 64 20 22 24 74 65 73 74 5f 74 6d 70 64 69 72 22  d "$test_tmpdir"
24a0: 60 0a 09 20 20 20 20 20 20 20 63 61 73 65 20 24  `..       case $
24b0: 6c 73 5f 6c 64 5f 74 6d 70 64 69 72 20 69 6e 0a  ls_ld_tmpdir in.
24c0: 09 09 20 64 3f 3f 3f 3f 2d 3f 72 2d 2a 29 20 64  .. d????-?r-*) d
24d0: 69 66 66 65 72 65 6e 74 5f 6d 6f 64 65 3d 37 30  ifferent_mode=70
24e0: 30 3b 3b 0a 09 09 20 64 3f 3f 3f 3f 2d 3f 2d 2d  0;;... d????-?--
24f0: 2a 29 20 64 69 66 66 65 72 65 6e 74 5f 6d 6f 64  *) different_mod
2500: 65 3d 37 35 35 3b 3b 0a 09 09 20 2a 29 20 66 61  e=755;;... *) fa
2510: 6c 73 65 3b 3b 0a 09 20 20 20 20 20 20 20 65 73  lse;;..       es
2520: 61 63 20 26 26 0a 09 20 20 20 20 20 20 20 24 6d  ac &&..       $m
2530: 6b 64 69 72 70 72 6f 67 20 2d 6d 24 64 69 66 66  kdirprog -m$diff
2540: 65 72 65 6e 74 5f 6d 6f 64 65 20 2d 70 20 2d 2d  erent_mode -p --
2550: 20 22 24 74 65 73 74 5f 74 6d 70 64 69 72 22 20   "$test_tmpdir" 
2560: 26 26 20 7b 0a 09 09 20 6c 73 5f 6c 64 5f 74 6d  && {... ls_ld_tm
2570: 70 64 69 72 5f 31 3d 60 6c 73 20 2d 6c 64 20 22  pdir_1=`ls -ld "
2580: 24 74 65 73 74 5f 74 6d 70 64 69 72 22 60 0a 09  $test_tmpdir"`..
2590: 09 20 74 65 73 74 20 22 24 6c 73 5f 6c 64 5f 74  . test "$ls_ld_t
25a0: 6d 70 64 69 72 22 20 3d 20 22 24 6c 73 5f 6c 64  mpdir" = "$ls_ld
25b0: 5f 74 6d 70 64 69 72 5f 31 22 0a 09 20 20 20 20  _tmpdir_1"..    
25c0: 20 20 20 7d 0a 09 20 20 20 20 20 7d 0a 09 20 20     }..     }..  
25d0: 74 68 65 6e 20 70 6f 73 69 78 5f 6d 6b 64 69 72  then posix_mkdir
25e0: 3d 3a 0a 09 20 20 66 69 0a 09 20 20 72 6d 64 69  =:..  fi..  rmdi
25f0: 72 20 22 24 74 6d 70 64 69 72 2f 61 2f 62 22 20  r "$tmpdir/a/b" 
2600: 22 24 74 6d 70 64 69 72 2f 61 22 20 22 24 74 6d  "$tmpdir/a" "$tm
2610: 70 64 69 72 22 0a 09 65 6c 73 65 0a 09 20 20 23  pdir"..else..  #
2620: 20 52 65 6d 6f 76 65 20 61 6e 79 20 64 69 72 73   Remove any dirs
2630: 20 6c 65 66 74 20 62 65 68 69 6e 64 20 62 79 20   left behind by 
2640: 61 6e 63 69 65 6e 74 20 6d 6b 64 69 72 20 69 6d  ancient mkdir im
2650: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 2e 0a 09  plementations...
2660: 20 20 72 6d 64 69 72 20 2e 2f 24 6d 6b 64 69 72    rmdir ./$mkdir
2670: 5f 6d 6f 64 65 20 2e 2f 2d 70 20 2e 2f 2d 2d 20  _mode ./-p ./-- 
2680: 22 24 74 6d 70 64 69 72 22 20 32 3e 2f 64 65 76  "$tmpdir" 2>/dev
2690: 2f 6e 75 6c 6c 0a 09 66 69 0a 09 74 72 61 70 20  /null..fi..trap 
26a0: 27 27 20 30 3b 3b 0a 20 20 20 20 65 73 61 63 0a  '' 0;;.    esac.
26b0: 0a 20 20 20 20 69 66 0a 20 20 20 20 20 20 24 70  .    if.      $p
26c0: 6f 73 69 78 5f 6d 6b 64 69 72 20 26 26 20 28 0a  osix_mkdir && (.
26d0: 20 20 20 20 20 20 20 20 75 6d 61 73 6b 20 24 6d          umask $m
26e0: 6b 64 69 72 5f 75 6d 61 73 6b 20 26 26 0a 20 20  kdir_umask &&.  
26f0: 20 20 20 20 20 20 24 64 6f 69 74 5f 65 78 65 63        $doit_exec
2700: 20 24 6d 6b 64 69 72 70 72 6f 67 20 24 6d 6b 64   $mkdirprog $mkd
2710: 69 72 5f 6d 6f 64 65 20 2d 70 20 2d 2d 20 22 24  ir_mode -p -- "$
2720: 64 73 74 64 69 72 22 0a 20 20 20 20 20 20 29 0a  dstdir".      ).
2730: 20 20 20 20 74 68 65 6e 20 3a 0a 20 20 20 20 65      then :.    e
2740: 6c 73 65 0a 0a 20 20 20 20 20 20 23 20 6d 6b 64  lse..      # mkd
2750: 69 72 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 66  ir does not conf
2760: 6f 72 6d 20 74 6f 20 50 4f 53 49 58 2c 0a 20 20  orm to POSIX,.  
2770: 20 20 20 20 23 20 6f 72 20 69 74 20 66 61 69 6c      # or it fail
2780: 65 64 20 70 6f 73 73 69 62 6c 79 20 64 75 65 20  ed possibly due 
2790: 74 6f 20 61 20 72 61 63 65 20 63 6f 6e 64 69 74  to a race condit
27a0: 69 6f 6e 2e 20 20 43 72 65 61 74 65 20 74 68 65  ion.  Create the
27b0: 0a 20 20 20 20 20 20 23 20 64 69 72 65 63 74 6f  .      # directo
27c0: 72 79 20 74 68 65 20 73 6c 6f 77 20 77 61 79 2c  ry the slow way,
27d0: 20 73 74 65 70 20 62 79 20 73 74 65 70 2c 20 63   step by step, c
27e0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 72 61 63 65  hecking for race
27f0: 73 20 61 73 20 77 65 20 67 6f 2e 0a 0a 20 20 20  s as we go...   
2800: 20 20 20 63 61 73 65 20 24 64 73 74 64 69 72 20     case $dstdir 
2810: 69 6e 0a 20 20 20 20 20 20 20 20 2f 2a 29 20 70  in.        /*) p
2820: 72 65 66 69 78 3d 27 2f 27 3b 3b 0a 20 20 20 20  refix='/';;.    
2830: 20 20 20 20 5b 2d 3d 5c 28 5c 29 21 5d 2a 29 20      [-=\(\)!]*) 
2840: 70 72 65 66 69 78 3d 27 2e 2f 27 3b 3b 0a 20 20  prefix='./';;.  
2850: 20 20 20 20 20 20 2a 29 20 20 70 72 65 66 69 78        *)  prefix
2860: 3d 27 27 3b 3b 0a 20 20 20 20 20 20 65 73 61 63  ='';;.      esac
2870: 0a 0a 20 20 20 20 20 20 6f 49 46 53 3d 24 49 46  ..      oIFS=$IF
2880: 53 0a 20 20 20 20 20 20 49 46 53 3d 2f 0a 20 20  S.      IFS=/.  
2890: 20 20 20 20 73 65 74 20 2d 66 0a 20 20 20 20 20      set -f.     
28a0: 20 73 65 74 20 66 6e 6f 72 64 20 24 64 73 74 64   set fnord $dstd
28b0: 69 72 0a 20 20 20 20 20 20 73 68 69 66 74 0a 20  ir.      shift. 
28c0: 20 20 20 20 20 73 65 74 20 2b 66 0a 20 20 20 20       set +f.    
28d0: 20 20 49 46 53 3d 24 6f 49 46 53 0a 0a 20 20 20    IFS=$oIFS..   
28e0: 20 20 20 70 72 65 66 69 78 65 73 3d 0a 0a 20 20     prefixes=..  
28f0: 20 20 20 20 66 6f 72 20 64 0a 20 20 20 20 20 20      for d.      
2900: 64 6f 0a 20 20 20 20 20 20 20 20 74 65 73 74 20  do.        test 
2910: 58 22 24 64 22 20 3d 20 58 20 26 26 20 63 6f 6e  X"$d" = X && con
2920: 74 69 6e 75 65 0a 0a 20 20 20 20 20 20 20 20 70  tinue..        p
2930: 72 65 66 69 78 3d 24 70 72 65 66 69 78 24 64 0a  refix=$prefix$d.
2940: 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20          if test 
2950: 2d 64 20 22 24 70 72 65 66 69 78 22 3b 20 74 68  -d "$prefix"; th
2960: 65 6e 0a 20 20 20 20 20 20 20 20 20 20 70 72 65  en.          pre
2970: 66 69 78 65 73 3d 0a 20 20 20 20 20 20 20 20 65  fixes=.        e
2980: 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 69 66  lse.          if
2990: 20 24 70 6f 73 69 78 5f 6d 6b 64 69 72 3b 20 74   $posix_mkdir; t
29a0: 68 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  hen.            
29b0: 28 75 6d 61 73 6b 20 24 6d 6b 64 69 72 5f 75 6d  (umask $mkdir_um
29c0: 61 73 6b 20 26 26 0a 20 20 20 20 20 20 20 20 20  ask &&.         
29d0: 20 20 20 20 24 64 6f 69 74 5f 65 78 65 63 20 24      $doit_exec $
29e0: 6d 6b 64 69 72 70 72 6f 67 20 24 6d 6b 64 69 72  mkdirprog $mkdir
29f0: 5f 6d 6f 64 65 20 2d 70 20 2d 2d 20 22 24 64 73  _mode -p -- "$ds
2a00: 74 64 69 72 22 29 20 26 26 20 62 72 65 61 6b 0a  tdir") && break.
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 44 6f              # Do
2a20: 6e 27 74 20 66 61 69 6c 20 69 66 20 74 77 6f 20  n't fail if two 
2a30: 69 6e 73 74 61 6e 63 65 73 20 61 72 65 20 72 75  instances are ru
2a40: 6e 6e 69 6e 67 20 63 6f 6e 63 75 72 72 65 6e 74  nning concurrent
2a50: 6c 79 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
2a60: 74 65 73 74 20 2d 64 20 22 24 70 72 65 66 69 78  test -d "$prefix
2a70: 22 20 7c 7c 20 65 78 69 74 20 31 0a 20 20 20 20  " || exit 1.    
2a80: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
2a90: 20 20 20 20 20 20 20 63 61 73 65 20 24 70 72 65         case $pre
2aa0: 66 69 78 20 69 6e 0a 20 20 20 20 20 20 20 20 20  fix in.         
2ab0: 20 20 20 20 20 2a 5c 27 2a 29 20 71 70 72 65 66       *\'*) qpref
2ac0: 69 78 3d 60 65 63 68 6f 20 22 24 70 72 65 66 69  ix=`echo "$prefi
2ad0: 78 22 20 7c 20 73 65 64 20 22 73 2f 27 2f 27 5c  x" | sed "s/'/'\
2ae0: 5c 5c 5c 5c 5c 5c 5c 27 27 2f 67 22 60 3b 3b 0a  \\\\\\\''/g"`;;.
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 29                *)
2b00: 20 71 70 72 65 66 69 78 3d 24 70 72 65 66 69 78   qprefix=$prefix
2b10: 3b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ;;.            e
2b20: 73 61 63 0a 20 20 20 20 20 20 20 20 20 20 20 20  sac.            
2b30: 70 72 65 66 69 78 65 73 3d 22 24 70 72 65 66 69  prefixes="$prefi
2b40: 78 65 73 20 27 24 71 70 72 65 66 69 78 27 22 0a  xes '$qprefix'".
2b50: 20 20 20 20 20 20 20 20 20 20 66 69 0a 20 20 20            fi.   
2b60: 20 20 20 20 20 66 69 0a 20 20 20 20 20 20 20 20       fi.        
2b70: 70 72 65 66 69 78 3d 24 70 72 65 66 69 78 2f 0a  prefix=$prefix/.
2b80: 20 20 20 20 20 20 64 6f 6e 65 0a 0a 20 20 20 20        done..    
2b90: 20 20 69 66 20 74 65 73 74 20 2d 6e 20 22 24 70    if test -n "$p
2ba0: 72 65 66 69 78 65 73 22 3b 20 74 68 65 6e 0a 20  refixes"; then. 
2bb0: 20 20 20 20 20 20 20 23 20 44 6f 6e 27 74 20 66         # Don't f
2bc0: 61 69 6c 20 69 66 20 74 77 6f 20 69 6e 73 74 61  ail if two insta
2bd0: 6e 63 65 73 20 61 72 65 20 72 75 6e 6e 69 6e 67  nces are running
2be0: 20 63 6f 6e 63 75 72 72 65 6e 74 6c 79 2e 0a 20   concurrently.. 
2bf0: 20 20 20 20 20 20 20 28 75 6d 61 73 6b 20 24 6d         (umask $m
2c00: 6b 64 69 72 5f 75 6d 61 73 6b 20 26 26 0a 20 20  kdir_umask &&.  
2c10: 20 20 20 20 20 20 20 65 76 61 6c 20 22 5c 24 64         eval "\$d
2c20: 6f 69 74 5f 65 78 65 63 20 5c 24 6d 6b 64 69 72  oit_exec \$mkdir
2c30: 70 72 6f 67 20 24 70 72 65 66 69 78 65 73 22 29  prog $prefixes")
2c40: 20 7c 7c 0a 20 20 20 20 20 20 20 20 20 20 74 65   ||.          te
2c50: 73 74 20 2d 64 20 22 24 64 73 74 64 69 72 22 20  st -d "$dstdir" 
2c60: 7c 7c 20 65 78 69 74 20 31 0a 20 20 20 20 20 20  || exit 1.      
2c70: 20 20 6f 62 73 6f 6c 65 74 65 5f 6d 6b 64 69 72    obsolete_mkdir
2c80: 5f 75 73 65 64 3d 74 72 75 65 0a 20 20 20 20 20  _used=true.     
2c90: 20 66 69 0a 20 20 20 20 66 69 0a 20 20 66 69 0a   fi.    fi.  fi.
2ca0: 0a 20 20 69 66 20 74 65 73 74 20 2d 6e 20 22 24  .  if test -n "$
2cb0: 64 69 72 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20  dir_arg"; then. 
2cc0: 20 20 20 7b 20 74 65 73 74 20 2d 7a 20 22 24 63     { test -z "$c
2cd0: 68 6f 77 6e 63 6d 64 22 20 7c 7c 20 24 64 6f 69  howncmd" || $doi
2ce0: 74 20 24 63 68 6f 77 6e 63 6d 64 20 22 24 64 73  t $chowncmd "$ds
2cf0: 74 22 3b 20 7d 20 26 26 0a 20 20 20 20 7b 20 74  t"; } &&.    { t
2d00: 65 73 74 20 2d 7a 20 22 24 63 68 67 72 70 63 6d  est -z "$chgrpcm
2d10: 64 22 20 7c 7c 20 24 64 6f 69 74 20 24 63 68 67  d" || $doit $chg
2d20: 72 70 63 6d 64 20 22 24 64 73 74 22 3b 20 7d 20  rpcmd "$dst"; } 
2d30: 26 26 0a 20 20 20 20 7b 20 74 65 73 74 20 22 24  &&.    { test "$
2d40: 6f 62 73 6f 6c 65 74 65 5f 6d 6b 64 69 72 5f 75  obsolete_mkdir_u
2d50: 73 65 64 24 63 68 6f 77 6e 63 6d 64 24 63 68 67  sed$chowncmd$chg
2d60: 72 70 63 6d 64 22 20 3d 20 66 61 6c 73 65 20 7c  rpcmd" = false |
2d70: 7c 0a 20 20 20 20 20 20 74 65 73 74 20 2d 7a 20  |.      test -z 
2d80: 22 24 63 68 6d 6f 64 63 6d 64 22 20 7c 7c 20 24  "$chmodcmd" || $
2d90: 64 6f 69 74 20 24 63 68 6d 6f 64 63 6d 64 20 24  doit $chmodcmd $
2da0: 6d 6f 64 65 20 22 24 64 73 74 22 3b 20 7d 20 7c  mode "$dst"; } |
2db0: 7c 20 65 78 69 74 20 31 0a 20 20 65 6c 73 65 0a  | exit 1.  else.
2dc0: 0a 20 20 20 20 23 20 4d 61 6b 65 20 61 20 63 6f  .    # Make a co
2dd0: 75 70 6c 65 20 6f 66 20 74 65 6d 70 20 66 69 6c  uple of temp fil
2de0: 65 20 6e 61 6d 65 73 20 69 6e 20 74 68 65 20 70  e names in the p
2df0: 72 6f 70 65 72 20 64 69 72 65 63 74 6f 72 79 2e  roper directory.
2e00: 0a 20 20 20 20 64 73 74 74 6d 70 3d 24 7b 64 73  .    dsttmp=${ds
2e10: 74 64 69 72 73 6c 61 73 68 7d 5f 69 6e 73 74 2e  tdirslash}_inst.
2e20: 24 24 5f 0a 20 20 20 20 72 6d 74 6d 70 3d 24 7b  $$_.    rmtmp=${
2e30: 64 73 74 64 69 72 73 6c 61 73 68 7d 5f 72 6d 2e  dstdirslash}_rm.
2e40: 24 24 5f 0a 0a 20 20 20 20 23 20 54 72 61 70 20  $$_..    # Trap 
2e50: 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 6f 73  to clean up thos
2e60: 65 20 74 65 6d 70 20 66 69 6c 65 73 20 61 74 20  e temp files at 
2e70: 65 78 69 74 2e 0a 20 20 20 20 74 72 61 70 20 27  exit..    trap '
2e80: 72 65 74 3d 24 3f 3b 20 72 6d 20 2d 66 20 22 24  ret=$?; rm -f "$
2e90: 64 73 74 74 6d 70 22 20 22 24 72 6d 74 6d 70 22  dsttmp" "$rmtmp"
2ea0: 20 26 26 20 65 78 69 74 20 24 72 65 74 27 20 30   && exit $ret' 0
2eb0: 0a 0a 20 20 20 20 23 20 43 6f 70 79 20 74 68 65  ..    # Copy the
2ec0: 20 66 69 6c 65 20 6e 61 6d 65 20 74 6f 20 74 68   file name to th
2ed0: 65 20 74 65 6d 70 20 6e 61 6d 65 2e 0a 20 20 20  e temp name..   
2ee0: 20 28 75 6d 61 73 6b 20 24 63 70 5f 75 6d 61 73   (umask $cp_umas
2ef0: 6b 20 26 26 0a 20 20 20 20 20 7b 20 74 65 73 74  k &&.     { test
2f00: 20 2d 7a 20 22 24 73 74 72 69 70 63 6d 64 22 20   -z "$stripcmd" 
2f10: 7c 7c 20 7b 0a 09 20 23 20 43 72 65 61 74 65 20  || {.. # Create 
2f20: 24 64 73 74 74 6d 70 20 72 65 61 64 2d 77 72 69  $dsttmp read-wri
2f30: 74 65 20 73 6f 20 74 68 61 74 20 63 70 20 64 6f  te so that cp do
2f40: 65 73 6e 27 74 20 63 72 65 61 74 65 20 69 74 20  esn't create it 
2f50: 72 65 61 64 2d 6f 6e 6c 79 2c 0a 09 20 23 20 77  read-only,.. # w
2f60: 68 69 63 68 20 77 6f 75 6c 64 20 63 61 75 73 65  hich would cause
2f70: 20 73 74 72 69 70 20 74 6f 20 66 61 69 6c 2e 0a   strip to fail..
2f80: 09 20 69 66 20 74 65 73 74 20 2d 7a 20 22 24 64  . if test -z "$d
2f90: 6f 69 74 22 3b 20 74 68 65 6e 0a 09 20 20 20 3a  oit"; then..   :
2fa0: 20 3e 22 24 64 73 74 74 6d 70 22 20 23 20 4e 6f   >"$dsttmp" # No
2fb0: 20 6e 65 65 64 20 74 6f 20 66 6f 72 6b 2d 65 78   need to fork-ex
2fc0: 65 63 20 27 74 6f 75 63 68 27 2e 0a 09 20 65 6c  ec 'touch'... el
2fd0: 73 65 0a 09 20 20 20 24 64 6f 69 74 20 74 6f 75  se..   $doit tou
2fe0: 63 68 20 22 24 64 73 74 74 6d 70 22 0a 09 20 66  ch "$dsttmp".. f
2ff0: 69 0a 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  i.       }.     
3000: 7d 20 26 26 0a 20 20 20 20 20 24 64 6f 69 74 5f  } &&.     $doit_
3010: 65 78 65 63 20 24 63 70 70 72 6f 67 20 22 24 73  exec $cpprog "$s
3020: 72 63 22 20 22 24 64 73 74 74 6d 70 22 29 20 26  rc" "$dsttmp") &
3030: 26 0a 0a 20 20 20 20 23 20 61 6e 64 20 73 65 74  &..    # and set
3040: 20 61 6e 79 20 6f 70 74 69 6f 6e 73 3b 20 64 6f   any options; do
3050: 20 63 68 6d 6f 64 20 6c 61 73 74 20 74 6f 20 70   chmod last to p
3060: 72 65 73 65 72 76 65 20 73 65 74 75 69 64 20 62  reserve setuid b
3070: 69 74 73 2e 0a 20 20 20 20 23 0a 20 20 20 20 23  its..    #.    #
3080: 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 73 65   If any of these
3090: 20 66 61 69 6c 2c 20 77 65 20 61 62 6f 72 74 20   fail, we abort 
30a0: 74 68 65 20 77 68 6f 6c 65 20 74 68 69 6e 67 2e  the whole thing.
30b0: 20 20 49 66 20 77 65 20 77 61 6e 74 20 74 6f 0a    If we want to.
30c0: 20 20 20 20 23 20 69 67 6e 6f 72 65 20 65 72 72      # ignore err
30d0: 6f 72 73 20 66 72 6f 6d 20 61 6e 79 20 6f 66 20  ors from any of 
30e0: 74 68 65 73 65 2c 20 6a 75 73 74 20 6d 61 6b 65  these, just make
30f0: 20 73 75 72 65 20 6e 6f 74 20 74 6f 20 69 67 6e   sure not to ign
3100: 6f 72 65 0a 20 20 20 20 23 20 65 72 72 6f 72 73  ore.    # errors
3110: 20 66 72 6f 6d 20 74 68 65 20 61 62 6f 76 65 20   from the above 
3120: 22 24 64 6f 69 74 20 24 63 70 70 72 6f 67 20 24  "$doit $cpprog $
3130: 73 72 63 20 24 64 73 74 74 6d 70 22 20 63 6f 6d  src $dsttmp" com
3140: 6d 61 6e 64 2e 0a 20 20 20 20 23 0a 20 20 20 20  mand..    #.    
3150: 7b 20 74 65 73 74 20 2d 7a 20 22 24 63 68 6f 77  { test -z "$chow
3160: 6e 63 6d 64 22 20 7c 7c 20 24 64 6f 69 74 20 24  ncmd" || $doit $
3170: 63 68 6f 77 6e 63 6d 64 20 22 24 64 73 74 74 6d  chowncmd "$dsttm
3180: 70 22 3b 20 7d 20 26 26 0a 20 20 20 20 7b 20 74  p"; } &&.    { t
3190: 65 73 74 20 2d 7a 20 22 24 63 68 67 72 70 63 6d  est -z "$chgrpcm
31a0: 64 22 20 7c 7c 20 24 64 6f 69 74 20 24 63 68 67  d" || $doit $chg
31b0: 72 70 63 6d 64 20 22 24 64 73 74 74 6d 70 22 3b  rpcmd "$dsttmp";
31c0: 20 7d 20 26 26 0a 20 20 20 20 7b 20 74 65 73 74   } &&.    { test
31d0: 20 2d 7a 20 22 24 73 74 72 69 70 63 6d 64 22 20   -z "$stripcmd" 
31e0: 7c 7c 20 24 64 6f 69 74 20 24 73 74 72 69 70 63  || $doit $stripc
31f0: 6d 64 20 22 24 64 73 74 74 6d 70 22 3b 20 7d 20  md "$dsttmp"; } 
3200: 26 26 0a 20 20 20 20 7b 20 74 65 73 74 20 2d 7a  &&.    { test -z
3210: 20 22 24 63 68 6d 6f 64 63 6d 64 22 20 7c 7c 20   "$chmodcmd" || 
3220: 24 64 6f 69 74 20 24 63 68 6d 6f 64 63 6d 64 20  $doit $chmodcmd 
3230: 24 6d 6f 64 65 20 22 24 64 73 74 74 6d 70 22 3b  $mode "$dsttmp";
3240: 20 7d 20 26 26 0a 0a 20 20 20 20 23 20 49 66 20   } &&..    # If 
3250: 2d 43 2c 20 64 6f 6e 27 74 20 62 6f 74 68 65 72  -C, don't bother
3260: 20 74 6f 20 63 6f 70 79 20 69 66 20 69 74 20 77   to copy if it w
3270: 6f 75 6c 64 6e 27 74 20 63 68 61 6e 67 65 20 74  ouldn't change t
3280: 68 65 20 66 69 6c 65 2e 0a 20 20 20 20 69 66 20  he file..    if 
3290: 24 63 6f 70 79 5f 6f 6e 5f 63 68 61 6e 67 65 20  $copy_on_change 
32a0: 26 26 0a 20 20 20 20 20 20 20 6f 6c 64 3d 60 4c  &&.       old=`L
32b0: 43 5f 41 4c 4c 3d 43 20 6c 73 20 2d 64 6c 4c 20  C_ALL=C ls -dlL 
32c0: 22 24 64 73 74 22 20 20 20 20 20 32 3e 2f 64 65  "$dst"     2>/de
32d0: 76 2f 6e 75 6c 6c 60 20 26 26 0a 20 20 20 20 20  v/null` &&.     
32e0: 20 20 6e 65 77 3d 60 4c 43 5f 41 4c 4c 3d 43 20    new=`LC_ALL=C 
32f0: 6c 73 20 2d 64 6c 4c 20 22 24 64 73 74 74 6d 70  ls -dlL "$dsttmp
3300: 22 20 20 32 3e 2f 64 65 76 2f 6e 75 6c 6c 60 20  "  2>/dev/null` 
3310: 26 26 0a 20 20 20 20 20 20 20 73 65 74 20 2d 66  &&.       set -f
3320: 20 26 26 0a 20 20 20 20 20 20 20 73 65 74 20 58   &&.       set X
3330: 20 24 6f 6c 64 20 26 26 20 6f 6c 64 3d 3a 24 32   $old && old=:$2
3340: 3a 24 34 3a 24 35 3a 24 36 20 26 26 0a 20 20 20  :$4:$5:$6 &&.   
3350: 20 20 20 20 73 65 74 20 58 20 24 6e 65 77 20 26      set X $new &
3360: 26 20 6e 65 77 3d 3a 24 32 3a 24 34 3a 24 35 3a  & new=:$2:$4:$5:
3370: 24 36 20 26 26 0a 20 20 20 20 20 20 20 73 65 74  $6 &&.       set
3380: 20 2b 66 20 26 26 0a 20 20 20 20 20 20 20 74 65   +f &&.       te
3390: 73 74 20 22 24 6f 6c 64 22 20 3d 20 22 24 6e 65  st "$old" = "$ne
33a0: 77 22 20 26 26 0a 20 20 20 20 20 20 20 24 63 6d  w" &&.       $cm
33b0: 70 70 72 6f 67 20 22 24 64 73 74 22 20 22 24 64  pprog "$dst" "$d
33c0: 73 74 74 6d 70 22 20 3e 2f 64 65 76 2f 6e 75 6c  sttmp" >/dev/nul
33d0: 6c 20 32 3e 26 31 0a 20 20 20 20 74 68 65 6e 0a  l 2>&1.    then.
33e0: 20 20 20 20 20 20 72 6d 20 2d 66 20 22 24 64 73        rm -f "$ds
33f0: 74 74 6d 70 22 0a 20 20 20 20 65 6c 73 65 0a 20  ttmp".    else. 
3400: 20 20 20 20 20 23 20 52 65 6e 61 6d 65 20 74 68       # Rename th
3410: 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20 72 65  e file to the re
3420: 61 6c 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  al destination..
3430: 20 20 20 20 20 20 24 64 6f 69 74 20 24 6d 76 63        $doit $mvc
3440: 6d 64 20 2d 66 20 22 24 64 73 74 74 6d 70 22 20  md -f "$dsttmp" 
3450: 22 24 64 73 74 22 20 32 3e 2f 64 65 76 2f 6e 75  "$dst" 2>/dev/nu
3460: 6c 6c 20 7c 7c 0a 0a 20 20 20 20 20 20 23 20 54  ll ||..      # T
3470: 68 65 20 72 65 6e 61 6d 65 20 66 61 69 6c 65 64  he rename failed
3480: 2c 20 70 65 72 68 61 70 73 20 62 65 63 61 75 73  , perhaps becaus
3490: 65 20 6d 76 20 63 61 6e 27 74 20 72 65 6e 61 6d  e mv can't renam
34a0: 65 20 73 6f 6d 65 74 68 69 6e 67 20 65 6c 73 65  e something else
34b0: 0a 20 20 20 20 20 20 23 20 74 6f 20 69 74 73 65  .      # to itse
34c0: 6c 66 2c 20 6f 72 20 70 65 72 68 61 70 73 20 62  lf, or perhaps b
34d0: 65 63 61 75 73 65 20 6d 76 20 69 73 20 73 6f 20  ecause mv is so 
34e0: 61 6e 63 69 65 6e 74 20 74 68 61 74 20 69 74 20  ancient that it 
34f0: 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 23  does not.      #
3500: 20 73 75 70 70 6f 72 74 20 2d 66 2e 0a 20 20 20   support -f..   
3510: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 23 20 4e     {.        # N
3520: 6f 77 20 72 65 6d 6f 76 65 20 6f 72 20 6d 6f 76  ow remove or mov
3530: 65 20 61 73 69 64 65 20 61 6e 79 20 6f 6c 64 20  e aside any old 
3540: 66 69 6c 65 20 61 74 20 64 65 73 74 69 6e 61 74  file at destinat
3550: 69 6f 6e 20 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  ion location..  
3560: 20 20 20 20 20 20 23 20 57 65 20 74 72 79 20 74        # We try t
3570: 68 69 73 20 74 77 6f 20 77 61 79 73 20 73 69 6e  his two ways sin
3580: 63 65 20 72 6d 20 63 61 6e 27 74 20 75 6e 6c 69  ce rm can't unli
3590: 6e 6b 20 69 74 73 65 6c 66 20 6f 6e 20 73 6f 6d  nk itself on som
35a0: 65 0a 20 20 20 20 20 20 20 20 23 20 73 79 73 74  e.        # syst
35b0: 65 6d 73 20 61 6e 64 20 74 68 65 20 64 65 73 74  ems and the dest
35c0: 69 6e 61 74 69 6f 6e 20 66 69 6c 65 20 6d 69 67  ination file mig
35d0: 68 74 20 62 65 20 62 75 73 79 20 66 6f 72 20 6f  ht be busy for o
35e0: 74 68 65 72 0a 20 20 20 20 20 20 20 20 23 20 72  ther.        # r
35f0: 65 61 73 6f 6e 73 2e 20 20 49 6e 20 74 68 69 73  easons.  In this
3600: 20 63 61 73 65 2c 20 74 68 65 20 66 69 6e 61 6c   case, the final
3610: 20 63 6c 65 61 6e 75 70 20 6d 69 67 68 74 20 66   cleanup might f
3620: 61 69 6c 20 62 75 74 20 74 68 65 20 6e 65 77 0a  ail but the new.
3630: 20 20 20 20 20 20 20 20 23 20 66 69 6c 65 20 73          # file s
3640: 68 6f 75 6c 64 20 73 74 69 6c 6c 20 69 6e 73 74  hould still inst
3650: 61 6c 6c 20 73 75 63 63 65 73 73 66 75 6c 6c 79  all successfully
3660: 2e 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ..        {.    
3670: 20 20 20 20 20 20 74 65 73 74 20 21 20 2d 66 20        test ! -f 
3680: 22 24 64 73 74 22 20 7c 7c 0a 20 20 20 20 20 20  "$dst" ||.      
3690: 20 20 20 20 24 64 6f 69 74 20 24 72 6d 63 6d 64      $doit $rmcmd
36a0: 20 2d 66 20 22 24 64 73 74 22 20 32 3e 2f 64 65   -f "$dst" 2>/de
36b0: 76 2f 6e 75 6c 6c 20 7c 7c 0a 20 20 20 20 20 20  v/null ||.      
36c0: 20 20 20 20 7b 20 24 64 6f 69 74 20 24 6d 76 63      { $doit $mvc
36d0: 6d 64 20 2d 66 20 22 24 64 73 74 22 20 22 24 72  md -f "$dst" "$r
36e0: 6d 74 6d 70 22 20 32 3e 2f 64 65 76 2f 6e 75 6c  mtmp" 2>/dev/nul
36f0: 6c 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20  l &&.           
3700: 20 7b 20 24 64 6f 69 74 20 24 72 6d 63 6d 64 20   { $doit $rmcmd 
3710: 2d 66 20 22 24 72 6d 74 6d 70 22 20 32 3e 2f 64  -f "$rmtmp" 2>/d
3720: 65 76 2f 6e 75 6c 6c 3b 20 3a 3b 20 7d 0a 20 20  ev/null; :; }.  
3730: 20 20 20 20 20 20 20 20 7d 20 7c 7c 0a 20 20 20          } ||.   
3740: 20 20 20 20 20 20 20 7b 20 65 63 68 6f 20 22 24         { echo "$
3750: 30 3a 20 63 61 6e 6e 6f 74 20 75 6e 6c 69 6e 6b  0: cannot unlink
3760: 20 6f 72 20 72 65 6e 61 6d 65 20 24 64 73 74 22   or rename $dst"
3770: 20 3e 26 32 0a 20 20 20 20 20 20 20 20 20 20 20   >&2.           
3780: 20 28 65 78 69 74 20 31 29 3b 20 65 78 69 74 20   (exit 1); exit 
3790: 31 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  1.          }.  
37a0: 20 20 20 20 20 20 7d 20 26 26 0a 0a 20 20 20 20        } &&..    
37b0: 20 20 20 20 23 20 4e 6f 77 20 72 65 6e 61 6d 65      # Now rename
37c0: 20 74 68 65 20 66 69 6c 65 20 74 6f 20 74 68 65   the file to the
37d0: 20 72 65 61 6c 20 64 65 73 74 69 6e 61 74 69 6f   real destinatio
37e0: 6e 2e 0a 20 20 20 20 20 20 20 20 24 64 6f 69 74  n..        $doit
37f0: 20 24 6d 76 63 6d 64 20 22 24 64 73 74 74 6d 70   $mvcmd "$dsttmp
3800: 22 20 22 24 64 73 74 22 0a 20 20 20 20 20 20 7d  " "$dst".      }
3810: 0a 20 20 20 20 66 69 20 7c 7c 20 65 78 69 74 20  .    fi || exit 
3820: 31 0a 0a 20 20 20 20 74 72 61 70 20 27 27 20 30  1..    trap '' 0
3830: 0a 20 20 66 69 0a 64 6f 6e 65 0a 0a 23 20 4c 6f  .  fi.done..# Lo
3840: 63 61 6c 20 76 61 72 69 61 62 6c 65 73 3a 0a 23  cal variables:.#
3850: 20 65 76 61 6c 3a 20 28 61 64 64 2d 68 6f 6f 6b   eval: (add-hook
3860: 20 27 62 65 66 6f 72 65 2d 73 61 76 65 2d 68 6f   'before-save-ho
3870: 6f 6b 20 27 74 69 6d 65 2d 73 74 61 6d 70 29 0a  ok 'time-stamp).
3880: 23 20 74 69 6d 65 2d 73 74 61 6d 70 2d 73 74 61  # time-stamp-sta
3890: 72 74 3a 20 22 73 63 72 69 70 74 76 65 72 73 69  rt: "scriptversi
38a0: 6f 6e 3d 22 0a 23 20 74 69 6d 65 2d 73 74 61 6d  on=".# time-stam
38b0: 70 2d 66 6f 72 6d 61 74 3a 20 22 25 3a 79 2d 25  p-format: "%:y-%
38c0: 30 32 6d 2d 25 30 32 64 2e 25 30 32 48 22 0a 23  02m-%02d.%02H".#
38d0: 20 74 69 6d 65 2d 73 74 61 6d 70 2d 74 69 6d 65   time-stamp-time
38e0: 2d 7a 6f 6e 65 3a 20 22 55 54 43 30 22 0a 23 20  -zone: "UTC0".# 
38f0: 74 69 6d 65 2d 73 74 61 6d 70 2d 65 6e 64 3a 20  time-stamp-end: 
3900: 22 3b 20 23 20 55 54 43 22 0a 23 20 45 6e 64 3a  "; # UTC".# End: