Hex Artifact Content

Artifact b087e5c4b92820c60bffb74acc1d9c2d40d80b8f:


0000: 23 21 2f 62 69 6e 2f 73 68 0a 0a 23 0a 23 20 69  #!/bin/sh..#.# i
0010: 6e 73 74 61 6c 6c 20 2d 20 69 6e 73 74 61 6c 6c  nstall - install
0020: 20 61 20 70 72 6f 67 72 61 6d 2c 20 73 63 72 69   a program, scri
0030: 70 74 2c 20 6f 72 20 64 61 74 61 66 69 6c 65 0a  pt, or datafile.
0040: 23 20 54 68 69 73 20 63 6f 6d 65 73 20 66 72 6f  # This comes fro
0050: 6d 20 58 31 31 52 35 3b 20 69 74 20 69 73 20 6e  m X11R5; it is n
0060: 6f 74 20 70 61 72 74 20 6f 66 20 47 4e 55 2e 0a  ot part of GNU..
0070: 23 0a 23 20 24 58 43 6f 6e 73 6f 72 74 69 75 6d  #.# $XConsortium
0080: 3a 20 69 6e 73 74 61 6c 6c 2e 73 68 2c 76 20 31  : install.sh,v 1
0090: 2e 32 20 38 39 2f 31 32 2f 31 38 20 31 34 3a 34  .2 89/12/18 14:4
00a0: 37 3a 32 32 20 6a 69 6d 20 45 78 70 20 24 0a 23  7:22 jim Exp $.#
00b0: 0a 23 20 54 68 69 73 20 73 63 72 69 70 74 20 69  .# This script i
00c0: 73 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  s compatible wit
00d0: 68 20 74 68 65 20 42 53 44 20 69 6e 73 74 61 6c  h the BSD instal
00e0: 6c 20 73 63 72 69 70 74 2c 20 62 75 74 20 77 61  l script, but wa
00f0: 73 20 77 72 69 74 74 65 6e 0a 23 20 66 72 6f 6d  s written.# from
0100: 20 73 63 72 61 74 63 68 2e 0a 23 0a 0a 0a 23 20   scratch..#...# 
0110: 73 65 74 20 44 4f 49 54 50 52 4f 47 20 74 6f 20  set DOITPROG to 
0120: 65 63 68 6f 20 74 6f 20 74 65 73 74 20 74 68 69  echo to test thi
0130: 73 20 73 63 72 69 70 74 0a 0a 23 20 44 6f 6e 27  s script..# Don'
0140: 74 20 75 73 65 20 3a 2d 20 73 69 6e 63 65 20 34  t use :- since 4
0150: 2e 33 42 53 44 20 61 6e 64 20 65 61 72 6c 69 65  .3BSD and earlie
0160: 72 20 73 68 65 6c 6c 73 20 64 6f 6e 27 74 20 6c  r shells don't l
0170: 69 6b 65 20 69 74 2e 0a 64 6f 69 74 3d 22 24 7b  ike it..doit="${
0180: 44 4f 49 54 50 52 4f 47 2d 7d 22 0a 0a 0a 23 20  DOITPROG-}"...# 
0190: 70 75 74 20 69 6e 20 61 62 73 6f 6c 75 74 65 20  put in absolute 
01a0: 70 61 74 68 73 20 69 66 20 79 6f 75 20 64 6f 6e  paths if you don
01b0: 27 74 20 68 61 76 65 20 74 68 65 6d 20 69 6e 20  't have them in 
01c0: 79 6f 75 72 20 70 61 74 68 3b 20 6f 72 20 75 73  your path; or us
01d0: 65 20 65 6e 76 2e 20 76 61 72 73 2e 0a 0a 6d 76  e env. vars...mv
01e0: 70 72 6f 67 3d 22 24 7b 4d 56 50 52 4f 47 2d 6d  prog="${MVPROG-m
01f0: 76 7d 22 0a 63 70 70 72 6f 67 3d 22 24 7b 43 50  v}".cpprog="${CP
0200: 50 52 4f 47 2d 63 70 7d 22 0a 63 68 6d 6f 64 70  PROG-cp}".chmodp
0210: 72 6f 67 3d 22 24 7b 43 48 4d 4f 44 50 52 4f 47  rog="${CHMODPROG
0220: 2d 63 68 6d 6f 64 7d 22 0a 63 68 6f 77 6e 70 72  -chmod}".chownpr
0230: 6f 67 3d 22 24 7b 43 48 4f 57 4e 50 52 4f 47 2d  og="${CHOWNPROG-
0240: 63 68 6f 77 6e 7d 22 0a 63 68 67 72 70 70 72 6f  chown}".chgrppro
0250: 67 3d 22 24 7b 43 48 47 52 50 50 52 4f 47 2d 63  g="${CHGRPPROG-c
0260: 68 67 72 70 7d 22 0a 73 74 72 69 70 70 72 6f 67  hgrp}".stripprog
0270: 3d 22 24 7b 53 54 52 49 50 50 52 4f 47 2d 73 74  ="${STRIPPROG-st
0280: 72 69 70 7d 22 0a 72 6d 70 72 6f 67 3d 22 24 7b  rip}".rmprog="${
0290: 52 4d 50 52 4f 47 2d 72 6d 7d 22 0a 0a 69 6e 73  RMPROG-rm}"..ins
02a0: 74 63 6d 64 3d 22 24 6d 76 70 72 6f 67 22 0a 63  tcmd="$mvprog".c
02b0: 68 6d 6f 64 63 6d 64 3d 22 22 0a 63 68 6f 77 6e  hmodcmd="".chown
02c0: 63 6d 64 3d 22 22 0a 63 68 67 72 70 63 6d 64 3d  cmd="".chgrpcmd=
02d0: 22 22 0a 73 74 72 69 70 63 6d 64 3d 22 22 0a 72  "".stripcmd="".r
02e0: 6d 63 6d 64 3d 22 24 72 6d 70 72 6f 67 20 2d 66  mcmd="$rmprog -f
02f0: 22 0a 6d 76 63 6d 64 3d 22 24 6d 76 70 72 6f 67  ".mvcmd="$mvprog
0300: 22 0a 73 72 63 3d 22 22 0a 64 73 74 3d 22 22 0a  ".src="".dst="".
0310: 0a 77 68 69 6c 65 20 5b 20 78 22 24 31 22 20 21  .while [ x"$1" !
0320: 3d 20 78 20 5d 3b 20 64 6f 0a 20 20 20 20 63 61  = x ]; do.    ca
0330: 73 65 20 24 31 20 69 6e 0a 09 2d 63 29 20 69 6e  se $1 in..-c) in
0340: 73 74 63 6d 64 3d 22 24 63 70 70 72 6f 67 22 0a  stcmd="$cpprog".
0350: 09 20 20 20 20 73 68 69 66 74 0a 09 20 20 20 20  .    shift..    
0360: 63 6f 6e 74 69 6e 75 65 3b 3b 0a 0a 09 2d 6d 29  continue;;...-m)
0370: 20 63 68 6d 6f 64 63 6d 64 3d 22 24 63 68 6d 6f   chmodcmd="$chmo
0380: 64 70 72 6f 67 20 24 32 22 0a 09 20 20 20 20 73  dprog $2"..    s
0390: 68 69 66 74 0a 09 20 20 20 20 73 68 69 66 74 0a  hift..    shift.
03a0: 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 3b 0a  .    continue;;.
03b0: 0a 09 2d 6f 29 20 63 68 6f 77 6e 63 6d 64 3d 22  ..-o) chowncmd="
03c0: 24 63 68 6f 77 6e 70 72 6f 67 20 24 32 22 0a 09  $chownprog $2"..
03d0: 20 20 20 20 73 68 69 66 74 0a 09 20 20 20 20 73      shift..    s
03e0: 68 69 66 74 0a 09 20 20 20 20 63 6f 6e 74 69 6e  hift..    contin
03f0: 75 65 3b 3b 0a 0a 09 2d 67 29 20 63 68 67 72 70  ue;;...-g) chgrp
0400: 63 6d 64 3d 22 24 63 68 67 72 70 70 72 6f 67 20  cmd="$chgrpprog 
0410: 24 32 22 0a 09 20 20 20 20 73 68 69 66 74 0a 09  $2"..    shift..
0420: 20 20 20 20 73 68 69 66 74 0a 09 20 20 20 20 63      shift..    c
0430: 6f 6e 74 69 6e 75 65 3b 3b 0a 0a 09 2d 73 29 20  ontinue;;...-s) 
0440: 73 74 72 69 70 63 6d 64 3d 22 24 73 74 72 69 70  stripcmd="$strip
0450: 70 72 6f 67 22 0a 09 20 20 20 20 73 68 69 66 74  prog"..    shift
0460: 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 3b  ..    continue;;
0470: 0a 0a 09 2a 29 20 20 69 66 20 5b 20 78 22 24 73  ...*)  if [ x"$s
0480: 72 63 22 20 3d 20 78 20 5d 0a 09 20 20 20 20 74  rc" = x ]..    t
0490: 68 65 6e 0a 09 09 73 72 63 3d 24 31 0a 09 20 20  hen...src=$1..  
04a0: 20 20 65 6c 73 65 0a 09 09 64 73 74 3d 24 31 0a    else...dst=$1.
04b0: 09 20 20 20 20 66 69 0a 09 20 20 20 20 73 68 69  .    fi..    shi
04c0: 66 74 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65  ft..    continue
04d0: 3b 3b 0a 20 20 20 20 65 73 61 63 0a 64 6f 6e 65  ;;.    esac.done
04e0: 0a 0a 69 66 20 5b 20 78 22 24 73 72 63 22 20 3d  ..if [ x"$src" =
04f0: 20 78 20 5d 0a 74 68 65 6e 0a 09 65 63 68 6f 20   x ].then..echo 
0500: 22 69 6e 73 74 61 6c 6c 3a 20 20 6e 6f 20 69 6e  "install:  no in
0510: 70 75 74 20 66 69 6c 65 20 73 70 65 63 69 66 69  put file specifi
0520: 65 64 22 0a 09 65 78 69 74 20 31 0a 66 69 0a 0a  ed"..exit 1.fi..
0530: 69 66 20 5b 20 78 22 24 64 73 74 22 20 3d 20 78  if [ x"$dst" = x
0540: 20 5d 0a 74 68 65 6e 0a 09 65 63 68 6f 20 22 69   ].then..echo "i
0550: 6e 73 74 61 6c 6c 3a 20 20 6e 6f 20 64 65 73 74  nstall:  no dest
0560: 69 6e 61 74 69 6f 6e 20 73 70 65 63 69 66 69 65  ination specifie
0570: 64 22 0a 09 65 78 69 74 20 31 0a 66 69 0a 0a 0a  d"..exit 1.fi...
0580: 23 20 49 66 20 64 65 73 74 69 6e 61 74 69 6f 6e  # If destination
0590: 20 69 73 20 61 20 64 69 72 65 63 74 6f 72 79 2c   is a directory,
05a0: 20 61 70 70 65 6e 64 20 74 68 65 20 69 6e 70 75   append the inpu
05b0: 74 20 66 69 6c 65 6e 61 6d 65 3b 20 69 66 20 79  t filename; if y
05c0: 6f 75 72 20 73 79 73 74 65 6d 0a 23 20 64 6f 65  our system.# doe
05d0: 73 20 6e 6f 74 20 6c 69 6b 65 20 64 6f 75 62 6c  s not like doubl
05e0: 65 20 73 6c 61 73 68 65 73 20 69 6e 20 66 69 6c  e slashes in fil
05f0: 65 6e 61 6d 65 73 2c 20 79 6f 75 20 6d 61 79 20  enames, you may 
0600: 6e 65 65 64 20 74 6f 20 61 64 64 20 73 6f 6d 65  need to add some
0610: 20 6c 6f 67 69 63 0a 0a 69 66 20 5b 20 2d 64 20   logic..if [ -d 
0620: 24 64 73 74 20 5d 0a 74 68 65 6e 0a 09 64 73 74  $dst ].then..dst
0630: 3d 22 24 64 73 74 22 2f 60 62 61 73 65 6e 61 6d  ="$dst"/`basenam
0640: 65 20 24 73 72 63 60 0a 66 69 0a 0a 23 20 4d 61  e $src`.fi..# Ma
0650: 6b 65 20 61 20 74 65 6d 70 20 66 69 6c 65 20 6e  ke a temp file n
0660: 61 6d 65 20 69 6e 20 74 68 65 20 70 72 6f 70 65  ame in the prope
0670: 72 20 64 69 72 65 63 74 6f 72 79 2e 0a 0a 64 73  r directory...ds
0680: 74 64 69 72 3d 60 64 69 72 6e 61 6d 65 20 24 64  tdir=`dirname $d
0690: 73 74 60 0a 64 73 74 74 6d 70 3d 24 64 73 74 64  st`.dsttmp=$dstd
06a0: 69 72 2f 23 69 6e 73 74 2e 24 24 23 0a 0a 23 20  ir/#inst.$$#..# 
06b0: 4d 6f 76 65 20 6f 72 20 63 6f 70 79 20 74 68 65  Move or copy the
06c0: 20 66 69 6c 65 20 6e 61 6d 65 20 74 6f 20 74 68   file name to th
06d0: 65 20 74 65 6d 70 20 6e 61 6d 65 0a 0a 24 64 6f  e temp name..$do
06e0: 69 74 20 24 69 6e 73 74 63 6d 64 20 24 73 72 63  it $instcmd $src
06f0: 20 24 64 73 74 74 6d 70 0a 0a 23 20 61 6e 64 20   $dsttmp..# and 
0700: 73 65 74 20 61 6e 79 20 6f 70 74 69 6f 6e 73 3b  set any options;
0710: 20 64 6f 20 63 68 6d 6f 64 20 6c 61 73 74 20 74   do chmod last t
0720: 6f 20 70 72 65 73 65 72 76 65 20 73 65 74 75 69  o preserve setui
0730: 64 20 62 69 74 73 0a 0a 69 66 20 5b 20 78 22 24  d bits..if [ x"$
0740: 63 68 6f 77 6e 63 6d 64 22 20 21 3d 20 78 20 5d  chowncmd" != x ]
0750: 3b 20 74 68 65 6e 20 24 64 6f 69 74 20 24 63 68  ; then $doit $ch
0760: 6f 77 6e 63 6d 64 20 24 64 73 74 74 6d 70 3b 20  owncmd $dsttmp; 
0770: 66 69 0a 69 66 20 5b 20 78 22 24 63 68 67 72 70  fi.if [ x"$chgrp
0780: 63 6d 64 22 20 21 3d 20 78 20 5d 3b 20 74 68 65  cmd" != x ]; the
0790: 6e 20 24 64 6f 69 74 20 24 63 68 67 72 70 63 6d  n $doit $chgrpcm
07a0: 64 20 24 64 73 74 74 6d 70 3b 20 66 69 0a 69 66  d $dsttmp; fi.if
07b0: 20 5b 20 78 22 24 73 74 72 69 70 63 6d 64 22 20   [ x"$stripcmd" 
07c0: 21 3d 20 78 20 5d 3b 20 74 68 65 6e 20 24 64 6f  != x ]; then $do
07d0: 69 74 20 24 73 74 72 69 70 63 6d 64 20 24 64 73  it $stripcmd $ds
07e0: 74 74 6d 70 3b 20 66 69 0a 69 66 20 5b 20 78 22  ttmp; fi.if [ x"
07f0: 24 63 68 6d 6f 64 63 6d 64 22 20 21 3d 20 78 20  $chmodcmd" != x 
0800: 5d 3b 20 74 68 65 6e 20 24 64 6f 69 74 20 24 63  ]; then $doit $c
0810: 68 6d 6f 64 63 6d 64 20 24 64 73 74 74 6d 70 3b  hmodcmd $dsttmp;
0820: 20 66 69 0a 0a 23 20 4e 6f 77 20 72 65 6e 61 6d   fi..# Now renam
0830: 65 20 74 68 65 20 66 69 6c 65 20 74 6f 20 74 68  e the file to th
0840: 65 20 72 65 61 6c 20 64 65 73 74 69 6e 61 74 69  e real destinati
0850: 6f 6e 2e 0a 0a 24 64 6f 69 74 20 24 72 6d 63 6d  on...$doit $rmcm
0860: 64 20 24 64 73 74 0a 24 64 6f 69 74 20 24 6d 76  d $dst.$doit $mv
0870: 63 6d 64 20 24 64 73 74 74 6d 70 20 24 64 73 74  cmd $dsttmp $dst
0880: 0a 0a 0a 65 78 69 74 20 30 0a                    ...exit 0.