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