Hex Artifact Content

Artifact 2182b3705d92e25753411e2c28cf788c69e35a48fbb8aa332e342dfc6b95b80d:


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 31 31 2d 31 34 2e 30 31 3b 20 23 20 55 54 43  -11-14.01; # 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 62 61 63 6b 75 70 73 75 66 66 69 78 3d  2..backupsuffix=
0a00: 0a 63 68 67 72 70 63 6d 64 3d 0a 63 68 6d 6f 64  .chgrpcmd=.chmod
0a10: 63 6d 64 3d 24 63 68 6d 6f 64 70 72 6f 67 0a 63  cmd=$chmodprog.c
0a20: 68 6f 77 6e 63 6d 64 3d 0a 6d 76 63 6d 64 3d 24  howncmd=.mvcmd=$
0a30: 6d 76 70 72 6f 67 0a 72 6d 63 6d 64 3d 22 24 72  mvprog.rmcmd="$r
0a40: 6d 70 72 6f 67 20 2d 66 22 0a 73 74 72 69 70 63  mprog -f".stripc
0a50: 6d 64 3d 0a 0a 73 72 63 3d 0a 64 73 74 3d 0a 64  md=..src=.dst=.d
0a60: 69 72 5f 61 72 67 3d 0a 64 73 74 5f 61 72 67 3d  ir_arg=.dst_arg=
0a70: 0a 0a 63 6f 70 79 5f 6f 6e 5f 63 68 61 6e 67 65  ..copy_on_change
0a80: 3d 66 61 6c 73 65 0a 69 73 5f 74 61 72 67 65 74  =false.is_target
0a90: 5f 61 5f 64 69 72 65 63 74 6f 72 79 3d 70 6f 73  _a_directory=pos
0aa0: 73 69 62 6c 79 0a 0a 75 73 61 67 65 3d 22 5c 0a  sibly..usage="\.
0ab0: 55 73 61 67 65 3a 20 24 30 20 5b 4f 50 54 49 4f  Usage: $0 [OPTIO
0ac0: 4e 5d 2e 2e 2e 20 5b 2d 54 5d 20 53 52 43 46 49  N]... [-T] SRCFI
0ad0: 4c 45 20 44 53 54 46 49 4c 45 0a 20 20 20 6f 72  LE DSTFILE.   or
0ae0: 3a 20 24 30 20 5b 4f 50 54 49 4f 4e 5d 2e 2e 2e  : $0 [OPTION]...
0af0: 20 53 52 43 46 49 4c 45 53 2e 2e 2e 20 44 49 52   SRCFILES... DIR
0b00: 45 43 54 4f 52 59 0a 20 20 20 6f 72 3a 20 24 30  ECTORY.   or: $0
0b10: 20 5b 4f 50 54 49 4f 4e 5d 2e 2e 2e 20 2d 74 20   [OPTION]... -t 
0b20: 44 49 52 45 43 54 4f 52 59 20 53 52 43 46 49 4c  DIRECTORY SRCFIL
0b30: 45 53 2e 2e 2e 0a 20 20 20 6f 72 3a 20 24 30 20  ES....   or: $0 
0b40: 5b 4f 50 54 49 4f 4e 5d 2e 2e 2e 20 2d 64 20 44  [OPTION]... -d D
0b50: 49 52 45 43 54 4f 52 49 45 53 2e 2e 2e 0a 0a 49  IRECTORIES.....I
0b60: 6e 20 74 68 65 20 31 73 74 20 66 6f 72 6d 2c 20  n the 1st form, 
0b70: 63 6f 70 79 20 53 52 43 46 49 4c 45 20 74 6f 20  copy SRCFILE to 
0b80: 44 53 54 46 49 4c 45 2e 0a 49 6e 20 74 68 65 20  DSTFILE..In the 
0b90: 32 6e 64 20 61 6e 64 20 33 72 64 2c 20 63 6f 70  2nd and 3rd, cop
0ba0: 79 20 61 6c 6c 20 53 52 43 46 49 4c 45 53 20 74  y all SRCFILES t
0bb0: 6f 20 44 49 52 45 43 54 4f 52 59 2e 0a 49 6e 20  o DIRECTORY..In 
0bc0: 74 68 65 20 34 74 68 2c 20 63 72 65 61 74 65 20  the 4th, create 
0bd0: 44 49 52 45 43 54 4f 52 49 45 53 2e 0a 0a 4f 70  DIRECTORIES...Op
0be0: 74 69 6f 6e 73 3a 0a 20 20 20 20 20 2d 2d 68 65  tions:.     --he
0bf0: 6c 70 20 20 20 20 20 64 69 73 70 6c 61 79 20 74  lp     display t
0c00: 68 69 73 20 68 65 6c 70 20 61 6e 64 20 65 78 69  his help and exi
0c10: 74 2e 0a 20 20 20 20 20 2d 2d 76 65 72 73 69 6f  t..     --versio
0c20: 6e 20 20 64 69 73 70 6c 61 79 20 76 65 72 73 69  n  display versi
0c30: 6f 6e 20 69 6e 66 6f 20 61 6e 64 20 65 78 69 74  on info and exit
0c40: 2e 0a 0a 20 20 2d 63 20 20 20 20 20 20 20 20 20  ...  -c         
0c50: 20 20 20 28 69 67 6e 6f 72 65 64 29 0a 20 20 2d     (ignored).  -
0c60: 43 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73  C            ins
0c70: 74 61 6c 6c 20 6f 6e 6c 79 20 69 66 20 64 69 66  tall only if dif
0c80: 66 65 72 65 6e 74 20 28 70 72 65 73 65 72 76 65  ferent (preserve
0c90: 20 64 61 74 61 20 6d 6f 64 69 66 69 63 61 74 69   data modificati
0ca0: 6f 6e 20 74 69 6d 65 29 0a 20 20 2d 64 20 20 20  on time).  -d   
0cb0: 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65 20           create 
0cc0: 64 69 72 65 63 74 6f 72 69 65 73 20 69 6e 73 74  directories inst
0cd0: 65 61 64 20 6f 66 20 69 6e 73 74 61 6c 6c 69 6e  ead of installin
0ce0: 67 20 66 69 6c 65 73 2e 0a 20 20 2d 67 20 47 52  g files..  -g GR
0cf0: 4f 55 50 20 20 20 20 20 20 24 63 68 67 72 70 70  OUP      $chgrpp
0d00: 72 6f 67 20 69 6e 73 74 61 6c 6c 65 64 20 66 69  rog installed fi
0d10: 6c 65 73 20 74 6f 20 47 52 4f 55 50 2e 0a 20 20  les to GROUP..  
0d20: 2d 6d 20 4d 4f 44 45 20 20 20 20 20 20 20 24 63  -m MODE       $c
0d30: 68 6d 6f 64 70 72 6f 67 20 69 6e 73 74 61 6c 6c  hmodprog install
0d40: 65 64 20 66 69 6c 65 73 20 74 6f 20 4d 4f 44 45  ed files to MODE
0d50: 2e 0a 20 20 2d 6f 20 55 53 45 52 20 20 20 20 20  ..  -o USER     
0d60: 20 20 24 63 68 6f 77 6e 70 72 6f 67 20 69 6e 73    $chownprog ins
0d70: 74 61 6c 6c 65 64 20 66 69 6c 65 73 20 74 6f 20  talled files to 
0d80: 55 53 45 52 2e 0a 20 20 2d 70 20 20 20 20 20 20  USER..  -p      
0d90: 20 20 20 20 20 20 70 61 73 73 20 2d 70 20 74 6f        pass -p to
0da0: 20 24 63 70 70 72 6f 67 2e 0a 20 20 2d 73 20 20   $cpprog..  -s  
0db0: 20 20 20 20 20 20 20 20 20 20 24 73 74 72 69 70            $strip
0dc0: 70 72 6f 67 20 69 6e 73 74 61 6c 6c 65 64 20 66  prog installed f
0dd0: 69 6c 65 73 2e 0a 20 20 2d 53 20 53 55 46 46 49  iles..  -S SUFFI
0de0: 58 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f  X     attempt to
0df0: 20 62 61 63 6b 20 75 70 20 65 78 69 73 74 69 6e   back up existin
0e00: 67 20 66 69 6c 65 73 2c 20 77 69 74 68 20 73 75  g files, with su
0e10: 66 66 69 78 20 53 55 46 46 49 58 2e 0a 20 20 2d  ffix SUFFIX..  -
0e20: 74 20 44 49 52 45 43 54 4f 52 59 20 20 69 6e 73  t DIRECTORY  ins
0e30: 74 61 6c 6c 20 69 6e 74 6f 20 44 49 52 45 43 54  tall into DIRECT
0e40: 4f 52 59 2e 0a 20 20 2d 54 20 20 20 20 20 20 20  ORY..  -T       
0e50: 20 20 20 20 20 72 65 70 6f 72 74 20 61 6e 20 65       report an e
0e60: 72 72 6f 72 20 69 66 20 44 53 54 46 49 4c 45 20  rror if DSTFILE 
0e70: 69 73 20 61 20 64 69 72 65 63 74 6f 72 79 2e 0a  is a directory..
0e80: 0a 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72  .Environment var
0e90: 69 61 62 6c 65 73 20 6f 76 65 72 72 69 64 65 20  iables override 
0ea0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6d 6d  the default comm
0eb0: 61 6e 64 73 3a 0a 20 20 43 48 47 52 50 50 52 4f  ands:.  CHGRPPRO
0ec0: 47 20 43 48 4d 4f 44 50 52 4f 47 20 43 48 4f 57  G CHMODPROG CHOW
0ed0: 4e 50 52 4f 47 20 43 4d 50 50 52 4f 47 20 43 50  NPROG CMPPROG CP
0ee0: 50 52 4f 47 20 4d 4b 44 49 52 50 52 4f 47 20 4d  PROG MKDIRPROG M
0ef0: 56 50 52 4f 47 0a 20 20 52 4d 50 52 4f 47 20 53  VPROG.  RMPROG S
0f00: 54 52 49 50 50 52 4f 47 0a 0a 42 79 20 64 65 66  TRIPPROG..By def
0f10: 61 75 6c 74 2c 20 72 6d 20 69 73 20 69 6e 76 6f  ault, rm is invo
0f20: 6b 65 64 20 77 69 74 68 20 2d 66 3b 20 77 68 65  ked with -f; whe
0f30: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 77 69 74  n overridden wit
0f40: 68 20 52 4d 50 52 4f 47 2c 0a 69 74 27 73 20 75  h RMPROG,.it's u
0f50: 70 20 74 6f 20 79 6f 75 20 74 6f 20 73 70 65 63  p to you to spec
0f60: 69 66 79 20 2d 66 20 69 66 20 79 6f 75 20 77 61  ify -f if you wa
0f70: 6e 74 20 69 74 2e 0a 0a 49 66 20 2d 53 20 69 73  nt it...If -S is
0f80: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 2c 20   not specified, 
0f90: 6e 6f 20 62 61 63 6b 75 70 73 20 61 72 65 20 61  no backups are a
0fa0: 74 74 65 6d 70 74 65 64 2e 0a 0a 45 6d 61 69 6c  ttempted...Email
0fb0: 20 62 75 67 20 72 65 70 6f 72 74 73 20 74 6f 20   bug reports to 
0fc0: 62 75 67 2d 61 75 74 6f 6d 61 6b 65 40 67 6e 75  bug-automake@gnu
0fd0: 2e 6f 72 67 2e 0a 41 75 74 6f 6d 61 6b 65 20 68  .org..Automake h
0fe0: 6f 6d 65 20 70 61 67 65 3a 20 68 74 74 70 73 3a  ome page: https:
0ff0: 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 73 6f  //www.gnu.org/so
1000: 66 74 77 61 72 65 2f 61 75 74 6f 6d 61 6b 65 2f  ftware/automake/
1010: 0a 22 0a 0a 77 68 69 6c 65 20 74 65 73 74 20 24  ."..while test $
1020: 23 20 2d 6e 65 20 30 3b 20 64 6f 0a 20 20 63 61  # -ne 0; do.  ca
1030: 73 65 20 24 31 20 69 6e 0a 20 20 20 20 2d 63 29  se $1 in.    -c)
1040: 20 3b 3b 0a 0a 20 20 20 20 2d 43 29 20 63 6f 70   ;;..    -C) cop
1050: 79 5f 6f 6e 5f 63 68 61 6e 67 65 3d 74 72 75 65  y_on_change=true
1060: 3b 3b 0a 0a 20 20 20 20 2d 64 29 20 64 69 72 5f  ;;..    -d) dir_
1070: 61 72 67 3d 74 72 75 65 3b 3b 0a 0a 20 20 20 20  arg=true;;..    
1080: 2d 67 29 20 63 68 67 72 70 63 6d 64 3d 22 24 63  -g) chgrpcmd="$c
1090: 68 67 72 70 70 72 6f 67 20 24 32 22 0a 20 20 20  hgrpprog $2".   
10a0: 20 20 20 20 20 73 68 69 66 74 3b 3b 0a 0a 20 20       shift;;..  
10b0: 20 20 2d 2d 68 65 6c 70 29 20 65 63 68 6f 20 22    --help) echo "
10c0: 24 75 73 61 67 65 22 3b 20 65 78 69 74 20 24 3f  $usage"; exit $?
10d0: 3b 3b 0a 0a 20 20 20 20 2d 6d 29 20 6d 6f 64 65  ;;..    -m) mode
10e0: 3d 24 32 0a 20 20 20 20 20 20 20 20 63 61 73 65  =$2.        case
10f0: 20 24 6d 6f 64 65 20 69 6e 0a 20 20 20 20 20 20   $mode in.      
1100: 20 20 20 20 2a 27 20 27 2a 20 7c 20 2a 22 24 74      *' '* | *"$t
1110: 61 62 22 2a 20 7c 20 2a 22 24 6e 6c 22 2a 20 7c  ab"* | *"$nl"* |
1120: 20 2a 27 2a 27 2a 20 7c 20 2a 27 3f 27 2a 20 7c   *'*'* | *'?'* |
1130: 20 2a 27 5b 27 2a 29 0a 20 20 20 20 20 20 20 20   *'['*).        
1140: 20 20 20 20 65 63 68 6f 20 22 24 30 3a 20 69 6e      echo "$0: in
1150: 76 61 6c 69 64 20 6d 6f 64 65 3a 20 24 6d 6f 64  valid mode: $mod
1160: 65 22 20 3e 26 32 0a 20 20 20 20 20 20 20 20 20  e" >&2.         
1170: 20 20 20 65 78 69 74 20 31 3b 3b 0a 20 20 20 20     exit 1;;.    
1180: 20 20 20 20 65 73 61 63 0a 20 20 20 20 20 20 20      esac.       
1190: 20 73 68 69 66 74 3b 3b 0a 0a 20 20 20 20 2d 6f   shift;;..    -o
11a0: 29 20 63 68 6f 77 6e 63 6d 64 3d 22 24 63 68 6f  ) chowncmd="$cho
11b0: 77 6e 70 72 6f 67 20 24 32 22 0a 20 20 20 20 20  wnprog $2".     
11c0: 20 20 20 73 68 69 66 74 3b 3b 0a 0a 20 20 20 20     shift;;..    
11d0: 2d 70 29 20 63 70 70 72 6f 67 3d 22 24 63 70 70  -p) cpprog="$cpp
11e0: 72 6f 67 20 2d 70 22 3b 3b 0a 0a 20 20 20 20 2d  rog -p";;..    -
11f0: 73 29 20 73 74 72 69 70 63 6d 64 3d 24 73 74 72  s) stripcmd=$str
1200: 69 70 70 72 6f 67 3b 3b 0a 0a 20 20 20 20 2d 53  ipprog;;..    -S
1210: 29 20 62 61 63 6b 75 70 73 75 66 66 69 78 3d 22  ) backupsuffix="
1220: 24 32 22 0a 20 20 20 20 20 20 20 20 73 68 69 66  $2".        shif
1230: 74 3b 3b 0a 0a 20 20 20 20 2d 74 29 0a 20 20 20  t;;..    -t).   
1240: 20 20 20 20 20 69 73 5f 74 61 72 67 65 74 5f 61       is_target_a
1250: 5f 64 69 72 65 63 74 6f 72 79 3d 61 6c 77 61 79  _directory=alway
1260: 73 0a 20 20 20 20 20 20 20 20 64 73 74 5f 61 72  s.        dst_ar
1270: 67 3d 24 32 0a 20 20 20 20 20 20 20 20 23 20 50  g=$2.        # P
1280: 72 6f 74 65 63 74 20 6e 61 6d 65 73 20 70 72 6f  rotect names pro
1290: 62 6c 65 6d 61 74 69 63 20 66 6f 72 20 27 74 65  blematic for 'te
12a0: 73 74 27 20 61 6e 64 20 6f 74 68 65 72 20 75 74  st' and other ut
12b0: 69 6c 69 74 69 65 73 2e 0a 20 20 20 20 20 20 20  ilities..       
12c0: 20 63 61 73 65 20 24 64 73 74 5f 61 72 67 20 69   case $dst_arg i
12d0: 6e 0a 20 20 20 20 20 20 20 20 20 20 2d 2a 20 7c  n.          -* |
12e0: 20 5b 3d 5c 28 5c 29 21 5d 29 20 64 73 74 5f 61   [=\(\)!]) dst_a
12f0: 72 67 3d 2e 2f 24 64 73 74 5f 61 72 67 3b 3b 0a  rg=./$dst_arg;;.
1300: 20 20 20 20 20 20 20 20 65 73 61 63 0a 20 20 20          esac.   
1310: 20 20 20 20 20 73 68 69 66 74 3b 3b 0a 0a 20 20       shift;;..  
1320: 20 20 2d 54 29 20 69 73 5f 74 61 72 67 65 74 5f    -T) is_target_
1330: 61 5f 64 69 72 65 63 74 6f 72 79 3d 6e 65 76 65  a_directory=neve
1340: 72 3b 3b 0a 0a 20 20 20 20 2d 2d 76 65 72 73 69  r;;..    --versi
1350: 6f 6e 29 20 65 63 68 6f 20 22 24 30 20 24 73 63  on) echo "$0 $sc
1360: 72 69 70 74 76 65 72 73 69 6f 6e 22 3b 20 65 78  riptversion"; ex
1370: 69 74 20 24 3f 3b 3b 0a 0a 20 20 20 20 2d 2d 29  it $?;;..    --)
1380: 20 73 68 69 66 74 0a 20 20 20 20 20 20 20 20 62   shift.        b
1390: 72 65 61 6b 3b 3b 0a 0a 20 20 20 20 2d 2a 29 20  reak;;..    -*) 
13a0: 65 63 68 6f 20 22 24 30 3a 20 69 6e 76 61 6c 69  echo "$0: invali
13b0: 64 20 6f 70 74 69 6f 6e 3a 20 24 31 22 20 3e 26  d option: $1" >&
13c0: 32 0a 20 20 20 20 20 20 20 20 65 78 69 74 20 31  2.        exit 1
13d0: 3b 3b 0a 0a 20 20 20 20 2a 29 20 20 62 72 65 61  ;;..    *)  brea
13e0: 6b 3b 3b 0a 20 20 65 73 61 63 0a 20 20 73 68 69  k;;.  esac.  shi
13f0: 66 74 0a 64 6f 6e 65 0a 0a 23 20 57 65 20 61 6c  ft.done..# We al
1400: 6c 6f 77 20 74 68 65 20 75 73 65 20 6f 66 20 6f  low the use of o
1410: 70 74 69 6f 6e 73 20 2d 64 20 61 6e 64 20 2d 54  ptions -d and -T
1420: 20 74 6f 67 65 74 68 65 72 2c 20 62 79 20 6d 61   together, by ma
1430: 6b 69 6e 67 20 2d 64 0a 23 20 74 61 6b 65 20 74  king -d.# take t
1440: 68 65 20 70 72 65 63 65 64 65 6e 63 65 3b 20 74  he precedence; t
1450: 68 69 73 20 69 73 20 66 6f 72 20 63 6f 6d 70 61  his is for compa
1460: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 47 4e  tibility with GN
1470: 55 20 69 6e 73 74 61 6c 6c 2e 0a 0a 69 66 20 74  U install...if t
1480: 65 73 74 20 2d 6e 20 22 24 64 69 72 5f 61 72 67  est -n "$dir_arg
1490: 22 3b 20 74 68 65 6e 0a 20 20 69 66 20 74 65 73  "; then.  if tes
14a0: 74 20 2d 6e 20 22 24 64 73 74 5f 61 72 67 22 3b  t -n "$dst_arg";
14b0: 20 74 68 65 6e 0a 20 20 20 20 65 63 68 6f 20 22   then.    echo "
14c0: 24 30 3a 20 74 61 72 67 65 74 20 64 69 72 65 63  $0: target direc
14d0: 74 6f 72 79 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  tory not allowed
14e0: 20 77 68 65 6e 20 69 6e 73 74 61 6c 6c 69 6e 67   when installing
14f0: 20 61 20 64 69 72 65 63 74 6f 72 79 2e 22 20 3e   a directory." >
1500: 26 32 0a 20 20 20 20 65 78 69 74 20 31 0a 20 20  &2.    exit 1.  
1510: 66 69 0a 66 69 0a 0a 69 66 20 74 65 73 74 20 24  fi.fi..if test $
1520: 23 20 2d 6e 65 20 30 20 26 26 20 74 65 73 74 20  # -ne 0 && test 
1530: 2d 7a 20 22 24 64 69 72 5f 61 72 67 24 64 73 74  -z "$dir_arg$dst
1540: 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20 20 23 20  _arg"; then.  # 
1550: 57 68 65 6e 20 2d 64 20 69 73 20 75 73 65 64 2c  When -d is used,
1560: 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 61   all remaining a
1570: 72 67 75 6d 65 6e 74 73 20 61 72 65 20 64 69 72  rguments are dir
1580: 65 63 74 6f 72 69 65 73 20 74 6f 20 63 72 65 61  ectories to crea
1590: 74 65 2e 0a 20 20 23 20 57 68 65 6e 20 2d 74 20  te..  # When -t 
15a0: 69 73 20 75 73 65 64 2c 20 74 68 65 20 64 65 73  is used, the des
15b0: 74 69 6e 61 74 69 6f 6e 20 69 73 20 61 6c 72 65  tination is alre
15c0: 61 64 79 20 73 70 65 63 69 66 69 65 64 2e 0a 20  ady specified.. 
15d0: 20 23 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68   # Otherwise, th
15e0: 65 20 6c 61 73 74 20 61 72 67 75 6d 65 6e 74 20  e last argument 
15f0: 69 73 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  is the destinati
1600: 6f 6e 2e 20 20 52 65 6d 6f 76 65 20 69 74 20 66  on.  Remove it f
1610: 72 6f 6d 20 24 40 2e 0a 20 20 66 6f 72 20 61 72  rom $@..  for ar
1620: 67 0a 20 20 64 6f 0a 20 20 20 20 69 66 20 74 65  g.  do.    if te
1630: 73 74 20 2d 6e 20 22 24 64 73 74 5f 61 72 67 22  st -n "$dst_arg"
1640: 3b 20 74 68 65 6e 0a 20 20 20 20 20 20 23 20 24  ; then.      # $
1650: 40 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a 20  @ is not empty: 
1660: 69 74 20 63 6f 6e 74 61 69 6e 73 20 61 74 20 6c  it contains at l
1670: 65 61 73 74 20 24 61 72 67 2e 0a 20 20 20 20 20  east $arg..     
1680: 20 73 65 74 20 66 6e 6f 72 64 20 22 24 40 22 20   set fnord "$@" 
1690: 22 24 64 73 74 5f 61 72 67 22 0a 20 20 20 20 20  "$dst_arg".     
16a0: 20 73 68 69 66 74 20 23 20 66 6e 6f 72 64 0a 20   shift # fnord. 
16b0: 20 20 20 66 69 0a 20 20 20 20 73 68 69 66 74 20     fi.    shift 
16c0: 23 20 61 72 67 0a 20 20 20 20 64 73 74 5f 61 72  # arg.    dst_ar
16d0: 67 3d 24 61 72 67 0a 20 20 20 20 23 20 50 72 6f  g=$arg.    # Pro
16e0: 74 65 63 74 20 6e 61 6d 65 73 20 70 72 6f 62 6c  tect names probl
16f0: 65 6d 61 74 69 63 20 66 6f 72 20 27 74 65 73 74  ematic for 'test
1700: 27 20 61 6e 64 20 6f 74 68 65 72 20 75 74 69 6c  ' and other util
1710: 69 74 69 65 73 2e 0a 20 20 20 20 63 61 73 65 20  ities..    case 
1720: 24 64 73 74 5f 61 72 67 20 69 6e 0a 20 20 20 20  $dst_arg in.    
1730: 20 20 2d 2a 20 7c 20 5b 3d 5c 28 5c 29 21 5d 29    -* | [=\(\)!])
1740: 20 64 73 74 5f 61 72 67 3d 2e 2f 24 64 73 74 5f   dst_arg=./$dst_
1750: 61 72 67 3b 3b 0a 20 20 20 20 65 73 61 63 0a 20  arg;;.    esac. 
1760: 20 64 6f 6e 65 0a 66 69 0a 0a 69 66 20 74 65 73   done.fi..if tes
1770: 74 20 24 23 20 2d 65 71 20 30 3b 20 74 68 65 6e  t $# -eq 0; then
1780: 0a 20 20 69 66 20 74 65 73 74 20 2d 7a 20 22 24  .  if test -z "$
1790: 64 69 72 5f 61 72 67 22 3b 20 74 68 65 6e 0a 20  dir_arg"; then. 
17a0: 20 20 20 65 63 68 6f 20 22 24 30 3a 20 6e 6f 20     echo "$0: no 
17b0: 69 6e 70 75 74 20 66 69 6c 65 20 73 70 65 63 69  input file speci
17c0: 66 69 65 64 2e 22 20 3e 26 32 0a 20 20 20 20 65  fied." >&2.    e
17d0: 78 69 74 20 31 0a 20 20 66 69 0a 20 20 23 20 49  xit 1.  fi.  # I
17e0: 74 27 73 20 4f 4b 20 74 6f 20 63 61 6c 6c 20 27  t's OK to call '
17f0: 69 6e 73 74 61 6c 6c 2d 73 68 20 2d 64 27 20 77  install-sh -d' w
1800: 69 74 68 6f 75 74 20 61 72 67 75 6d 65 6e 74 2e  ithout argument.
1810: 0a 20 20 23 20 54 68 69 73 20 63 61 6e 20 68 61  .  # This can ha
1820: 70 70 65 6e 20 77 68 65 6e 20 63 72 65 61 74 69  ppen when creati
1830: 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 64  ng conditional d
1840: 69 72 65 63 74 6f 72 69 65 73 2e 0a 20 20 65 78  irectories..  ex
1850: 69 74 20 30 0a 66 69 0a 0a 69 66 20 74 65 73 74  it 0.fi..if test
1860: 20 2d 7a 20 22 24 64 69 72 5f 61 72 67 22 3b 20   -z "$dir_arg"; 
1870: 74 68 65 6e 0a 20 20 69 66 20 74 65 73 74 20 24  then.  if test $
1880: 23 20 2d 67 74 20 31 20 7c 7c 20 74 65 73 74 20  # -gt 1 || test 
1890: 22 24 69 73 5f 74 61 72 67 65 74 5f 61 5f 64 69  "$is_target_a_di
18a0: 72 65 63 74 6f 72 79 22 20 3d 20 61 6c 77 61 79  rectory" = alway
18b0: 73 3b 20 74 68 65 6e 0a 20 20 20 20 69 66 20 74  s; then.    if t
18c0: 65 73 74 20 21 20 2d 64 20 22 24 64 73 74 5f 61  est ! -d "$dst_a
18d0: 72 67 22 3b 20 74 68 65 6e 0a 20 20 20 20 20 20  rg"; then.      
18e0: 65 63 68 6f 20 22 24 30 3a 20 24 64 73 74 5f 61  echo "$0: $dst_a
18f0: 72 67 3a 20 49 73 20 6e 6f 74 20 61 20 64 69 72  rg: Is not a dir
1900: 65 63 74 6f 72 79 2e 22 20 3e 26 32 0a 20 20 20  ectory." >&2.   
1910: 20 20 20 65 78 69 74 20 31 0a 20 20 20 20 66 69     exit 1.    fi
1920: 0a 20 20 66 69 0a 66 69 0a 0a 69 66 20 74 65 73  .  fi.fi..if tes
1930: 74 20 2d 7a 20 22 24 64 69 72 5f 61 72 67 22 3b  t -z "$dir_arg";
1940: 20 74 68 65 6e 0a 20 20 64 6f 5f 65 78 69 74 3d   then.  do_exit=
1950: 27 28 65 78 69 74 20 24 72 65 74 29 3b 20 65 78  '(exit $ret); ex
1960: 69 74 20 24 72 65 74 27 0a 20 20 74 72 61 70 20  it $ret'.  trap 
1970: 22 72 65 74 3d 31 32 39 3b 20 24 64 6f 5f 65 78  "ret=129; $do_ex
1980: 69 74 22 20 31 0a 20 20 74 72 61 70 20 22 72 65  it" 1.  trap "re
1990: 74 3d 31 33 30 3b 20 24 64 6f 5f 65 78 69 74 22  t=130; $do_exit"
19a0: 20 32 0a 20 20 74 72 61 70 20 22 72 65 74 3d 31   2.  trap "ret=1
19b0: 34 31 3b 20 24 64 6f 5f 65 78 69 74 22 20 31 33  41; $do_exit" 13
19c0: 0a 20 20 74 72 61 70 20 22 72 65 74 3d 31 34 33  .  trap "ret=143
19d0: 3b 20 24 64 6f 5f 65 78 69 74 22 20 31 35 0a 0a  ; $do_exit" 15..
19e0: 20 20 23 20 53 65 74 20 75 6d 61 73 6b 20 73 6f    # Set umask so
19f0: 20 61 73 20 6e 6f 74 20 74 6f 20 63 72 65 61 74   as not to creat
1a00: 65 20 74 65 6d 70 73 20 77 69 74 68 20 74 6f 6f  e temps with too
1a10: 2d 67 65 6e 65 72 6f 75 73 20 6d 6f 64 65 73 2e  -generous modes.
1a20: 0a 20 20 23 20 48 6f 77 65 76 65 72 2c 20 27 73  .  # However, 's
1a30: 74 72 69 70 27 20 72 65 71 75 69 72 65 73 20 62  trip' requires b
1a40: 6f 74 68 20 72 65 61 64 20 61 6e 64 20 77 72 69  oth read and wri
1a50: 74 65 20 61 63 63 65 73 73 20 74 6f 20 74 65 6d  te access to tem
1a60: 70 73 2e 0a 20 20 63 61 73 65 20 24 6d 6f 64 65  ps..  case $mode
1a70: 20 69 6e 0a 20 20 20 20 23 20 4f 70 74 69 6d 69   in.    # Optimi
1a80: 7a 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 73 2e  ze common cases.
1a90: 0a 20 20 20 20 2a 36 34 34 29 20 63 70 5f 75 6d  .    *644) cp_um
1aa0: 61 73 6b 3d 31 33 33 3b 3b 0a 20 20 20 20 2a 37  ask=133;;.    *7
1ab0: 35 35 29 20 63 70 5f 75 6d 61 73 6b 3d 32 32 3b  55) cp_umask=22;
1ac0: 3b 0a 0a 20 20 20 20 2a 5b 30 2d 37 5d 29 0a 20  ;..    *[0-7]). 
1ad0: 20 20 20 20 20 69 66 20 74 65 73 74 20 2d 7a 20       if test -z 
1ae0: 22 24 73 74 72 69 70 63 6d 64 22 3b 20 74 68 65  "$stripcmd"; the
1af0: 6e 0a 20 20 20 20 20 20 20 20 75 5f 70 6c 75 73  n.        u_plus
1b00: 5f 72 77 3d 0a 20 20 20 20 20 20 65 6c 73 65 0a  _rw=.      else.
1b10: 20 20 20 20 20 20 20 20 75 5f 70 6c 75 73 5f 72          u_plus_r
1b20: 77 3d 27 25 20 32 30 30 27 0a 20 20 20 20 20 20  w='% 200'.      
1b30: 66 69 0a 20 20 20 20 20 20 63 70 5f 75 6d 61 73  fi.      cp_umas
1b40: 6b 3d 60 65 78 70 72 20 27 28 27 20 37 37 37 20  k=`expr '(' 777 
1b50: 2d 20 24 6d 6f 64 65 20 25 20 31 30 30 30 20 27  - $mode % 1000 '
1b60: 29 27 20 24 75 5f 70 6c 75 73 5f 72 77 60 3b 3b  )' $u_plus_rw`;;
1b70: 0a 20 20 20 20 2a 29 0a 20 20 20 20 20 20 69 66  .    *).      if
1b80: 20 74 65 73 74 20 2d 7a 20 22 24 73 74 72 69 70   test -z "$strip
1b90: 63 6d 64 22 3b 20 74 68 65 6e 0a 20 20 20 20 20  cmd"; then.     
1ba0: 20 20 20 75 5f 70 6c 75 73 5f 72 77 3d 0a 20 20     u_plus_rw=.  
1bb0: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
1bc0: 20 75 5f 70 6c 75 73 5f 72 77 3d 2c 75 2b 72 77   u_plus_rw=,u+rw
1bd0: 0a 20 20 20 20 20 20 66 69 0a 20 20 20 20 20 20  .      fi.      
1be0: 63 70 5f 75 6d 61 73 6b 3d 24 6d 6f 64 65 24 75  cp_umask=$mode$u
1bf0: 5f 70 6c 75 73 5f 72 77 3b 3b 0a 20 20 65 73 61  _plus_rw;;.  esa
1c00: 63 0a 66 69 0a 0a 66 6f 72 20 73 72 63 0a 64 6f  c.fi..for src.do
1c10: 0a 20 20 23 20 50 72 6f 74 65 63 74 20 6e 61 6d  .  # Protect nam
1c20: 65 73 20 70 72 6f 62 6c 65 6d 61 74 69 63 20 66  es problematic f
1c30: 6f 72 20 27 74 65 73 74 27 20 61 6e 64 20 6f 74  or 'test' and ot
1c40: 68 65 72 20 75 74 69 6c 69 74 69 65 73 2e 0a 20  her utilities.. 
1c50: 20 63 61 73 65 20 24 73 72 63 20 69 6e 0a 20 20   case $src in.  
1c60: 20 20 2d 2a 20 7c 20 5b 3d 5c 28 5c 29 21 5d 29    -* | [=\(\)!])
1c70: 20 73 72 63 3d 2e 2f 24 73 72 63 3b 3b 0a 20 20   src=./$src;;.  
1c80: 65 73 61 63 0a 0a 20 20 69 66 20 74 65 73 74 20  esac..  if test 
1c90: 2d 6e 20 22 24 64 69 72 5f 61 72 67 22 3b 20 74  -n "$dir_arg"; t
1ca0: 68 65 6e 0a 20 20 20 20 64 73 74 3d 24 73 72 63  hen.    dst=$src
1cb0: 0a 20 20 20 20 64 73 74 64 69 72 3d 24 64 73 74  .    dstdir=$dst
1cc0: 0a 20 20 20 20 74 65 73 74 20 2d 64 20 22 24 64  .    test -d "$d
1cd0: 73 74 64 69 72 22 0a 20 20 20 20 64 73 74 64 69  stdir".    dstdi
1ce0: 72 5f 73 74 61 74 75 73 3d 24 3f 0a 20 20 20 20  r_status=$?.    
1cf0: 23 20 44 6f 6e 27 74 20 63 68 6f 77 6e 20 64 69  # Don't chown di
1d00: 72 65 63 74 6f 72 69 65 73 20 74 68 61 74 20 61  rectories that a
1d10: 6c 72 65 61 64 79 20 65 78 69 73 74 2e 0a 20 20  lready exist..  
1d20: 20 20 69 66 20 74 65 73 74 20 24 64 73 74 64 69    if test $dstdi
1d30: 72 5f 73 74 61 74 75 73 20 3d 20 30 3b 20 74 68  r_status = 0; th
1d40: 65 6e 0a 20 20 20 20 20 20 63 68 6f 77 6e 63 6d  en.      chowncm
1d50: 64 3d 22 22 0a 20 20 20 20 66 69 0a 20 20 65 6c  d="".    fi.  el
1d60: 73 65 0a 0a 20 20 20 20 23 20 57 61 69 74 69 6e  se..    # Waitin
1d70: 67 20 66 6f 72 20 74 68 69 73 20 74 6f 20 62 65  g for this to be
1d80: 20 64 65 74 65 63 74 65 64 20 62 79 20 74 68 65   detected by the
1d90: 20 22 24 63 70 70 72 6f 67 20 24 73 72 63 20 24   "$cpprog $src $
1da0: 64 73 74 74 6d 70 22 20 63 6f 6d 6d 61 6e 64 0a  dsttmp" command.
1db0: 20 20 20 20 23 20 6d 69 67 68 74 20 63 61 75 73      # might caus
1dc0: 65 20 64 69 72 65 63 74 6f 72 69 65 73 20 74 6f  e directories to
1dd0: 20 62 65 20 63 72 65 61 74 65 64 2c 20 77 68 69   be created, whi
1de0: 63 68 20 77 6f 75 6c 64 20 62 65 20 65 73 70 65  ch would be espe
1df0: 63 69 61 6c 6c 79 20 62 61 64 0a 20 20 20 20 23  cially bad.    #
1e00: 20 69 66 20 24 73 72 63 20 28 61 6e 64 20 74 68   if $src (and th
1e10: 75 73 20 24 64 73 74 74 6d 70 29 20 63 6f 6e 74  us $dsttmp) cont
1e20: 61 69 6e 73 20 27 2a 27 2e 0a 20 20 20 20 69 66  ains '*'..    if
1e30: 20 74 65 73 74 20 21 20 2d 66 20 22 24 73 72 63   test ! -f "$src
1e40: 22 20 26 26 20 74 65 73 74 20 21 20 2d 64 20 22  " && test ! -d "
1e50: 24 73 72 63 22 3b 20 74 68 65 6e 0a 20 20 20 20  $src"; then.    
1e60: 20 20 65 63 68 6f 20 22 24 30 3a 20 24 73 72 63    echo "$0: $src
1e70: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e   does not exist.
1e80: 22 20 3e 26 32 0a 20 20 20 20 20 20 65 78 69 74  " >&2.      exit
1e90: 20 31 0a 20 20 20 20 66 69 0a 0a 20 20 20 20 69   1.    fi..    i
1ea0: 66 20 74 65 73 74 20 2d 7a 20 22 24 64 73 74 5f  f test -z "$dst_
1eb0: 61 72 67 22 3b 20 74 68 65 6e 0a 20 20 20 20 20  arg"; then.     
1ec0: 20 65 63 68 6f 20 22 24 30 3a 20 6e 6f 20 64 65   echo "$0: no de
1ed0: 73 74 69 6e 61 74 69 6f 6e 20 73 70 65 63 69 66  stination specif
1ee0: 69 65 64 2e 22 20 3e 26 32 0a 20 20 20 20 20 20  ied." >&2.      
1ef0: 65 78 69 74 20 31 0a 20 20 20 20 66 69 0a 20 20  exit 1.    fi.  
1f00: 20 20 64 73 74 3d 24 64 73 74 5f 61 72 67 0a 0a    dst=$dst_arg..
1f10: 20 20 20 20 23 20 49 66 20 64 65 73 74 69 6e 61      # If destina
1f20: 74 69 6f 6e 20 69 73 20 61 20 64 69 72 65 63 74  tion is a direct
1f30: 6f 72 79 2c 20 61 70 70 65 6e 64 20 74 68 65 20  ory, append the 
1f40: 69 6e 70 75 74 20 66 69 6c 65 6e 61 6d 65 2e 0a  input filename..
1f50: 20 20 20 20 69 66 20 74 65 73 74 20 2d 64 20 22      if test -d "
1f60: 24 64 73 74 22 3b 20 74 68 65 6e 0a 20 20 20 20  $dst"; then.    
1f70: 20 20 69 66 20 74 65 73 74 20 22 24 69 73 5f 74    if test "$is_t
1f80: 61 72 67 65 74 5f 61 5f 64 69 72 65 63 74 6f 72  arget_a_director
1f90: 79 22 20 3d 20 6e 65 76 65 72 3b 20 74 68 65 6e  y" = never; then
1fa0: 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 24  .        echo "$
1fb0: 30 3a 20 24 64 73 74 5f 61 72 67 3a 20 49 73 20  0: $dst_arg: Is 
1fc0: 61 20 64 69 72 65 63 74 6f 72 79 22 20 3e 26 32  a directory" >&2
1fd0: 0a 20 20 20 20 20 20 20 20 65 78 69 74 20 31 0a  .        exit 1.
1fe0: 20 20 20 20 20 20 66 69 0a 20 20 20 20 20 20 64        fi.      d
1ff0: 73 74 64 69 72 3d 24 64 73 74 0a 20 20 20 20 20  stdir=$dst.     
2000: 20 64 73 74 62 61 73 65 3d 60 62 61 73 65 6e 61   dstbase=`basena
2010: 6d 65 20 22 24 73 72 63 22 60 0a 20 20 20 20 20  me "$src"`.     
2020: 20 63 61 73 65 20 24 64 73 74 20 69 6e 0a 09 2a   case $dst in..*
2030: 2f 29 20 64 73 74 3d 24 64 73 74 24 64 73 74 62  /) dst=$dst$dstb
2040: 61 73 65 3b 3b 0a 09 2a 29 20 20 64 73 74 3d 24  ase;;..*)  dst=$
2050: 64 73 74 2f 24 64 73 74 62 61 73 65 3b 3b 0a 20  dst/$dstbase;;. 
2060: 20 20 20 20 20 65 73 61 63 0a 20 20 20 20 20 20       esac.      
2070: 64 73 74 64 69 72 5f 73 74 61 74 75 73 3d 30 0a  dstdir_status=0.
2080: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 64      else.      d
2090: 73 74 64 69 72 3d 60 64 69 72 6e 61 6d 65 20 22  stdir=`dirname "
20a0: 24 64 73 74 22 60 0a 20 20 20 20 20 20 74 65 73  $dst"`.      tes
20b0: 74 20 2d 64 20 22 24 64 73 74 64 69 72 22 0a 20  t -d "$dstdir". 
20c0: 20 20 20 20 20 64 73 74 64 69 72 5f 73 74 61 74       dstdir_stat
20d0: 75 73 3d 24 3f 0a 20 20 20 20 66 69 0a 20 20 66  us=$?.    fi.  f
20e0: 69 0a 0a 20 20 63 61 73 65 20 24 64 73 74 64 69  i..  case $dstdi
20f0: 72 20 69 6e 0a 20 20 20 20 2a 2f 29 20 64 73 74  r in.    */) dst
2100: 64 69 72 73 6c 61 73 68 3d 24 64 73 74 64 69 72  dirslash=$dstdir
2110: 3b 3b 0a 20 20 20 20 2a 29 20 20 64 73 74 64 69  ;;.    *)  dstdi
2120: 72 73 6c 61 73 68 3d 24 64 73 74 64 69 72 2f 3b  rslash=$dstdir/;
2130: 3b 0a 20 20 65 73 61 63 0a 0a 20 20 6f 62 73 6f  ;.  esac..  obso
2140: 6c 65 74 65 5f 6d 6b 64 69 72 5f 75 73 65 64 3d  lete_mkdir_used=
2150: 66 61 6c 73 65 0a 0a 20 20 69 66 20 74 65 73 74  false..  if test
2160: 20 24 64 73 74 64 69 72 5f 73 74 61 74 75 73 20   $dstdir_status 
2170: 21 3d 20 30 3b 20 74 68 65 6e 0a 20 20 20 20 63  != 0; then.    c
2180: 61 73 65 20 24 70 6f 73 69 78 5f 6d 6b 64 69 72  ase $posix_mkdir
2190: 20 69 6e 0a 20 20 20 20 20 20 27 27 29 0a 20 20   in.      '').  
21a0: 20 20 20 20 20 20 23 20 57 69 74 68 20 2d 64 2c        # With -d,
21b0: 20 63 72 65 61 74 65 20 74 68 65 20 6e 65 77 20   create the new 
21c0: 64 69 72 65 63 74 6f 72 79 20 77 69 74 68 20 74  directory with t
21d0: 68 65 20 75 73 65 72 2d 73 70 65 63 69 66 69 65  he user-specifie
21e0: 64 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20 20  d mode..        
21f0: 23 20 4f 74 68 65 72 77 69 73 65 2c 20 72 65 6c  # Otherwise, rel
2200: 79 20 6f 6e 20 24 6d 6b 64 69 72 5f 75 6d 61 73  y on $mkdir_umas
2210: 6b 2e 0a 20 20 20 20 20 20 20 20 69 66 20 74 65  k..        if te
2220: 73 74 20 2d 6e 20 22 24 64 69 72 5f 61 72 67 22  st -n "$dir_arg"
2230: 3b 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 20  ; then.         
2240: 20 6d 6b 64 69 72 5f 6d 6f 64 65 3d 2d 6d 24 6d   mkdir_mode=-m$m
2250: 6f 64 65 0a 20 20 20 20 20 20 20 20 65 6c 73 65  ode.        else
2260: 0a 20 20 20 20 20 20 20 20 20 20 6d 6b 64 69 72  .          mkdir
2270: 5f 6d 6f 64 65 3d 0a 20 20 20 20 20 20 20 20 66  _mode=.        f
2280: 69 0a 0a 20 20 20 20 20 20 20 20 70 6f 73 69 78  i..        posix
2290: 5f 6d 6b 64 69 72 3d 66 61 6c 73 65 0a 09 23 20  _mkdir=false..# 
22a0: 54 68 65 20 24 52 41 4e 44 4f 4d 20 76 61 72 69  The $RANDOM vari
22b0: 61 62 6c 65 20 69 73 20 6e 6f 74 20 70 6f 72 74  able is not port
22c0: 61 62 6c 65 20 28 65 2e 67 2e 2c 20 64 61 73 68  able (e.g., dash
22d0: 29 2e 20 20 55 73 65 20 69 74 0a 09 23 20 68 65  ).  Use it..# he
22e0: 72 65 20 68 6f 77 65 76 65 72 20 77 68 65 6e 20  re however when 
22f0: 70 6f 73 73 69 62 6c 65 20 6a 75 73 74 20 74 6f  possible just to
2300: 20 6c 6f 77 65 72 20 63 6f 6c 6c 69 73 69 6f 6e   lower collision
2310: 20 63 68 61 6e 63 65 2e 0a 09 74 6d 70 64 69 72   chance...tmpdir
2320: 3d 24 7b 54 4d 50 44 49 52 2d 2f 74 6d 70 7d 2f  =${TMPDIR-/tmp}/
2330: 69 6e 73 24 52 41 4e 44 4f 4d 2d 24 24 0a 0a 09  ins$RANDOM-$$...
2340: 74 72 61 70 20 27 0a 09 20 20 72 65 74 3d 24 3f  trap '..  ret=$?
2350: 0a 09 20 20 72 6d 64 69 72 20 22 24 74 6d 70 64  ..  rmdir "$tmpd
2360: 69 72 2f 61 2f 62 22 20 22 24 74 6d 70 64 69 72  ir/a/b" "$tmpdir
2370: 2f 61 22 20 22 24 74 6d 70 64 69 72 22 20 32 3e  /a" "$tmpdir" 2>
2380: 2f 64 65 76 2f 6e 75 6c 6c 0a 09 20 20 65 78 69  /dev/null..  exi
2390: 74 20 24 72 65 74 0a 09 27 20 30 0a 0a 09 23 20  t $ret..' 0...# 
23a0: 42 65 63 61 75 73 65 20 22 6d 6b 64 69 72 20 2d  Because "mkdir -
23b0: 70 22 20 66 6f 6c 6c 6f 77 73 20 65 78 69 73 74  p" follows exist
23c0: 69 6e 67 20 73 79 6d 6c 69 6e 6b 73 20 61 6e 64  ing symlinks and
23d0: 20 77 65 20 6c 69 6b 65 6c 79 20 77 6f 72 6b 0a   we likely work.
23e0: 09 23 20 64 69 72 65 63 74 6c 79 20 69 6e 20 77  .# directly in w
23f0: 6f 72 6c 64 2d 77 72 69 74 65 61 62 6c 65 20 2f  orld-writeable /
2400: 74 6d 70 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  tmp, make sure t
2410: 68 61 74 20 74 68 65 20 27 24 74 6d 70 64 69 72  hat the '$tmpdir
2420: 27 0a 09 23 20 64 69 72 65 63 74 6f 72 79 20 69  '..# directory i
2430: 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 63  s successfully c
2440: 72 65 61 74 65 64 20 66 69 72 73 74 20 62 65 66  reated first bef
2450: 6f 72 65 20 77 65 20 61 63 74 75 61 6c 6c 79 20  ore we actually 
2460: 74 65 73 74 0a 09 23 20 27 6d 6b 64 69 72 20 2d  test..# 'mkdir -
2470: 70 27 2e 0a 09 69 66 20 28 75 6d 61 73 6b 20 24  p'...if (umask $
2480: 6d 6b 64 69 72 5f 75 6d 61 73 6b 20 26 26 0a 09  mkdir_umask &&..
2490: 20 20 20 20 24 6d 6b 64 69 72 70 72 6f 67 20 24      $mkdirprog $
24a0: 6d 6b 64 69 72 5f 6d 6f 64 65 20 22 24 74 6d 70  mkdir_mode "$tmp
24b0: 64 69 72 22 20 26 26 0a 09 20 20 20 20 65 78 65  dir" &&..    exe
24c0: 63 20 24 6d 6b 64 69 72 70 72 6f 67 20 24 6d 6b  c $mkdirprog $mk
24d0: 64 69 72 5f 6d 6f 64 65 20 2d 70 20 2d 2d 20 22  dir_mode -p -- "
24e0: 24 74 6d 70 64 69 72 2f 61 2f 62 22 29 20 3e 2f  $tmpdir/a/b") >/
24f0: 64 65 76 2f 6e 75 6c 6c 20 32 3e 26 31 0a 09 74  dev/null 2>&1..t
2500: 68 65 6e 0a 09 20 20 69 66 20 74 65 73 74 20 2d  hen..  if test -
2510: 7a 20 22 24 64 69 72 5f 61 72 67 22 20 7c 7c 20  z "$dir_arg" || 
2520: 7b 0a 09 20 20 20 20 20 20 20 23 20 43 68 65 63  {..       # Chec
2530: 6b 20 66 6f 72 20 50 4f 53 49 58 20 69 6e 63 6f  k for POSIX inco
2540: 6d 70 61 74 69 62 69 6c 69 74 69 65 73 20 77 69  mpatibilities wi
2550: 74 68 20 2d 6d 2e 0a 09 20 20 20 20 20 20 20 23  th -m...       #
2560: 20 48 50 2d 55 58 20 31 31 2e 32 33 20 61 6e 64   HP-UX 11.23 and
2570: 20 49 52 49 58 20 36 2e 35 20 6d 6b 64 69 72 20   IRIX 6.5 mkdir 
2580: 2d 6d 20 2d 70 20 73 65 74 73 20 67 72 6f 75 70  -m -p sets group
2590: 2d 20 6f 72 0a 09 20 20 20 20 20 20 20 23 20 6f  - or..       # o
25a0: 74 68 65 72 2d 77 72 69 74 61 62 6c 65 20 62 69  ther-writable bi
25b0: 74 20 6f 66 20 70 61 72 65 6e 74 20 64 69 72 65  t of parent dire
25c0: 63 74 6f 72 79 20 77 68 65 6e 20 69 74 20 73 68  ctory when it sh
25d0: 6f 75 6c 64 6e 27 74 2e 0a 09 20 20 20 20 20 20  ouldn't...      
25e0: 20 23 20 46 72 65 65 42 53 44 20 36 2e 31 20 6d   # FreeBSD 6.1 m
25f0: 6b 64 69 72 20 2d 6d 20 2d 70 20 73 65 74 73 20  kdir -m -p sets 
2600: 6d 6f 64 65 20 6f 66 20 65 78 69 73 74 69 6e 67  mode of existing
2610: 20 64 69 72 65 63 74 6f 72 79 2e 0a 09 20 20 20   directory...   
2620: 20 20 20 20 74 65 73 74 5f 74 6d 70 64 69 72 3d      test_tmpdir=
2630: 22 24 74 6d 70 64 69 72 2f 61 22 0a 09 20 20 20  "$tmpdir/a"..   
2640: 20 20 20 20 6c 73 5f 6c 64 5f 74 6d 70 64 69 72      ls_ld_tmpdir
2650: 3d 60 6c 73 20 2d 6c 64 20 22 24 74 65 73 74 5f  =`ls -ld "$test_
2660: 74 6d 70 64 69 72 22 60 0a 09 20 20 20 20 20 20  tmpdir"`..      
2670: 20 63 61 73 65 20 24 6c 73 5f 6c 64 5f 74 6d 70   case $ls_ld_tmp
2680: 64 69 72 20 69 6e 0a 09 09 20 64 3f 3f 3f 3f 2d  dir in... d????-
2690: 3f 72 2d 2a 29 20 64 69 66 66 65 72 65 6e 74 5f  ?r-*) different_
26a0: 6d 6f 64 65 3d 37 30 30 3b 3b 0a 09 09 20 64 3f  mode=700;;... d?
26b0: 3f 3f 3f 2d 3f 2d 2d 2a 29 20 64 69 66 66 65 72  ???-?--*) differ
26c0: 65 6e 74 5f 6d 6f 64 65 3d 37 35 35 3b 3b 0a 09  ent_mode=755;;..
26d0: 09 20 2a 29 20 66 61 6c 73 65 3b 3b 0a 09 20 20  . *) false;;..  
26e0: 20 20 20 20 20 65 73 61 63 20 26 26 0a 09 20 20       esac &&..  
26f0: 20 20 20 20 20 24 6d 6b 64 69 72 70 72 6f 67 20       $mkdirprog 
2700: 2d 6d 24 64 69 66 66 65 72 65 6e 74 5f 6d 6f 64  -m$different_mod
2710: 65 20 2d 70 20 2d 2d 20 22 24 74 65 73 74 5f 74  e -p -- "$test_t
2720: 6d 70 64 69 72 22 20 26 26 20 7b 0a 09 09 20 6c  mpdir" && {... l
2730: 73 5f 6c 64 5f 74 6d 70 64 69 72 5f 31 3d 60 6c  s_ld_tmpdir_1=`l
2740: 73 20 2d 6c 64 20 22 24 74 65 73 74 5f 74 6d 70  s -ld "$test_tmp
2750: 64 69 72 22 60 0a 09 09 20 74 65 73 74 20 22 24  dir"`... test "$
2760: 6c 73 5f 6c 64 5f 74 6d 70 64 69 72 22 20 3d 20  ls_ld_tmpdir" = 
2770: 22 24 6c 73 5f 6c 64 5f 74 6d 70 64 69 72 5f 31  "$ls_ld_tmpdir_1
2780: 22 0a 09 20 20 20 20 20 20 20 7d 0a 09 20 20 20  "..       }..   
2790: 20 20 7d 0a 09 20 20 74 68 65 6e 20 70 6f 73 69    }..  then posi
27a0: 78 5f 6d 6b 64 69 72 3d 3a 0a 09 20 20 66 69 0a  x_mkdir=:..  fi.
27b0: 09 20 20 72 6d 64 69 72 20 22 24 74 6d 70 64 69  .  rmdir "$tmpdi
27c0: 72 2f 61 2f 62 22 20 22 24 74 6d 70 64 69 72 2f  r/a/b" "$tmpdir/
27d0: 61 22 20 22 24 74 6d 70 64 69 72 22 0a 09 65 6c  a" "$tmpdir"..el
27e0: 73 65 0a 09 20 20 23 20 52 65 6d 6f 76 65 20 61  se..  # Remove a
27f0: 6e 79 20 64 69 72 73 20 6c 65 66 74 20 62 65 68  ny dirs left beh
2800: 69 6e 64 20 62 79 20 61 6e 63 69 65 6e 74 20 6d  ind by ancient m
2810: 6b 64 69 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74  kdir implementat
2820: 69 6f 6e 73 2e 0a 09 20 20 72 6d 64 69 72 20 2e  ions...  rmdir .
2830: 2f 24 6d 6b 64 69 72 5f 6d 6f 64 65 20 2e 2f 2d  /$mkdir_mode ./-
2840: 70 20 2e 2f 2d 2d 20 22 24 74 6d 70 64 69 72 22  p ./-- "$tmpdir"
2850: 20 32 3e 2f 64 65 76 2f 6e 75 6c 6c 0a 09 66 69   2>/dev/null..fi
2860: 0a 09 74 72 61 70 20 27 27 20 30 3b 3b 0a 20 20  ..trap '' 0;;.  
2870: 20 20 65 73 61 63 0a 0a 20 20 20 20 69 66 0a 20    esac..    if. 
2880: 20 20 20 20 20 24 70 6f 73 69 78 5f 6d 6b 64 69       $posix_mkdi
2890: 72 20 26 26 20 28 0a 20 20 20 20 20 20 20 20 75  r && (.        u
28a0: 6d 61 73 6b 20 24 6d 6b 64 69 72 5f 75 6d 61 73  mask $mkdir_umas
28b0: 6b 20 26 26 0a 20 20 20 20 20 20 20 20 24 64 6f  k &&.        $do
28c0: 69 74 5f 65 78 65 63 20 24 6d 6b 64 69 72 70 72  it_exec $mkdirpr
28d0: 6f 67 20 24 6d 6b 64 69 72 5f 6d 6f 64 65 20 2d  og $mkdir_mode -
28e0: 70 20 2d 2d 20 22 24 64 73 74 64 69 72 22 0a 20  p -- "$dstdir". 
28f0: 20 20 20 20 20 29 0a 20 20 20 20 74 68 65 6e 20       ).    then 
2900: 3a 0a 20 20 20 20 65 6c 73 65 0a 0a 20 20 20 20  :.    else..    
2910: 20 20 23 20 6d 6b 64 69 72 20 64 6f 65 73 20 6e    # mkdir does n
2920: 6f 74 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 50 4f  ot conform to PO
2930: 53 49 58 2c 0a 20 20 20 20 20 20 23 20 6f 72 20  SIX,.      # or 
2940: 69 74 20 66 61 69 6c 65 64 20 70 6f 73 73 69 62  it failed possib
2950: 6c 79 20 64 75 65 20 74 6f 20 61 20 72 61 63 65  ly due to a race
2960: 20 63 6f 6e 64 69 74 69 6f 6e 2e 20 20 43 72 65   condition.  Cre
2970: 61 74 65 20 74 68 65 0a 20 20 20 20 20 20 23 20  ate the.      # 
2980: 64 69 72 65 63 74 6f 72 79 20 74 68 65 20 73 6c  directory the sl
2990: 6f 77 20 77 61 79 2c 20 73 74 65 70 20 62 79 20  ow way, step by 
29a0: 73 74 65 70 2c 20 63 68 65 63 6b 69 6e 67 20 66  step, checking f
29b0: 6f 72 20 72 61 63 65 73 20 61 73 20 77 65 20 67  or races as we g
29c0: 6f 2e 0a 0a 20 20 20 20 20 20 63 61 73 65 20 24  o...      case $
29d0: 64 73 74 64 69 72 20 69 6e 0a 20 20 20 20 20 20  dstdir in.      
29e0: 20 20 2f 2a 29 20 70 72 65 66 69 78 3d 27 2f 27    /*) prefix='/'
29f0: 3b 3b 0a 20 20 20 20 20 20 20 20 5b 2d 3d 5c 28  ;;.        [-=\(
2a00: 5c 29 21 5d 2a 29 20 70 72 65 66 69 78 3d 27 2e  \)!]*) prefix='.
2a10: 2f 27 3b 3b 0a 20 20 20 20 20 20 20 20 2a 29 20  /';;.        *) 
2a20: 20 70 72 65 66 69 78 3d 27 27 3b 3b 0a 20 20 20   prefix='';;.   
2a30: 20 20 20 65 73 61 63 0a 0a 20 20 20 20 20 20 6f     esac..      o
2a40: 49 46 53 3d 24 49 46 53 0a 20 20 20 20 20 20 49  IFS=$IFS.      I
2a50: 46 53 3d 2f 0a 20 20 20 20 20 20 73 65 74 20 2d  FS=/.      set -
2a60: 66 0a 20 20 20 20 20 20 73 65 74 20 66 6e 6f 72  f.      set fnor
2a70: 64 20 24 64 73 74 64 69 72 0a 20 20 20 20 20 20  d $dstdir.      
2a80: 73 68 69 66 74 0a 20 20 20 20 20 20 73 65 74 20  shift.      set 
2a90: 2b 66 0a 20 20 20 20 20 20 49 46 53 3d 24 6f 49  +f.      IFS=$oI
2aa0: 46 53 0a 0a 20 20 20 20 20 20 70 72 65 66 69 78  FS..      prefix
2ab0: 65 73 3d 0a 0a 20 20 20 20 20 20 66 6f 72 20 64  es=..      for d
2ac0: 0a 20 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20  .      do.      
2ad0: 20 20 74 65 73 74 20 58 22 24 64 22 20 3d 20 58    test X"$d" = X
2ae0: 20 26 26 20 63 6f 6e 74 69 6e 75 65 0a 0a 20 20   && continue..  
2af0: 20 20 20 20 20 20 70 72 65 66 69 78 3d 24 70 72        prefix=$pr
2b00: 65 66 69 78 24 64 0a 20 20 20 20 20 20 20 20 69  efix$d.        i
2b10: 66 20 74 65 73 74 20 2d 64 20 22 24 70 72 65 66  f test -d "$pref
2b20: 69 78 22 3b 20 74 68 65 6e 0a 20 20 20 20 20 20  ix"; then.      
2b30: 20 20 20 20 70 72 65 66 69 78 65 73 3d 0a 20 20      prefixes=.  
2b40: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
2b50: 20 20 20 20 20 69 66 20 24 70 6f 73 69 78 5f 6d       if $posix_m
2b60: 6b 64 69 72 3b 20 74 68 65 6e 0a 20 20 20 20 20  kdir; then.     
2b70: 20 20 20 20 20 20 20 28 75 6d 61 73 6b 20 24 6d         (umask $m
2b80: 6b 64 69 72 5f 75 6d 61 73 6b 20 26 26 0a 20 20  kdir_umask &&.  
2b90: 20 20 20 20 20 20 20 20 20 20 20 24 64 6f 69 74             $doit
2ba0: 5f 65 78 65 63 20 24 6d 6b 64 69 72 70 72 6f 67  _exec $mkdirprog
2bb0: 20 24 6d 6b 64 69 72 5f 6d 6f 64 65 20 2d 70 20   $mkdir_mode -p 
2bc0: 2d 2d 20 22 24 64 73 74 64 69 72 22 29 20 26 26  -- "$dstdir") &&
2bd0: 20 62 72 65 61 6b 0a 20 20 20 20 20 20 20 20 20   break.         
2be0: 20 20 20 23 20 44 6f 6e 27 74 20 66 61 69 6c 20     # Don't fail 
2bf0: 69 66 20 74 77 6f 20 69 6e 73 74 61 6e 63 65 73  if two instances
2c00: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 63 6f 6e   are running con
2c10: 63 75 72 72 65 6e 74 6c 79 2e 0a 20 20 20 20 20  currently..     
2c20: 20 20 20 20 20 20 20 74 65 73 74 20 2d 64 20 22         test -d "
2c30: 24 70 72 65 66 69 78 22 20 7c 7c 20 65 78 69 74  $prefix" || exit
2c40: 20 31 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73   1.          els
2c50: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  e.            ca
2c60: 73 65 20 24 70 72 65 66 69 78 20 69 6e 0a 20 20  se $prefix in.  
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 2a 5c 27 2a              *\'*
2c80: 29 20 71 70 72 65 66 69 78 3d 60 65 63 68 6f 20  ) qprefix=`echo 
2c90: 22 24 70 72 65 66 69 78 22 20 7c 20 73 65 64 20  "$prefix" | sed 
2ca0: 22 73 2f 27 2f 27 5c 5c 5c 5c 5c 5c 5c 5c 27 27  "s/'/'\\\\\\\\''
2cb0: 2f 67 22 60 3b 3b 0a 20 20 20 20 20 20 20 20 20  /g"`;;.         
2cc0: 20 20 20 20 20 2a 29 20 71 70 72 65 66 69 78 3d       *) qprefix=
2cd0: 24 70 72 65 66 69 78 3b 3b 0a 20 20 20 20 20 20  $prefix;;.      
2ce0: 20 20 20 20 20 20 65 73 61 63 0a 20 20 20 20 20        esac.     
2cf0: 20 20 20 20 20 20 20 70 72 65 66 69 78 65 73 3d         prefixes=
2d00: 22 24 70 72 65 66 69 78 65 73 20 27 24 71 70 72  "$prefixes '$qpr
2d10: 65 66 69 78 27 22 0a 20 20 20 20 20 20 20 20 20  efix'".         
2d20: 20 66 69 0a 20 20 20 20 20 20 20 20 66 69 0a 20   fi.        fi. 
2d30: 20 20 20 20 20 20 20 70 72 65 66 69 78 3d 24 70         prefix=$p
2d40: 72 65 66 69 78 2f 0a 20 20 20 20 20 20 64 6f 6e  refix/.      don
2d50: 65 0a 0a 20 20 20 20 20 20 69 66 20 74 65 73 74  e..      if test
2d60: 20 2d 6e 20 22 24 70 72 65 66 69 78 65 73 22 3b   -n "$prefixes";
2d70: 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 23 20   then.        # 
2d80: 44 6f 6e 27 74 20 66 61 69 6c 20 69 66 20 74 77  Don't fail if tw
2d90: 6f 20 69 6e 73 74 61 6e 63 65 73 20 61 72 65 20  o instances are 
2da0: 72 75 6e 6e 69 6e 67 20 63 6f 6e 63 75 72 72 65  running concurre
2db0: 6e 74 6c 79 2e 0a 20 20 20 20 20 20 20 20 28 75  ntly..        (u
2dc0: 6d 61 73 6b 20 24 6d 6b 64 69 72 5f 75 6d 61 73  mask $mkdir_umas
2dd0: 6b 20 26 26 0a 20 20 20 20 20 20 20 20 20 65 76  k &&.         ev
2de0: 61 6c 20 22 5c 24 64 6f 69 74 5f 65 78 65 63 20  al "\$doit_exec 
2df0: 5c 24 6d 6b 64 69 72 70 72 6f 67 20 24 70 72 65  \$mkdirprog $pre
2e00: 66 69 78 65 73 22 29 20 7c 7c 0a 20 20 20 20 20  fixes") ||.     
2e10: 20 20 20 20 20 74 65 73 74 20 2d 64 20 22 24 64       test -d "$d
2e20: 73 74 64 69 72 22 20 7c 7c 20 65 78 69 74 20 31  stdir" || exit 1
2e30: 0a 20 20 20 20 20 20 20 20 6f 62 73 6f 6c 65 74  .        obsolet
2e40: 65 5f 6d 6b 64 69 72 5f 75 73 65 64 3d 74 72 75  e_mkdir_used=tru
2e50: 65 0a 20 20 20 20 20 20 66 69 0a 20 20 20 20 66  e.      fi.    f
2e60: 69 0a 20 20 66 69 0a 0a 20 20 69 66 20 74 65 73  i.  fi..  if tes
2e70: 74 20 2d 6e 20 22 24 64 69 72 5f 61 72 67 22 3b  t -n "$dir_arg";
2e80: 20 74 68 65 6e 0a 20 20 20 20 7b 20 74 65 73 74   then.    { test
2e90: 20 2d 7a 20 22 24 63 68 6f 77 6e 63 6d 64 22 20   -z "$chowncmd" 
2ea0: 7c 7c 20 24 64 6f 69 74 20 24 63 68 6f 77 6e 63  || $doit $chownc
2eb0: 6d 64 20 22 24 64 73 74 22 3b 20 7d 20 26 26 0a  md "$dst"; } &&.
2ec0: 20 20 20 20 7b 20 74 65 73 74 20 2d 7a 20 22 24      { test -z "$
2ed0: 63 68 67 72 70 63 6d 64 22 20 7c 7c 20 24 64 6f  chgrpcmd" || $do
2ee0: 69 74 20 24 63 68 67 72 70 63 6d 64 20 22 24 64  it $chgrpcmd "$d
2ef0: 73 74 22 3b 20 7d 20 26 26 0a 20 20 20 20 7b 20  st"; } &&.    { 
2f00: 74 65 73 74 20 22 24 6f 62 73 6f 6c 65 74 65 5f  test "$obsolete_
2f10: 6d 6b 64 69 72 5f 75 73 65 64 24 63 68 6f 77 6e  mkdir_used$chown
2f20: 63 6d 64 24 63 68 67 72 70 63 6d 64 22 20 3d 20  cmd$chgrpcmd" = 
2f30: 66 61 6c 73 65 20 7c 7c 0a 20 20 20 20 20 20 74  false ||.      t
2f40: 65 73 74 20 2d 7a 20 22 24 63 68 6d 6f 64 63 6d  est -z "$chmodcm
2f50: 64 22 20 7c 7c 20 24 64 6f 69 74 20 24 63 68 6d  d" || $doit $chm
2f60: 6f 64 63 6d 64 20 24 6d 6f 64 65 20 22 24 64 73  odcmd $mode "$ds
2f70: 74 22 3b 20 7d 20 7c 7c 20 65 78 69 74 20 31 0a  t"; } || exit 1.
2f80: 20 20 65 6c 73 65 0a 0a 20 20 20 20 23 20 4d 61    else..    # Ma
2f90: 6b 65 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 74  ke a couple of t
2fa0: 65 6d 70 20 66 69 6c 65 20 6e 61 6d 65 73 20 69  emp file names i
2fb0: 6e 20 74 68 65 20 70 72 6f 70 65 72 20 64 69 72  n the proper dir
2fc0: 65 63 74 6f 72 79 2e 0a 20 20 20 20 64 73 74 74  ectory..    dstt
2fd0: 6d 70 3d 24 7b 64 73 74 64 69 72 73 6c 61 73 68  mp=${dstdirslash
2fe0: 7d 5f 69 6e 73 74 2e 24 24 5f 0a 20 20 20 20 72  }_inst.$$_.    r
2ff0: 6d 74 6d 70 3d 24 7b 64 73 74 64 69 72 73 6c 61  mtmp=${dstdirsla
3000: 73 68 7d 5f 72 6d 2e 24 24 5f 0a 0a 20 20 20 20  sh}_rm.$$_..    
3010: 23 20 54 72 61 70 20 74 6f 20 63 6c 65 61 6e 20  # Trap to clean 
3020: 75 70 20 74 68 6f 73 65 20 74 65 6d 70 20 66 69  up those temp fi
3030: 6c 65 73 20 61 74 20 65 78 69 74 2e 0a 20 20 20  les at exit..   
3040: 20 74 72 61 70 20 27 72 65 74 3d 24 3f 3b 20 72   trap 'ret=$?; r
3050: 6d 20 2d 66 20 22 24 64 73 74 74 6d 70 22 20 22  m -f "$dsttmp" "
3060: 24 72 6d 74 6d 70 22 20 26 26 20 65 78 69 74 20  $rmtmp" && exit 
3070: 24 72 65 74 27 20 30 0a 0a 20 20 20 20 23 20 43  $ret' 0..    # C
3080: 6f 70 79 20 74 68 65 20 66 69 6c 65 20 6e 61 6d  opy the file nam
3090: 65 20 74 6f 20 74 68 65 20 74 65 6d 70 20 6e 61  e to the temp na
30a0: 6d 65 2e 0a 20 20 20 20 28 75 6d 61 73 6b 20 24  me..    (umask $
30b0: 63 70 5f 75 6d 61 73 6b 20 26 26 0a 20 20 20 20  cp_umask &&.    
30c0: 20 7b 20 74 65 73 74 20 2d 7a 20 22 24 73 74 72   { test -z "$str
30d0: 69 70 63 6d 64 22 20 7c 7c 20 7b 0a 09 20 23 20  ipcmd" || {.. # 
30e0: 43 72 65 61 74 65 20 24 64 73 74 74 6d 70 20 72  Create $dsttmp r
30f0: 65 61 64 2d 77 72 69 74 65 20 73 6f 20 74 68 61  ead-write so tha
3100: 74 20 63 70 20 64 6f 65 73 6e 27 74 20 63 72 65  t cp doesn't cre
3110: 61 74 65 20 69 74 20 72 65 61 64 2d 6f 6e 6c 79  ate it read-only
3120: 2c 0a 09 20 23 20 77 68 69 63 68 20 77 6f 75 6c  ,.. # which woul
3130: 64 20 63 61 75 73 65 20 73 74 72 69 70 20 74 6f  d cause strip to
3140: 20 66 61 69 6c 2e 0a 09 20 69 66 20 74 65 73 74   fail... if test
3150: 20 2d 7a 20 22 24 64 6f 69 74 22 3b 20 74 68 65   -z "$doit"; the
3160: 6e 0a 09 20 20 20 3a 20 3e 22 24 64 73 74 74 6d  n..   : >"$dsttm
3170: 70 22 20 23 20 4e 6f 20 6e 65 65 64 20 74 6f 20  p" # No need to 
3180: 66 6f 72 6b 2d 65 78 65 63 20 27 74 6f 75 63 68  fork-exec 'touch
3190: 27 2e 0a 09 20 65 6c 73 65 0a 09 20 20 20 24 64  '... else..   $d
31a0: 6f 69 74 20 74 6f 75 63 68 20 22 24 64 73 74 74  oit touch "$dstt
31b0: 6d 70 22 0a 09 20 66 69 0a 20 20 20 20 20 20 20  mp".. fi.       
31c0: 7d 0a 20 20 20 20 20 7d 20 26 26 0a 20 20 20 20  }.     } &&.    
31d0: 20 24 64 6f 69 74 5f 65 78 65 63 20 24 63 70 70   $doit_exec $cpp
31e0: 72 6f 67 20 22 24 73 72 63 22 20 22 24 64 73 74  rog "$src" "$dst
31f0: 74 6d 70 22 29 20 26 26 0a 0a 20 20 20 20 23 20  tmp") &&..    # 
3200: 61 6e 64 20 73 65 74 20 61 6e 79 20 6f 70 74 69  and set any opti
3210: 6f 6e 73 3b 20 64 6f 20 63 68 6d 6f 64 20 6c 61  ons; do chmod la
3220: 73 74 20 74 6f 20 70 72 65 73 65 72 76 65 20 73  st to preserve s
3230: 65 74 75 69 64 20 62 69 74 73 2e 0a 20 20 20 20  etuid bits..    
3240: 23 0a 20 20 20 20 23 20 49 66 20 61 6e 79 20 6f  #.    # If any o
3250: 66 20 74 68 65 73 65 20 66 61 69 6c 2c 20 77 65  f these fail, we
3260: 20 61 62 6f 72 74 20 74 68 65 20 77 68 6f 6c 65   abort the whole
3270: 20 74 68 69 6e 67 2e 20 20 49 66 20 77 65 20 77   thing.  If we w
3280: 61 6e 74 20 74 6f 0a 20 20 20 20 23 20 69 67 6e  ant to.    # ign
3290: 6f 72 65 20 65 72 72 6f 72 73 20 66 72 6f 6d 20  ore errors from 
32a0: 61 6e 79 20 6f 66 20 74 68 65 73 65 2c 20 6a 75  any of these, ju
32b0: 73 74 20 6d 61 6b 65 20 73 75 72 65 20 6e 6f 74  st make sure not
32c0: 20 74 6f 20 69 67 6e 6f 72 65 0a 20 20 20 20 23   to ignore.    #
32d0: 20 65 72 72 6f 72 73 20 66 72 6f 6d 20 74 68 65   errors from the
32e0: 20 61 62 6f 76 65 20 22 24 64 6f 69 74 20 24 63   above "$doit $c
32f0: 70 70 72 6f 67 20 24 73 72 63 20 24 64 73 74 74  pprog $src $dstt
3300: 6d 70 22 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20  mp" command..   
3310: 20 23 0a 20 20 20 20 7b 20 74 65 73 74 20 2d 7a   #.    { test -z
3320: 20 22 24 63 68 6f 77 6e 63 6d 64 22 20 7c 7c 20   "$chowncmd" || 
3330: 24 64 6f 69 74 20 24 63 68 6f 77 6e 63 6d 64 20  $doit $chowncmd 
3340: 22 24 64 73 74 74 6d 70 22 3b 20 7d 20 26 26 0a  "$dsttmp"; } &&.
3350: 20 20 20 20 7b 20 74 65 73 74 20 2d 7a 20 22 24      { test -z "$
3360: 63 68 67 72 70 63 6d 64 22 20 7c 7c 20 24 64 6f  chgrpcmd" || $do
3370: 69 74 20 24 63 68 67 72 70 63 6d 64 20 22 24 64  it $chgrpcmd "$d
3380: 73 74 74 6d 70 22 3b 20 7d 20 26 26 0a 20 20 20  sttmp"; } &&.   
3390: 20 7b 20 74 65 73 74 20 2d 7a 20 22 24 73 74 72   { test -z "$str
33a0: 69 70 63 6d 64 22 20 7c 7c 20 24 64 6f 69 74 20  ipcmd" || $doit 
33b0: 24 73 74 72 69 70 63 6d 64 20 22 24 64 73 74 74  $stripcmd "$dstt
33c0: 6d 70 22 3b 20 7d 20 26 26 0a 20 20 20 20 7b 20  mp"; } &&.    { 
33d0: 74 65 73 74 20 2d 7a 20 22 24 63 68 6d 6f 64 63  test -z "$chmodc
33e0: 6d 64 22 20 7c 7c 20 24 64 6f 69 74 20 24 63 68  md" || $doit $ch
33f0: 6d 6f 64 63 6d 64 20 24 6d 6f 64 65 20 22 24 64  modcmd $mode "$d
3400: 73 74 74 6d 70 22 3b 20 7d 20 26 26 0a 0a 20 20  sttmp"; } &&..  
3410: 20 20 23 20 49 66 20 2d 43 2c 20 64 6f 6e 27 74    # If -C, don't
3420: 20 62 6f 74 68 65 72 20 74 6f 20 63 6f 70 79 20   bother to copy 
3430: 69 66 20 69 74 20 77 6f 75 6c 64 6e 27 74 20 63  if it wouldn't c
3440: 68 61 6e 67 65 20 74 68 65 20 66 69 6c 65 2e 0a  hange the file..
3450: 20 20 20 20 69 66 20 24 63 6f 70 79 5f 6f 6e 5f      if $copy_on_
3460: 63 68 61 6e 67 65 20 26 26 0a 20 20 20 20 20 20  change &&.      
3470: 20 6f 6c 64 3d 60 4c 43 5f 41 4c 4c 3d 43 20 6c   old=`LC_ALL=C l
3480: 73 20 2d 64 6c 4c 20 22 24 64 73 74 22 20 20 20  s -dlL "$dst"   
3490: 20 20 32 3e 2f 64 65 76 2f 6e 75 6c 6c 60 20 26    2>/dev/null` &
34a0: 26 0a 20 20 20 20 20 20 20 6e 65 77 3d 60 4c 43  &.       new=`LC
34b0: 5f 41 4c 4c 3d 43 20 6c 73 20 2d 64 6c 4c 20 22  _ALL=C ls -dlL "
34c0: 24 64 73 74 74 6d 70 22 20 20 32 3e 2f 64 65 76  $dsttmp"  2>/dev
34d0: 2f 6e 75 6c 6c 60 20 26 26 0a 20 20 20 20 20 20  /null` &&.      
34e0: 20 73 65 74 20 2d 66 20 26 26 0a 20 20 20 20 20   set -f &&.     
34f0: 20 20 73 65 74 20 58 20 24 6f 6c 64 20 26 26 20    set X $old && 
3500: 6f 6c 64 3d 3a 24 32 3a 24 34 3a 24 35 3a 24 36  old=:$2:$4:$5:$6
3510: 20 26 26 0a 20 20 20 20 20 20 20 73 65 74 20 58   &&.       set X
3520: 20 24 6e 65 77 20 26 26 20 6e 65 77 3d 3a 24 32   $new && new=:$2
3530: 3a 24 34 3a 24 35 3a 24 36 20 26 26 0a 20 20 20  :$4:$5:$6 &&.   
3540: 20 20 20 20 73 65 74 20 2b 66 20 26 26 0a 20 20      set +f &&.  
3550: 20 20 20 20 20 74 65 73 74 20 22 24 6f 6c 64 22       test "$old"
3560: 20 3d 20 22 24 6e 65 77 22 20 26 26 0a 20 20 20   = "$new" &&.   
3570: 20 20 20 20 24 63 6d 70 70 72 6f 67 20 22 24 64      $cmpprog "$d
3580: 73 74 22 20 22 24 64 73 74 74 6d 70 22 20 3e 2f  st" "$dsttmp" >/
3590: 64 65 76 2f 6e 75 6c 6c 20 32 3e 26 31 0a 20 20  dev/null 2>&1.  
35a0: 20 20 74 68 65 6e 0a 20 20 20 20 20 20 72 6d 20    then.      rm 
35b0: 2d 66 20 22 24 64 73 74 74 6d 70 22 0a 20 20 20  -f "$dsttmp".   
35c0: 20 65 6c 73 65 0a 20 20 20 20 20 20 23 20 49 66   else.      # If
35d0: 20 24 62 61 63 6b 75 70 73 75 66 66 69 78 20 69   $backupsuffix i
35e0: 73 20 73 65 74 2c 20 61 6e 64 20 74 68 65 20 66  s set, and the f
35f0: 69 6c 65 20 62 65 69 6e 67 20 69 6e 73 74 61 6c  ile being instal
3600: 6c 65 64 0a 20 20 20 20 20 20 23 20 61 6c 72 65  led.      # alre
3610: 61 64 79 20 65 78 69 73 74 73 2c 20 61 74 74 65  ady exists, atte
3620: 6d 70 74 20 61 20 62 61 63 6b 75 70 2e 20 20 44  mpt a backup.  D
3630: 6f 6e 27 74 20 77 6f 72 72 79 20 69 66 20 69 74  on't worry if it
3640: 20 66 61 69 6c 73 2c 0a 20 20 20 20 20 20 23 20   fails,.      # 
3650: 65 2e 67 2e 2c 20 69 66 20 6d 76 20 64 6f 65 73  e.g., if mv does
3660: 6e 27 74 20 73 75 70 70 6f 72 74 20 2d 66 2e 0a  n't support -f..
3670: 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2d 6e        if test -n
3680: 20 22 24 62 61 63 6b 75 70 73 75 66 66 69 78 22   "$backupsuffix"
3690: 20 26 26 20 74 65 73 74 20 2d 66 20 22 24 64 73   && test -f "$ds
36a0: 74 22 3b 20 74 68 65 6e 0a 20 20 20 20 20 20 20  t"; then.       
36b0: 20 24 64 6f 69 74 20 24 6d 76 63 6d 64 20 2d 66   $doit $mvcmd -f
36c0: 20 22 24 64 73 74 22 20 22 24 64 73 74 24 62 61   "$dst" "$dst$ba
36d0: 63 6b 75 70 73 75 66 66 69 78 22 20 32 3e 2f 64  ckupsuffix" 2>/d
36e0: 65 76 2f 6e 75 6c 6c 0a 20 20 20 20 20 20 66 69  ev/null.      fi
36f0: 0a 0a 20 20 20 20 20 20 23 20 52 65 6e 61 6d 65  ..      # Rename
3700: 20 74 68 65 20 66 69 6c 65 20 74 6f 20 74 68 65   the file to the
3710: 20 72 65 61 6c 20 64 65 73 74 69 6e 61 74 69 6f   real destinatio
3720: 6e 2e 0a 20 20 20 20 20 20 24 64 6f 69 74 20 24  n..      $doit $
3730: 6d 76 63 6d 64 20 2d 66 20 22 24 64 73 74 74 6d  mvcmd -f "$dsttm
3740: 70 22 20 22 24 64 73 74 22 20 32 3e 2f 64 65 76  p" "$dst" 2>/dev
3750: 2f 6e 75 6c 6c 20 7c 7c 0a 0a 20 20 20 20 20 20  /null ||..      
3760: 23 20 54 68 65 20 72 65 6e 61 6d 65 20 66 61 69  # The rename fai
3770: 6c 65 64 2c 20 70 65 72 68 61 70 73 20 62 65 63  led, perhaps bec
3780: 61 75 73 65 20 6d 76 20 63 61 6e 27 74 20 72 65  ause mv can't re
3790: 6e 61 6d 65 20 73 6f 6d 65 74 68 69 6e 67 20 65  name something e
37a0: 6c 73 65 0a 20 20 20 20 20 20 23 20 74 6f 20 69  lse.      # to i
37b0: 74 73 65 6c 66 2c 20 6f 72 20 70 65 72 68 61 70  tself, or perhap
37c0: 73 20 62 65 63 61 75 73 65 20 6d 76 20 69 73 20  s because mv is 
37d0: 73 6f 20 61 6e 63 69 65 6e 74 20 74 68 61 74 20  so ancient that 
37e0: 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20  it does not.    
37f0: 20 20 23 20 73 75 70 70 6f 72 74 20 2d 66 2e 0a    # support -f..
3800: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
3810: 23 20 4e 6f 77 20 72 65 6d 6f 76 65 20 6f 72 20  # Now remove or 
3820: 6d 6f 76 65 20 61 73 69 64 65 20 61 6e 79 20 6f  move aside any o
3830: 6c 64 20 66 69 6c 65 20 61 74 20 64 65 73 74 69  ld file at desti
3840: 6e 61 74 69 6f 6e 20 6c 6f 63 61 74 69 6f 6e 2e  nation location.
3850: 0a 20 20 20 20 20 20 20 20 23 20 57 65 20 74 72  .        # We tr
3860: 79 20 74 68 69 73 20 74 77 6f 20 77 61 79 73 20  y this two ways 
3870: 73 69 6e 63 65 20 72 6d 20 63 61 6e 27 74 20 75  since rm can't u
3880: 6e 6c 69 6e 6b 20 69 74 73 65 6c 66 20 6f 6e 20  nlink itself on 
3890: 73 6f 6d 65 0a 20 20 20 20 20 20 20 20 23 20 73  some.        # s
38a0: 79 73 74 65 6d 73 20 61 6e 64 20 74 68 65 20 64  ystems and the d
38b0: 65 73 74 69 6e 61 74 69 6f 6e 20 66 69 6c 65 20  estination file 
38c0: 6d 69 67 68 74 20 62 65 20 62 75 73 79 20 66 6f  might be busy fo
38d0: 72 20 6f 74 68 65 72 0a 20 20 20 20 20 20 20 20  r other.        
38e0: 23 20 72 65 61 73 6f 6e 73 2e 20 20 49 6e 20 74  # reasons.  In t
38f0: 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 66 69  his case, the fi
3900: 6e 61 6c 20 63 6c 65 61 6e 75 70 20 6d 69 67 68  nal cleanup migh
3910: 74 20 66 61 69 6c 20 62 75 74 20 74 68 65 20 6e  t fail but the n
3920: 65 77 0a 20 20 20 20 20 20 20 20 23 20 66 69 6c  ew.        # fil
3930: 65 20 73 68 6f 75 6c 64 20 73 74 69 6c 6c 20 69  e should still i
3940: 6e 73 74 61 6c 6c 20 73 75 63 63 65 73 73 66 75  nstall successfu
3950: 6c 6c 79 2e 0a 20 20 20 20 20 20 20 20 7b 0a 20  lly..        {. 
3960: 20 20 20 20 20 20 20 20 20 74 65 73 74 20 21 20           test ! 
3970: 2d 66 20 22 24 64 73 74 22 20 7c 7c 0a 20 20 20  -f "$dst" ||.   
3980: 20 20 20 20 20 20 20 24 64 6f 69 74 20 24 72 6d         $doit $rm
3990: 63 6d 64 20 22 24 64 73 74 22 20 32 3e 2f 64 65  cmd "$dst" 2>/de
39a0: 76 2f 6e 75 6c 6c 20 7c 7c 0a 20 20 20 20 20 20  v/null ||.      
39b0: 20 20 20 20 7b 20 24 64 6f 69 74 20 24 6d 76 63      { $doit $mvc
39c0: 6d 64 20 2d 66 20 22 24 64 73 74 22 20 22 24 72  md -f "$dst" "$r
39d0: 6d 74 6d 70 22 20 32 3e 2f 64 65 76 2f 6e 75 6c  mtmp" 2>/dev/nul
39e0: 6c 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20  l &&.           
39f0: 20 7b 20 24 64 6f 69 74 20 24 72 6d 63 6d 64 20   { $doit $rmcmd 
3a00: 22 24 72 6d 74 6d 70 22 20 32 3e 2f 64 65 76 2f  "$rmtmp" 2>/dev/
3a10: 6e 75 6c 6c 3b 20 3a 3b 20 7d 0a 20 20 20 20 20  null; :; }.     
3a20: 20 20 20 20 20 7d 20 7c 7c 0a 20 20 20 20 20 20       } ||.      
3a30: 20 20 20 20 7b 20 65 63 68 6f 20 22 24 30 3a 20      { echo "$0: 
3a40: 63 61 6e 6e 6f 74 20 75 6e 6c 69 6e 6b 20 6f 72  cannot unlink or
3a50: 20 72 65 6e 61 6d 65 20 24 64 73 74 22 20 3e 26   rename $dst" >&
3a60: 32 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65  2.            (e
3a70: 78 69 74 20 31 29 3b 20 65 78 69 74 20 31 0a 20  xit 1); exit 1. 
3a80: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
3a90: 20 20 20 7d 20 26 26 0a 0a 20 20 20 20 20 20 20     } &&..       
3aa0: 20 23 20 4e 6f 77 20 72 65 6e 61 6d 65 20 74 68   # Now rename th
3ab0: 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20 72 65  e file to the re
3ac0: 61 6c 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  al destination..
3ad0: 20 20 20 20 20 20 20 20 24 64 6f 69 74 20 24 6d          $doit $m
3ae0: 76 63 6d 64 20 22 24 64 73 74 74 6d 70 22 20 22  vcmd "$dsttmp" "
3af0: 24 64 73 74 22 0a 20 20 20 20 20 20 7d 0a 20 20  $dst".      }.  
3b00: 20 20 66 69 20 7c 7c 20 65 78 69 74 20 31 0a 0a    fi || exit 1..
3b10: 20 20 20 20 74 72 61 70 20 27 27 20 30 0a 20 20      trap '' 0.  
3b20: 66 69 0a 64 6f 6e 65 0a 0a 23 20 4c 6f 63 61 6c  fi.done..# Local
3b30: 20 76 61 72 69 61 62 6c 65 73 3a 0a 23 20 65 76   variables:.# ev
3b40: 61 6c 3a 20 28 61 64 64 2d 68 6f 6f 6b 20 27 62  al: (add-hook 'b
3b50: 65 66 6f 72 65 2d 73 61 76 65 2d 68 6f 6f 6b 20  efore-save-hook 
3b60: 27 74 69 6d 65 2d 73 74 61 6d 70 29 0a 23 20 74  'time-stamp).# t
3b70: 69 6d 65 2d 73 74 61 6d 70 2d 73 74 61 72 74 3a  ime-stamp-start:
3b80: 20 22 73 63 72 69 70 74 76 65 72 73 69 6f 6e 3d   "scriptversion=
3b90: 22 0a 23 20 74 69 6d 65 2d 73 74 61 6d 70 2d 66  ".# time-stamp-f
3ba0: 6f 72 6d 61 74 3a 20 22 25 3a 79 2d 25 30 32 6d  ormat: "%:y-%02m
3bb0: 2d 25 30 32 64 2e 25 30 32 48 22 0a 23 20 74 69  -%02d.%02H".# ti
3bc0: 6d 65 2d 73 74 61 6d 70 2d 74 69 6d 65 2d 7a 6f  me-stamp-time-zo
3bd0: 6e 65 3a 20 22 55 54 43 30 22 0a 23 20 74 69 6d  ne: "UTC0".# tim
3be0: 65 2d 73 74 61 6d 70 2d 65 6e 64 3a 20 22 3b 20  e-stamp-end: "; 
3bf0: 23 20 55 54 43 22 0a 23 20 45 6e 64 3a 0a        # UTC".# End:.