Hex Artifact Content
Not logged in

Artifact ee1301c1a4aceb9abc2f017c7d43cca7d0831a9c:


0000: 23 21 2f 62 69 6e 2f 73 68 0a 23 20 43 6f 70 79  #!/bin/sh.# Copy
0010: 72 69 67 68 74 20 32 30 31 34 20 54 68 65 20 52  right 2014 The R
0020: 75 73 74 20 50 72 6f 6a 65 63 74 20 44 65 76 65  ust Project Deve
0030: 6c 6f 70 65 72 73 2e 20 53 65 65 20 74 68 65 20  lopers. See the 
0040: 43 4f 50 59 52 49 47 48 54 0a 23 20 66 69 6c 65  COPYRIGHT.# file
0050: 20 61 74 20 74 68 65 20 74 6f 70 2d 6c 65 76 65   at the top-leve
0060: 6c 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74  l directory of t
0070: 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f 6e  his distribution
0080: 20 61 6e 64 20 61 74 0a 23 20 68 74 74 70 3a 2f   and at.# http:/
0090: 2f 72 75 73 74 2d 6c 61 6e 67 2e 6f 72 67 2f 43  /rust-lang.org/C
00a0: 4f 50 59 52 49 47 48 54 2e 0a 23 0a 23 20 4c 69  OPYRIGHT..#.# Li
00b0: 63 65 6e 73 65 64 20 75 6e 64 65 72 20 74 68 65  censed under the
00c0: 20 41 70 61 63 68 65 20 4c 69 63 65 6e 73 65 2c   Apache License,
00d0: 20 56 65 72 73 69 6f 6e 20 32 2e 30 20 3c 4c 49   Version 2.0 <LI
00e0: 43 45 4e 53 45 2d 41 50 41 43 48 45 20 6f 72 0a  CENSE-APACHE or.
00f0: 23 20 68 74 74 70 3a 2f 2f 77 77 77 2e 61 70 61  # http://www.apa
0100: 63 68 65 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73  che.org/licenses
0110: 2f 4c 49 43 45 4e 53 45 2d 32 2e 30 3e 20 6f 72  /LICENSE-2.0> or
0120: 20 74 68 65 20 4d 49 54 20 6c 69 63 65 6e 73 65   the MIT license
0130: 0a 23 20 3c 4c 49 43 45 4e 53 45 2d 4d 49 54 20  .# <LICENSE-MIT 
0140: 6f 72 20 68 74 74 70 3a 2f 2f 6f 70 65 6e 73 6f  or http://openso
0150: 75 72 63 65 2e 6f 72 67 2f 6c 69 63 65 6e 73 65  urce.org/license
0160: 73 2f 4d 49 54 3e 2c 20 61 74 20 79 6f 75 72 0a  s/MIT>, at your.
0170: 23 20 6f 70 74 69 6f 6e 2e 20 54 68 69 73 20 66  # option. This f
0180: 69 6c 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 63  ile may not be c
0190: 6f 70 69 65 64 2c 20 6d 6f 64 69 66 69 65 64 2c  opied, modified,
01a0: 20 6f 72 20 64 69 73 74 72 69 62 75 74 65 64 0a   or distributed.
01b0: 23 20 65 78 63 65 70 74 20 61 63 63 6f 72 64 69  # except accordi
01c0: 6e 67 20 74 6f 20 74 68 6f 73 65 20 74 65 72 6d  ng to those term
01d0: 73 2e 0a 0a 23 20 4e 6f 20 75 6e 64 65 66 69 6e  s...# No undefin
01e0: 65 64 20 76 61 72 69 61 62 6c 65 73 0a 73 65 74  ed variables.set
01f0: 20 2d 75 0a 0a 69 6e 69 74 5f 6c 6f 67 67 69 6e   -u..init_loggin
0200: 67 28 29 20 7b 0a 20 20 20 20 6c 6f 63 61 6c 20  g() {.    local 
0210: 5f 61 62 73 5f 6c 69 62 64 69 72 3d 22 24 31 22  _abs_libdir="$1"
0220: 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 6c 6f 67 66  .    local _logf
0230: 69 6c 65 3d 22 24 5f 61 62 73 5f 6c 69 62 64 69  ile="$_abs_libdi
0240: 72 2f 24 54 45 4d 50 4c 41 54 45 5f 52 45 4c 5f  r/$TEMPLATE_REL_
0250: 4d 41 4e 49 46 45 53 54 5f 44 49 52 2f 69 6e 73  MANIFEST_DIR/ins
0260: 74 61 6c 6c 2e 6c 6f 67 22 0a 20 20 20 20 72 6d  tall.log".    rm
0270: 20 2d 66 20 22 24 5f 6c 6f 67 66 69 6c 65 22 0a   -f "$_logfile".
0280: 20 20 20 20 6e 65 65 64 5f 6f 6b 20 22 66 61 69      need_ok "fai
0290: 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 6f 6c  led to remove ol
02a0: 64 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 6c  d installation l
02b0: 6f 67 22 0a 20 20 20 20 74 6f 75 63 68 20 22 24  og".    touch "$
02c0: 5f 6c 6f 67 66 69 6c 65 22 0a 20 20 20 20 6e 65  _logfile".    ne
02d0: 65 64 5f 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f  ed_ok "failed to
02e0: 20 63 72 65 61 74 65 20 69 6e 73 74 61 6c 6c 61   create installa
02f0: 74 69 6f 6e 20 6c 6f 67 22 0a 20 20 20 20 4c 4f  tion log".    LO
0300: 47 46 49 4c 45 3d 22 24 5f 6c 6f 67 66 69 6c 65  GFILE="$_logfile
0310: 22 0a 7d 0a 0a 6c 6f 67 5f 6c 69 6e 65 28 29 20  ".}..log_line() 
0320: 7b 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 6c 69 6e  {.    local _lin
0330: 65 3d 22 24 31 22 0a 0a 20 20 20 20 69 66 20 5b  e="$1"..    if [
0340: 20 2d 6e 20 22 24 7b 4c 4f 47 46 49 4c 45 2d 7d   -n "${LOGFILE-}
0350: 22 20 2d 61 20 2d 65 20 22 24 7b 4c 4f 47 46 49  " -a -e "${LOGFI
0360: 4c 45 2d 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 65  LE-}" ]; then..e
0370: 63 68 6f 20 22 24 5f 6c 69 6e 65 22 20 3e 3e 20  cho "$_line" >> 
0380: 22 24 4c 4f 47 46 49 4c 45 22 0a 09 23 20 49 67  "$LOGFILE"..# Ig
0390: 6e 6f 72 65 20 65 72 72 6f 72 73 2c 20 77 68 69  nore errors, whi
03a0: 63 68 20 6d 61 79 20 68 61 70 70 65 6e 20 65 2e  ch may happen e.
03b0: 67 2e 20 61 66 74 65 72 20 74 68 65 20 6d 61 6e  g. after the man
03c0: 69 66 65 73 74 20 64 69 72 20 69 73 20 64 65 6c  ifest dir is del
03d0: 65 74 65 64 0a 20 20 20 20 66 69 0a 7d 0a 0a 6d  eted.    fi.}..m
03e0: 73 67 28 29 20 7b 0a 20 20 20 20 6c 6f 63 61 6c  sg() {.    local
03f0: 20 5f 6c 69 6e 65 3d 22 69 6e 73 74 61 6c 6c 3a   _line="install:
0400: 20 24 7b 31 2d 7d 22 0a 20 20 20 20 65 63 68 6f   ${1-}".    echo
0410: 20 22 24 5f 6c 69 6e 65 22 0a 20 20 20 20 6c 6f   "$_line".    lo
0420: 67 5f 6c 69 6e 65 20 22 24 5f 6c 69 6e 65 22 0a  g_line "$_line".
0430: 7d 0a 0a 76 65 72 62 6f 73 65 5f 6d 73 67 28 29  }..verbose_msg()
0440: 20 7b 0a 20 20 20 20 69 66 20 5b 20 2d 6e 20 22   {.    if [ -n "
0450: 24 7b 43 46 47 5f 56 45 52 42 4f 53 45 2d 7d 22  ${CFG_VERBOSE-}"
0460: 20 5d 3b 20 74 68 65 6e 0a 09 6d 73 67 20 22 24   ]; then..msg "$
0470: 7b 31 2d 7d 22 0a 20 20 20 20 65 6c 73 65 0a 09  {1-}".    else..
0480: 6c 6f 67 5f 6c 69 6e 65 20 22 69 6e 73 74 61 6c  log_line "instal
0490: 6c 3a 20 24 7b 31 2d 7d 22 0a 20 20 20 20 66 69  l: ${1-}".    fi
04a0: 0a 7d 0a 0a 73 74 65 70 5f 6d 73 67 28 29 20 7b  .}..step_msg() {
04b0: 0a 20 20 20 20 6d 73 67 0a 20 20 20 20 6d 73 67  .    msg.    msg
04c0: 20 22 24 31 22 0a 20 20 20 20 6d 73 67 0a 7d 0a   "$1".    msg.}.
04d0: 0a 76 65 72 62 6f 73 65 5f 73 74 65 70 5f 6d 73  .verbose_step_ms
04e0: 67 28 29 20 7b 0a 20 20 20 20 69 66 20 5b 20 2d  g() {.    if [ -
04f0: 6e 20 22 24 7b 43 46 47 5f 56 45 52 42 4f 53 45  n "${CFG_VERBOSE
0500: 2d 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 6d 73 67  -}" ]; then..msg
0510: 0a 09 6d 73 67 20 22 24 31 22 0a 09 6d 73 67 0a  ..msg "$1"..msg.
0520: 20 20 20 20 65 6c 73 65 0a 09 6c 6f 67 5f 6c 69      else..log_li
0530: 6e 65 20 22 22 0a 09 6c 6f 67 5f 6c 69 6e 65 20  ne ""..log_line 
0540: 22 69 6e 73 74 61 6c 6c 3a 20 24 31 22 0a 09 6c  "install: $1"..l
0550: 6f 67 5f 6c 69 6e 65 20 22 22 0a 20 20 20 20 66  og_line "".    f
0560: 69 0a 7d 0a 0a 77 61 72 6e 28 29 20 7b 0a 20 20  i.}..warn() {.  
0570: 20 20 6c 6f 63 61 6c 20 5f 6c 69 6e 65 3d 22 69    local _line="i
0580: 6e 73 74 61 6c 6c 3a 20 57 41 52 4e 49 4e 47 3a  nstall: WARNING:
0590: 20 24 31 22 0a 20 20 20 20 65 63 68 6f 20 22 24   $1".    echo "$
05a0: 5f 6c 69 6e 65 22 20 3e 26 32 0a 20 20 20 20 6c  _line" >&2.    l
05b0: 6f 67 5f 6c 69 6e 65 20 22 24 5f 6c 69 6e 65 22  og_line "$_line"
05c0: 0a 7d 0a 0a 65 72 72 28 29 20 7b 0a 20 20 20 20  .}..err() {.    
05d0: 6c 6f 63 61 6c 20 5f 6c 69 6e 65 3d 22 69 6e 73  local _line="ins
05e0: 74 61 6c 6c 3a 20 65 72 72 6f 72 3a 20 24 31 22  tall: error: $1"
05f0: 0a 20 20 20 20 65 63 68 6f 20 22 24 5f 6c 69 6e  .    echo "$_lin
0600: 65 22 20 3e 26 32 0a 20 20 20 20 6c 6f 67 5f 6c  e" >&2.    log_l
0610: 69 6e 65 20 22 24 5f 6c 69 6e 65 22 0a 20 20 20  ine "$_line".   
0620: 20 65 78 69 74 20 31 0a 7d 0a 0a 23 20 41 20 6e   exit 1.}..# A n
0630: 6f 6e 2d 75 73 65 72 20 65 72 72 6f 72 20 74 68  on-user error th
0640: 61 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  at is likely to 
0650: 72 65 73 75 6c 74 20 69 6e 20 61 20 63 6f 72 72  result in a corr
0660: 75 70 74 65 64 20 69 6e 73 74 61 6c 6c 0a 63 72  upted install.cr
0670: 69 74 69 63 61 6c 5f 65 72 72 28 29 20 7b 0a 20  itical_err() {. 
0680: 20 20 20 6c 6f 63 61 6c 20 5f 6c 69 6e 65 3d 22     local _line="
0690: 69 6e 73 74 61 6c 6c 3a 20 65 72 72 6f 72 3a 20  install: error: 
06a0: 24 31 2e 20 73 65 65 20 6c 6f 67 73 20 61 74 20  $1. see logs at 
06b0: 27 24 7b 4c 4f 47 46 49 4c 45 2d 7d 27 22 0a 20  '${LOGFILE-}'". 
06c0: 20 20 20 65 63 68 6f 20 22 24 5f 6c 69 6e 65 22     echo "$_line"
06d0: 20 3e 26 32 0a 20 20 20 20 6c 6f 67 5f 6c 69 6e   >&2.    log_lin
06e0: 65 20 22 24 5f 6c 69 6e 65 22 0a 20 20 20 20 65  e "$_line".    e
06f0: 78 69 74 20 31 0a 7d 0a 0a 6e 65 65 64 5f 6f 6b  xit 1.}..need_ok
0700: 28 29 20 7b 0a 20 20 20 20 69 66 20 5b 20 24 3f  () {.    if [ $?
0710: 20 2d 6e 65 20 30 20 5d 0a 20 20 20 20 74 68 65   -ne 0 ].    the
0720: 6e 0a 20 20 20 20 20 20 20 20 65 72 72 20 22 24  n.        err "$
0730: 31 22 0a 20 20 20 20 66 69 0a 7d 0a 0a 63 72 69  1".    fi.}..cri
0740: 74 69 63 61 6c 5f 6e 65 65 64 5f 6f 6b 28 29 20  tical_need_ok() 
0750: 7b 0a 20 20 20 20 69 66 20 5b 20 24 3f 20 2d 6e  {.    if [ $? -n
0760: 65 20 30 20 5d 0a 20 20 20 20 74 68 65 6e 0a 20  e 0 ].    then. 
0770: 20 20 20 20 20 20 20 63 72 69 74 69 63 61 6c 5f         critical_
0780: 65 72 72 20 22 24 31 22 0a 20 20 20 20 66 69 0a  err "$1".    fi.
0790: 7d 0a 0a 77 61 6e 74 5f 6f 6b 28 29 20 7b 0a 20  }..want_ok() {. 
07a0: 20 20 20 69 66 20 5b 20 24 3f 20 2d 6e 65 20 30     if [ $? -ne 0
07b0: 20 5d 3b 20 74 68 65 6e 0a 09 77 61 72 6e 20 22   ]; then..warn "
07c0: 24 31 22 0a 20 20 20 20 66 69 0a 7d 0a 0a 61 73  $1".    fi.}..as
07d0: 73 65 72 74 5f 6e 7a 28 29 20 7b 0a 20 20 20 20  sert_nz() {.    
07e0: 69 66 20 5b 20 2d 7a 20 22 24 31 22 20 5d 3b 20  if [ -z "$1" ]; 
07f0: 74 68 65 6e 20 65 72 72 20 22 61 73 73 65 72 74  then err "assert
0800: 5f 6e 7a 20 24 32 22 3b 20 66 69 0a 7d 0a 0a 6e  _nz $2"; fi.}..n
0810: 65 65 64 5f 63 6d 64 28 29 20 7b 0a 20 20 20 20  eed_cmd() {.    
0820: 69 66 20 63 6f 6d 6d 61 6e 64 20 2d 76 20 24 31  if command -v $1
0830: 20 3e 2f 64 65 76 2f 6e 75 6c 6c 20 32 3e 26 31   >/dev/null 2>&1
0840: 0a 20 20 20 20 74 68 65 6e 20 76 65 72 62 6f 73  .    then verbos
0850: 65 5f 6d 73 67 20 22 66 6f 75 6e 64 20 24 31 22  e_msg "found $1"
0860: 0a 20 20 20 20 65 6c 73 65 20 65 72 72 20 22 6e  .    else err "n
0870: 65 65 64 20 24 31 22 0a 20 20 20 20 66 69 0a 7d  eed $1".    fi.}
0880: 0a 0a 72 75 6e 28 29 20 7b 0a 20 20 20 20 6c 6f  ..run() {.    lo
0890: 63 61 6c 20 5f 6c 69 6e 65 3d 22 5c 24 20 24 2a  cal _line="\$ $*
08a0: 22 0a 20 20 20 20 22 24 40 22 0a 20 20 20 20 6c  ".    "$@".    l
08b0: 6f 63 61 6c 20 5f 72 65 74 76 61 6c 3d 24 3f 0a  ocal _retval=$?.
08c0: 20 20 20 20 6c 6f 67 5f 6c 69 6e 65 20 22 24 5f      log_line "$_
08d0: 6c 69 6e 65 22 0a 20 20 20 20 72 65 74 75 72 6e  line".    return
08e0: 20 24 5f 72 65 74 76 61 6c 0a 7d 0a 0a 77 72 69   $_retval.}..wri
08f0: 74 65 5f 74 6f 5f 66 69 6c 65 28 29 20 7b 0a 20  te_to_file() {. 
0900: 20 20 20 6c 6f 63 61 6c 20 5f 6d 73 67 3d 22 24     local _msg="$
0910: 31 22 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 66 69  1".    local _fi
0920: 6c 65 3d 22 24 32 22 0a 20 20 20 20 6c 6f 63 61  le="$2".    loca
0930: 6c 20 5f 6c 69 6e 65 3d 22 24 20 65 63 68 6f 20  l _line="$ echo 
0940: 5c 22 24 5f 6d 73 67 5c 22 20 3e 20 5c 22 24 5f  \"$_msg\" > \"$_
0950: 66 69 6c 65 5c 22 22 0a 20 20 20 20 65 63 68 6f  file\"".    echo
0960: 20 22 24 5f 6d 73 67 22 20 3e 20 22 24 5f 66 69   "$_msg" > "$_fi
0970: 6c 65 22 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 72  le".    local _r
0980: 65 74 76 61 6c 3d 24 3f 0a 20 20 20 20 6c 6f 67  etval=$?.    log
0990: 5f 6c 69 6e 65 20 22 24 5f 6c 69 6e 65 22 0a 20  _line "$_line". 
09a0: 20 20 20 72 65 74 75 72 6e 20 24 5f 72 65 74 76     return $_retv
09b0: 61 6c 0a 7d 0a 0a 61 70 70 65 6e 64 5f 74 6f 5f  al.}..append_to_
09c0: 66 69 6c 65 28 29 20 7b 0a 20 20 20 20 6c 6f 63  file() {.    loc
09d0: 61 6c 20 5f 6d 73 67 3d 22 24 31 22 0a 20 20 20  al _msg="$1".   
09e0: 20 6c 6f 63 61 6c 20 5f 66 69 6c 65 3d 22 24 32   local _file="$2
09f0: 22 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 6c 69 6e  ".    local _lin
0a00: 65 3d 22 24 20 65 63 68 6f 20 5c 22 24 5f 6d 73  e="$ echo \"$_ms
0a10: 67 5c 22 20 3e 3e 20 5c 22 24 5f 66 69 6c 65 5c  g\" >> \"$_file\
0a20: 22 22 0a 20 20 20 20 65 63 68 6f 20 22 24 5f 6d  "".    echo "$_m
0a30: 73 67 22 20 3e 3e 20 22 24 5f 66 69 6c 65 22 0a  sg" >> "$_file".
0a40: 20 20 20 20 6c 6f 63 61 6c 20 5f 72 65 74 76 61      local _retva
0a50: 6c 3d 24 3f 0a 20 20 20 20 6c 6f 67 5f 6c 69 6e  l=$?.    log_lin
0a60: 65 20 22 24 5f 6c 69 6e 65 22 0a 20 20 20 20 72  e "$_line".    r
0a70: 65 74 75 72 6e 20 24 5f 72 65 74 76 61 6c 0a 7d  eturn $_retval.}
0a80: 0a 0a 6d 61 6b 65 5f 64 69 72 5f 72 65 63 75 72  ..make_dir_recur
0a90: 73 69 76 65 28 29 20 7b 0a 20 20 20 20 6c 6f 63  sive() {.    loc
0aa0: 61 6c 20 5f 64 69 72 3d 22 24 31 22 0a 20 20 20  al _dir="$1".   
0ab0: 20 6c 6f 63 61 6c 20 5f 6c 69 6e 65 3d 22 24 20   local _line="$ 
0ac0: 75 6d 61 73 6b 20 30 32 32 20 26 26 20 6d 6b 64  umask 022 && mkd
0ad0: 69 72 20 2d 70 20 5c 22 24 5f 64 69 72 5c 22 22  ir -p \"$_dir\""
0ae0: 0a 20 20 20 20 75 6d 61 73 6b 20 30 32 32 20 26  .    umask 022 &
0af0: 26 20 6d 6b 64 69 72 20 2d 70 20 22 24 5f 64 69  & mkdir -p "$_di
0b00: 72 22 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 72 65  r".    local _re
0b10: 74 76 61 6c 3d 24 3f 0a 20 20 20 20 6c 6f 67 5f  tval=$?.    log_
0b20: 6c 69 6e 65 20 22 24 5f 6c 69 6e 65 22 0a 20 20  line "$_line".  
0b30: 20 20 72 65 74 75 72 6e 20 24 5f 72 65 74 76 61    return $_retva
0b40: 6c 0a 7d 0a 0a 70 75 74 76 61 72 28 29 20 7b 0a  l.}..putvar() {.
0b50: 20 20 20 20 6c 6f 63 61 6c 20 74 0a 20 20 20 20      local t.    
0b60: 6c 6f 63 61 6c 20 74 6c 65 6e 0a 20 20 20 20 65  local tlen.    e
0b70: 76 61 6c 20 74 3d 5c 24 24 31 0a 20 20 20 20 65  val t=\$$1.    e
0b80: 76 61 6c 20 74 6c 65 6e 3d 5c 24 7b 23 24 31 7d  val tlen=\${#$1}
0b90: 0a 7d 0a 0a 76 61 6c 6f 70 74 28 29 20 7b 0a 20  .}..valopt() {. 
0ba0: 20 20 20 56 41 4c 5f 4f 50 54 49 4f 4e 53 3d 22     VAL_OPTIONS="
0bb0: 24 56 41 4c 5f 4f 50 54 49 4f 4e 53 20 24 31 22  $VAL_OPTIONS $1"
0bc0: 0a 0a 20 20 20 20 6c 6f 63 61 6c 20 6f 70 3d 24  ..    local op=$
0bd0: 31 0a 20 20 20 20 6c 6f 63 61 6c 20 64 65 66 61  1.    local defa
0be0: 75 6c 74 3d 24 32 0a 20 20 20 20 73 68 69 66 74  ult=$2.    shift
0bf0: 0a 20 20 20 20 73 68 69 66 74 0a 20 20 20 20 6c  .    shift.    l
0c00: 6f 63 61 6c 20 64 6f 63 3d 22 24 2a 22 0a 20 20  ocal doc="$*".  
0c10: 20 20 69 66 20 5b 20 24 48 45 4c 50 20 2d 65 71    if [ $HELP -eq
0c20: 20 30 20 5d 0a 20 20 20 20 74 68 65 6e 0a 20 20   0 ].    then.  
0c30: 20 20 20 20 20 20 6c 6f 63 61 6c 20 75 6f 70 3d        local uop=
0c40: 24 28 65 63 68 6f 20 24 6f 70 20 7c 20 74 72 20  $(echo $op | tr 
0c50: 27 5b 3a 6c 6f 77 65 72 3a 5d 27 20 27 5b 3a 75  '[:lower:]' '[:u
0c60: 70 70 65 72 3a 5d 27 20 7c 20 74 72 20 27 5c 2d  pper:]' | tr '\-
0c70: 27 20 27 5c 5f 27 29 0a 20 20 20 20 20 20 20 20  ' '\_').        
0c80: 6c 6f 63 61 6c 20 76 3d 22 43 46 47 5f 24 7b 75  local v="CFG_${u
0c90: 6f 70 7d 22 0a 20 20 20 20 20 20 20 20 65 76 61  op}".        eva
0ca0: 6c 20 24 76 3d 22 24 64 65 66 61 75 6c 74 22 0a  l $v="$default".
0cb0: 20 20 20 20 20 20 20 20 66 6f 72 20 61 72 67 20          for arg 
0cc0: 69 6e 20 24 43 46 47 5f 41 52 47 53 0a 20 20 20  in $CFG_ARGS.   
0cd0: 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 20       do.        
0ce0: 20 20 20 20 69 66 20 65 63 68 6f 20 22 24 61 72      if echo "$ar
0cf0: 67 22 20 7c 20 67 72 65 70 20 2d 71 20 2d 2d 20  g" | grep -q -- 
0d00: 22 2d 2d 24 6f 70 3d 22 0a 20 20 20 20 20 20 20  "--$op=".       
0d10: 20 20 20 20 20 74 68 65 6e 0a 20 20 20 20 20 20       then.      
0d20: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 20            local 
0d30: 76 61 6c 3d 24 28 65 63 68 6f 20 22 24 61 72 67  val=$(echo "$arg
0d40: 22 20 7c 20 63 75 74 20 2d 66 32 20 2d 64 3d 29  " | cut -f2 -d=)
0d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0d60: 20 65 76 61 6c 20 24 76 3d 24 76 61 6c 0a 20 20   eval $v=$val.  
0d70: 20 20 20 20 20 20 20 20 20 20 66 69 0a 20 20 20            fi.   
0d80: 20 20 20 20 20 64 6f 6e 65 0a 20 20 20 20 20 20       done.      
0d90: 20 20 70 75 74 76 61 72 20 24 76 0a 20 20 20 20    putvar $v.    
0da0: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 20  else.        if 
0db0: 5b 20 2d 7a 20 22 24 64 65 66 61 75 6c 74 22 20  [ -z "$default" 
0dc0: 5d 0a 20 20 20 20 20 20 20 20 74 68 65 6e 0a 20  ].        then. 
0dd0: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
0de0: 6c 74 3d 22 3c 6e 6f 6e 65 3e 22 0a 20 20 20 20  lt="<none>".    
0df0: 20 20 20 20 66 69 0a 20 20 20 20 20 20 20 20 6f      fi.        o
0e00: 70 3d 22 24 7b 6f 70 7d 3d 5b 24 7b 64 65 66 61  p="${op}=[${defa
0e10: 75 6c 74 7d 5d 22 0a 20 20 20 20 20 20 20 20 70  ult}]".        p
0e20: 72 69 6e 74 66 20 22 20 20 20 20 2d 2d 25 2d 33  rintf "    --%-3
0e30: 30 73 20 25 73 5c 6e 22 20 22 24 6f 70 22 20 22  0s %s\n" "$op" "
0e40: 24 64 6f 63 22 0a 20 20 20 20 66 69 0a 7d 0a 0a  $doc".    fi.}..
0e50: 6f 70 74 28 29 20 7b 0a 20 20 20 20 42 4f 4f 4c  opt() {.    BOOL
0e60: 5f 4f 50 54 49 4f 4e 53 3d 22 24 42 4f 4f 4c 5f  _OPTIONS="$BOOL_
0e70: 4f 50 54 49 4f 4e 53 20 24 31 22 0a 0a 20 20 20  OPTIONS $1"..   
0e80: 20 6c 6f 63 61 6c 20 6f 70 3d 24 31 0a 20 20 20   local op=$1.   
0e90: 20 6c 6f 63 61 6c 20 64 65 66 61 75 6c 74 3d 24   local default=$
0ea0: 32 0a 20 20 20 20 73 68 69 66 74 0a 20 20 20 20  2.    shift.    
0eb0: 73 68 69 66 74 0a 20 20 20 20 6c 6f 63 61 6c 20  shift.    local 
0ec0: 64 6f 63 3d 22 24 2a 22 0a 20 20 20 20 6c 6f 63  doc="$*".    loc
0ed0: 61 6c 20 66 6c 61 67 3d 22 22 0a 0a 20 20 20 20  al flag=""..    
0ee0: 69 66 20 5b 20 24 64 65 66 61 75 6c 74 20 2d 65  if [ $default -e
0ef0: 71 20 30 20 5d 0a 20 20 20 20 74 68 65 6e 0a 20  q 0 ].    then. 
0f00: 20 20 20 20 20 20 20 66 6c 61 67 3d 22 65 6e 61         flag="ena
0f10: 62 6c 65 22 0a 20 20 20 20 65 6c 73 65 0a 20 20  ble".    else.  
0f20: 20 20 20 20 20 20 66 6c 61 67 3d 22 64 69 73 61        flag="disa
0f30: 62 6c 65 22 0a 20 20 20 20 20 20 20 20 64 6f 63  ble".        doc
0f40: 3d 22 64 6f 6e 27 74 20 24 64 6f 63 22 0a 20 20  ="don't $doc".  
0f50: 20 20 66 69 0a 0a 20 20 20 20 69 66 20 5b 20 24    fi..    if [ $
0f60: 48 45 4c 50 20 2d 65 71 20 30 20 5d 0a 20 20 20  HELP -eq 0 ].   
0f70: 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 66 6f   then.        fo
0f80: 72 20 61 72 67 20 69 6e 20 24 43 46 47 5f 41 52  r arg in $CFG_AR
0f90: 47 53 0a 20 20 20 20 20 20 20 20 64 6f 0a 20 20  GS.        do.  
0fa0: 20 20 20 20 20 20 20 20 20 20 69 66 20 5b 20 22            if [ "
0fb0: 24 61 72 67 22 20 3d 20 22 2d 2d 24 7b 66 6c 61  $arg" = "--${fla
0fc0: 67 7d 2d 24 7b 6f 70 7d 22 20 5d 0a 20 20 20 20  g}-${op}" ].    
0fd0: 20 20 20 20 20 20 20 20 74 68 65 6e 0a 20 20 20          then.   
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 3d               op=
0ff0: 24 28 65 63 68 6f 20 24 6f 70 20 7c 20 74 72 20  $(echo $op | tr 
1000: 27 61 2d 7a 2d 27 20 27 41 2d 5a 5f 27 29 0a 20  'a-z-' 'A-Z_'). 
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1020: 6c 61 67 3d 24 28 65 63 68 6f 20 24 66 6c 61 67  lag=$(echo $flag
1030: 20 7c 20 74 72 20 27 61 2d 7a 27 20 27 41 2d 5a   | tr 'a-z' 'A-Z
1040: 27 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ').             
1050: 20 20 20 6c 6f 63 61 6c 20 76 3d 22 43 46 47 5f     local v="CFG_
1060: 24 7b 66 6c 61 67 7d 5f 24 7b 6f 70 7d 22 0a 20  ${flag}_${op}". 
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1080: 76 61 6c 20 24 76 3d 31 0a 20 20 20 20 20 20 20  val $v=1.       
1090: 20 20 20 20 20 20 20 20 20 70 75 74 76 61 72 20           putvar 
10a0: 24 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  $v.            f
10b0: 69 0a 20 20 20 20 20 20 20 20 64 6f 6e 65 0a 20  i.        done. 
10c0: 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20     else.        
10d0: 69 66 20 5b 20 21 20 2d 7a 20 22 24 7b 4d 45 54  if [ ! -z "${MET
10e0: 41 2d 7d 22 20 5d 0a 20 20 20 20 20 20 20 20 74  A-}" ].        t
10f0: 68 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  hen.            
1100: 6f 70 3d 22 24 6f 70 3d 3c 24 4d 45 54 41 3e 22  op="$op=<$META>"
1110: 0a 20 20 20 20 20 20 20 20 66 69 0a 20 20 20 20  .        fi.    
1120: 20 20 20 20 70 72 69 6e 74 66 20 22 20 20 20 20      printf "    
1130: 2d 2d 25 2d 33 30 73 20 25 73 5c 6e 22 20 22 24  --%-30s %s\n" "$
1140: 66 6c 61 67 2d 24 6f 70 22 20 22 24 64 6f 63 22  flag-$op" "$doc"
1150: 0a 20 20 20 20 20 66 69 0a 7d 0a 0a 66 6c 61 67  .     fi.}..flag
1160: 28 29 20 7b 0a 20 20 20 20 42 4f 4f 4c 5f 4f 50  () {.    BOOL_OP
1170: 54 49 4f 4e 53 3d 22 24 42 4f 4f 4c 5f 4f 50 54  TIONS="$BOOL_OPT
1180: 49 4f 4e 53 20 24 31 22 0a 0a 20 20 20 20 6c 6f  IONS $1"..    lo
1190: 63 61 6c 20 6f 70 3d 24 31 0a 20 20 20 20 73 68  cal op=$1.    sh
11a0: 69 66 74 0a 20 20 20 20 6c 6f 63 61 6c 20 64 6f  ift.    local do
11b0: 63 3d 22 24 2a 22 0a 0a 20 20 20 20 69 66 20 5b  c="$*"..    if [
11c0: 20 24 48 45 4c 50 20 2d 65 71 20 30 20 5d 0a 20   $HELP -eq 0 ]. 
11d0: 20 20 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20     then.        
11e0: 66 6f 72 20 61 72 67 20 69 6e 20 24 43 46 47 5f  for arg in $CFG_
11f0: 41 52 47 53 0a 20 20 20 20 20 20 20 20 64 6f 0a  ARGS.        do.
1200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 5b              if [
1210: 20 22 24 61 72 67 22 20 3d 20 22 2d 2d 24 7b 6f   "$arg" = "--${o
1220: 70 7d 22 20 5d 0a 20 20 20 20 20 20 20 20 20 20  p}" ].          
1230: 20 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 20    then.         
1240: 20 20 20 20 20 20 20 6f 70 3d 24 28 65 63 68 6f         op=$(echo
1250: 20 24 6f 70 20 7c 20 74 72 20 27 61 2d 7a 2d 27   $op | tr 'a-z-'
1260: 20 27 41 2d 5a 5f 27 29 0a 20 20 20 20 20 20 20   'A-Z_').       
1270: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 20 76           local v
1280: 3d 22 43 46 47 5f 24 7b 6f 70 7d 22 0a 20 20 20  ="CFG_${op}".   
1290: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61               eva
12a0: 6c 20 24 76 3d 31 0a 20 20 20 20 20 20 20 20 20  l $v=1.         
12b0: 20 20 20 20 20 20 20 70 75 74 76 61 72 20 24 76         putvar $v
12c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 0a  .            fi.
12d0: 20 20 20 20 20 20 20 20 64 6f 6e 65 0a 20 20 20          done.   
12e0: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66   else.        if
12f0: 20 5b 20 21 20 2d 7a 20 22 24 7b 4d 45 54 41 2d   [ ! -z "${META-
1300: 7d 22 20 5d 0a 20 20 20 20 20 20 20 20 74 68 65  }" ].        the
1310: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  n.            op
1320: 3d 22 24 6f 70 3d 3c 24 4d 45 54 41 3e 22 0a 20  ="$op=<$META>". 
1330: 20 20 20 20 20 20 20 66 69 0a 20 20 20 20 20 20         fi.      
1340: 20 20 70 72 69 6e 74 66 20 22 20 20 20 20 2d 2d    printf "    --
1350: 25 2d 33 30 73 20 25 73 5c 6e 22 20 22 24 6f 70  %-30s %s\n" "$op
1360: 22 20 22 24 64 6f 63 22 0a 20 20 20 20 20 66 69  " "$doc".     fi
1370: 0a 7d 0a 0a 76 61 6c 69 64 61 74 65 5f 6f 70 74  .}..validate_opt
1380: 20 28 29 20 7b 0a 20 20 20 20 66 6f 72 20 61 72   () {.    for ar
1390: 67 20 69 6e 20 24 43 46 47 5f 41 52 47 53 0a 20  g in $CFG_ARGS. 
13a0: 20 20 20 64 6f 0a 20 20 20 20 20 20 20 20 6c 6f     do.        lo
13b0: 63 61 6c 20 69 73 5f 61 72 67 5f 76 61 6c 69 64  cal is_arg_valid
13c0: 3d 30 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6f  =0.        for o
13d0: 70 74 69 6f 6e 20 69 6e 20 24 42 4f 4f 4c 5f 4f  ption in $BOOL_O
13e0: 50 54 49 4f 4e 53 0a 20 20 20 20 20 20 20 20 64  PTIONS.        d
13f0: 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  o.            if
1400: 20 74 65 73 74 20 2d 2d 64 69 73 61 62 6c 65 2d   test --disable-
1410: 24 6f 70 74 69 6f 6e 20 3d 20 24 61 72 67 0a 20  $option = $arg. 
1420: 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6e 0a             then.
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1440: 69 73 5f 61 72 67 5f 76 61 6c 69 64 3d 31 0a 20  is_arg_valid=1. 
1450: 20 20 20 20 20 20 20 20 20 20 20 66 69 0a 20 20             fi.  
1460: 20 20 20 20 20 20 20 20 20 20 69 66 20 74 65 73            if tes
1470: 74 20 2d 2d 65 6e 61 62 6c 65 2d 24 6f 70 74 69  t --enable-$opti
1480: 6f 6e 20 3d 20 24 61 72 67 0a 20 20 20 20 20 20  on = $arg.      
1490: 20 20 20 20 20 20 74 68 65 6e 0a 20 20 20 20 20        then.     
14a0: 20 20 20 20 20 20 20 20 20 20 20 69 73 5f 61 72             is_ar
14b0: 67 5f 76 61 6c 69 64 3d 31 0a 20 20 20 20 20 20  g_valid=1.      
14c0: 20 20 20 20 20 20 66 69 0a 20 20 20 20 20 20 20        fi.       
14d0: 20 20 20 20 20 69 66 20 74 65 73 74 20 2d 2d 24       if test --$
14e0: 6f 70 74 69 6f 6e 20 3d 20 24 61 72 67 0a 20 20  option = $arg.  
14f0: 20 20 20 20 20 20 20 20 20 20 74 68 65 6e 0a 20            then. 
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1510: 73 5f 61 72 67 5f 76 61 6c 69 64 3d 31 0a 20 20  s_arg_valid=1.  
1520: 20 20 20 20 20 20 20 20 20 20 66 69 0a 20 20 20            fi.   
1530: 20 20 20 20 20 64 6f 6e 65 0a 20 20 20 20 20 20       done.      
1540: 20 20 66 6f 72 20 6f 70 74 69 6f 6e 20 69 6e 20    for option in 
1550: 24 56 41 4c 5f 4f 50 54 49 4f 4e 53 0a 20 20 20  $VAL_OPTIONS.   
1560: 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 20       do.        
1570: 20 20 20 20 69 66 20 65 63 68 6f 20 22 24 61 72      if echo "$ar
1580: 67 22 20 7c 20 67 72 65 70 20 2d 71 20 2d 2d 20  g" | grep -q -- 
1590: 22 2d 2d 24 6f 70 74 69 6f 6e 3d 22 0a 20 20 20  "--$option=".   
15a0: 20 20 20 20 20 20 20 20 20 74 68 65 6e 0a 20 20           then.  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
15c0: 5f 61 72 67 5f 76 61 6c 69 64 3d 31 0a 20 20 20  _arg_valid=1.   
15d0: 20 20 20 20 20 20 20 20 20 66 69 0a 20 20 20 20           fi.    
15e0: 20 20 20 20 64 6f 6e 65 0a 20 20 20 20 20 20 20      done.       
15f0: 20 69 66 20 5b 20 22 24 61 72 67 22 20 3d 20 22   if [ "$arg" = "
1600: 2d 2d 68 65 6c 70 22 20 5d 0a 20 20 20 20 20 20  --help" ].      
1610: 20 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 20    then.         
1620: 20 20 20 65 63 68 6f 0a 20 20 20 20 20 20 20 20     echo.        
1630: 20 20 20 20 65 63 68 6f 20 22 4e 6f 20 6d 6f 72      echo "No mor
1640: 65 20 68 65 6c 70 20 61 76 61 69 6c 61 62 6c 65  e help available
1650: 20 66 6f 72 20 43 6f 6e 66 69 67 75 72 65 20 6f   for Configure o
1660: 70 74 69 6f 6e 73 2c 22 0a 20 20 20 20 20 20 20  ptions,".       
1670: 20 20 20 20 20 65 63 68 6f 20 22 63 68 65 63 6b       echo "check
1680: 20 74 68 65 20 57 69 6b 69 20 6f 72 20 6a 6f 69   the Wiki or joi
1690: 6e 20 6f 75 72 20 49 52 43 20 63 68 61 6e 6e 65  n our IRC channe
16a0: 6c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  l".            b
16b0: 72 65 61 6b 0a 20 20 20 20 20 20 20 20 65 6c 73  reak.        els
16c0: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  e.            if
16d0: 20 74 65 73 74 20 24 69 73 5f 61 72 67 5f 76 61   test $is_arg_va
16e0: 6c 69 64 20 2d 65 71 20 30 0a 20 20 20 20 20 20  lid -eq 0.      
16f0: 20 20 20 20 20 20 74 68 65 6e 0a 20 20 20 20 20        then.     
1700: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 20 22             err "
1710: 4f 70 74 69 6f 6e 20 27 24 61 72 67 27 20 69 73  Option '$arg' is
1720: 20 6e 6f 74 20 72 65 63 6f 67 6e 69 7a 65 64 22   not recognized"
1730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 0a  .            fi.
1740: 20 20 20 20 20 20 20 20 66 69 0a 20 20 20 20 64          fi.    d
1750: 6f 6e 65 0a 7d 0a 0a 61 62 73 6f 6c 75 74 69 66  one.}..absolutif
1760: 79 28 29 20 7b 0a 20 20 20 20 6c 6f 63 61 6c 20  y() {.    local 
1770: 66 69 6c 65 5f 70 61 74 68 3d 22 24 31 22 0a 20  file_path="$1". 
1780: 20 20 20 6c 6f 63 61 6c 20 66 69 6c 65 5f 70 61     local file_pa
1790: 74 68 5f 64 69 72 6e 61 6d 65 3d 22 24 28 64 69  th_dirname="$(di
17a0: 72 6e 61 6d 65 20 22 24 66 69 6c 65 5f 70 61 74  rname "$file_pat
17b0: 68 22 29 22 0a 20 20 20 20 6c 6f 63 61 6c 20 66  h")".    local f
17c0: 69 6c 65 5f 70 61 74 68 5f 62 61 73 65 6e 61 6d  ile_path_basenam
17d0: 65 3d 22 24 28 62 61 73 65 6e 61 6d 65 20 22 24  e="$(basename "$
17e0: 66 69 6c 65 5f 70 61 74 68 22 29 22 0a 20 20 20  file_path")".   
17f0: 20 6c 6f 63 61 6c 20 66 69 6c 65 5f 61 62 73 5f   local file_abs_
1800: 70 61 74 68 3d 22 24 28 61 62 73 5f 70 61 74 68  path="$(abs_path
1810: 20 22 24 66 69 6c 65 5f 70 61 74 68 5f 64 69 72   "$file_path_dir
1820: 6e 61 6d 65 22 29 22 0a 20 20 20 20 6c 6f 63 61  name")".    loca
1830: 6c 20 66 69 6c 65 5f 70 61 74 68 3d 22 24 66 69  l file_path="$fi
1840: 6c 65 5f 61 62 73 5f 70 61 74 68 2f 24 66 69 6c  le_abs_path/$fil
1850: 65 5f 70 61 74 68 5f 62 61 73 65 6e 61 6d 65 22  e_path_basename"
1860: 0a 20 20 20 20 23 20 54 68 69 73 20 69 73 20 74  .    # This is t
1870: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 0a  he return value.
1880: 20 20 20 20 52 45 54 56 41 4c 3d 22 24 66 69 6c      RETVAL="$fil
1890: 65 5f 70 61 74 68 22 0a 7d 0a 0a 23 20 50 72 69  e_path".}..# Pri
18a0: 6e 74 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65  nts the absolute
18b0: 20 70 61 74 68 20 6f 66 20 61 20 64 69 72 65 63   path of a direc
18c0: 74 6f 72 79 20 74 6f 20 73 74 64 6f 75 74 0a 61  tory to stdout.a
18d0: 62 73 5f 70 61 74 68 28 29 20 7b 0a 20 20 20 20  bs_path() {.    
18e0: 6c 6f 63 61 6c 20 70 61 74 68 3d 22 24 31 22 0a  local path="$1".
18f0: 20 20 20 20 23 20 55 6e 73 65 74 20 43 44 50 41      # Unset CDPA
1900: 54 48 20 62 65 63 61 75 73 65 20 69 74 20 63 61  TH because it ca
1910: 75 73 65 73 20 68 61 76 6f 6b 3a 20 69 74 20 6d  uses havok: it m
1920: 61 6b 65 73 20 74 68 65 20 64 65 73 74 69 6e 61  akes the destina
1930: 74 69 6f 6e 20 75 6e 70 72 65 64 69 63 74 61 62  tion unpredictab
1940: 6c 65 0a 20 20 20 20 23 20 61 6e 64 20 74 72 69  le.    # and tri
1950: 67 67 65 72 73 20 27 63 64 27 20 74 6f 20 70 72  ggers 'cd' to pr
1960: 69 6e 74 20 74 68 65 20 70 61 74 68 20 74 6f 20  int the path to 
1970: 73 74 64 6f 75 74 2e 20 52 6f 75 74 65 20 60 63  stdout. Route `c
1980: 64 60 27 73 20 6f 75 74 70 75 74 20 74 6f 20 2f  d`'s output to /
1990: 64 65 76 2f 6e 75 6c 6c 0a 20 20 20 20 23 20 66  dev/null.    # f
19a0: 6f 72 20 67 6f 6f 64 20 6d 65 61 73 75 72 65 2e  or good measure.
19b0: 0a 20 20 20 20 28 75 6e 73 65 74 20 43 44 50 41  .    (unset CDPA
19c0: 54 48 20 26 26 20 63 64 20 22 24 70 61 74 68 22  TH && cd "$path"
19d0: 20 3e 20 2f 64 65 76 2f 6e 75 6c 6c 20 26 26 20   > /dev/null && 
19e0: 70 77 64 29 0a 7d 0a 0a 67 65 74 5f 68 6f 73 74  pwd).}..get_host
19f0: 5f 74 72 69 70 6c 65 28 29 20 7b 0a 20 20 20 20  _triple() {.    
1a00: 6c 6f 63 61 6c 20 5f 75 6e 61 6d 65 5f 76 61 6c  local _uname_val
1a10: 75 65 3d 24 28 75 6e 61 6d 65 20 2d 73 29 0a 20  ue=$(uname -s). 
1a20: 20 20 20 6c 6f 63 61 6c 20 5f 6f 73 74 79 70 65     local _ostype
1a30: 0a 20 20 20 20 63 61 73 65 20 24 5f 75 6e 61 6d  .    case $_unam
1a40: 65 5f 76 61 6c 75 65 20 69 6e 0a 0a 09 4c 69 6e  e_value in...Lin
1a50: 75 78 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ux).            
1a60: 5f 6f 73 74 79 70 65 3d 75 6e 6b 6e 6f 77 6e 2d  _ostype=unknown-
1a70: 6c 69 6e 75 78 2d 67 6e 75 0a 20 20 20 20 20 20  linux-gnu.      
1a80: 20 20 20 20 20 20 3b 3b 0a 0a 09 46 72 65 65 42        ;;...FreeB
1a90: 53 44 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  SD).            
1aa0: 5f 6f 73 74 79 70 65 3d 75 6e 6b 6e 6f 77 6e 2d  _ostype=unknown-
1ab0: 66 72 65 65 62 73 64 0a 20 20 20 20 20 20 20 20  freebsd.        
1ac0: 20 20 20 20 3b 3b 0a 0a 09 44 72 61 67 6f 6e 46      ;;...DragonF
1ad0: 6c 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly).            
1ae0: 5f 6f 73 74 79 70 65 3d 75 6e 6b 6e 6f 77 6e 2d  _ostype=unknown-
1af0: 64 72 61 67 6f 6e 66 6c 79 0a 20 20 20 20 20 20  dragonfly.      
1b00: 20 20 20 20 20 20 3b 3b 0a 0a 09 42 69 74 72 69        ;;...Bitri
1b10: 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  g).            _
1b20: 6f 73 74 79 70 65 3d 75 6e 6b 6e 6f 77 6e 2d 62  ostype=unknown-b
1b30: 69 74 72 69 67 0a 20 20 20 20 20 20 20 20 20 20  itrig.          
1b40: 20 20 3b 3b 0a 0a 09 4e 65 74 42 53 44 29 0a 20    ;;...NetBSD). 
1b50: 20 20 20 20 20 20 20 20 20 20 20 5f 6f 73 74 79             _osty
1b60: 70 65 3d 75 6e 6b 6e 6f 77 6e 2d 6e 65 74 62 73  pe=unknown-netbs
1b70: 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b  d.            ;;
1b80: 0a 0a 09 4f 70 65 6e 42 53 44 29 0a 20 20 20 20  ...OpenBSD).    
1b90: 20 20 20 20 20 20 20 20 5f 6f 73 74 79 70 65 3d          _ostype=
1ba0: 75 6e 6b 6e 6f 77 6e 2d 6f 70 65 6e 62 73 64 0a  unknown-openbsd.
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 0a 0a              ;;..
1bc0: 09 44 61 72 77 69 6e 29 0a 20 20 20 20 20 20 20  .Darwin).       
1bd0: 20 20 20 20 20 5f 6f 73 74 79 70 65 3d 61 70 70       _ostype=app
1be0: 6c 65 2d 64 61 72 77 69 6e 0a 20 20 20 20 20 20  le-darwin.      
1bf0: 20 20 20 20 20 20 3b 3b 0a 0a 09 4d 49 4e 47 57        ;;...MINGW
1c00: 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  *).            _
1c10: 6f 73 74 79 70 65 3d 70 63 2d 77 69 6e 64 6f 77  ostype=pc-window
1c20: 73 2d 67 6e 75 0a 20 20 20 20 20 20 20 20 20 20  s-gnu.          
1c30: 20 20 3b 3b 0a 0a 09 4d 53 59 53 2a 29 0a 20 20    ;;...MSYS*).  
1c40: 20 20 20 20 20 20 20 20 20 20 5f 6f 73 74 79 70            _ostyp
1c50: 65 3d 70 63 2d 77 69 6e 64 6f 77 73 2d 67 6e 75  e=pc-windows-gnu
1c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 0a  .            ;;.
1c70: 0a 09 43 59 47 57 49 4e 2a 29 0a 20 20 20 20 20  ..CYGWIN*).     
1c80: 20 20 20 20 20 20 20 5f 6f 73 74 79 70 65 3d 70         _ostype=p
1c90: 63 2d 77 69 6e 64 6f 77 73 2d 67 6e 75 0a 20 20  c-windows-gnu.  
1ca0: 20 20 20 20 20 20 20 20 20 20 3b 3b 0a 09 48 61            ;;..Ha
1cb0: 69 6b 75 29 0a 20 20 20 20 20 20 20 20 20 20 20  iku).           
1cc0: 20 5f 6f 73 74 79 70 65 3d 75 6e 6b 6e 6f 77 6e   _ostype=unknown
1cd0: 2d 68 61 69 6b 75 0a 20 20 20 20 20 20 20 20 20  -haiku.         
1ce0: 20 20 20 3b 3b 0a 0a 09 2a 29 0a 09 20 20 20 20     ;;...*)..    
1cf0: 65 72 72 20 22 75 6e 6b 6e 6f 77 6e 20 76 61 6c  err "unknown val
1d00: 75 65 20 66 72 6f 6d 20 75 6e 61 6d 65 20 2d 73  ue from uname -s
1d10: 3a 20 24 5f 75 6e 61 6d 65 5f 76 61 6c 75 65 22  : $_uname_value"
1d20: 0a 09 20 20 20 20 3b 3b 0a 20 20 20 20 65 73 61  ..    ;;.    esa
1d30: 63 0a 0a 20 20 20 20 52 45 54 56 41 4c 3d 22 24  c..    RETVAL="$
1d40: 5f 6f 73 74 79 70 65 22 0a 7d 0a 0a 75 6e 69 6e  _ostype".}..unin
1d50: 73 74 61 6c 6c 5f 6c 65 67 61 63 79 28 29 20 7b  stall_legacy() {
1d60: 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 61 62 73 5f  .    local _abs_
1d70: 6c 69 62 64 69 72 3d 22 24 31 22 0a 0a 20 20 20  libdir="$1"..   
1d80: 20 6c 6f 63 61 6c 20 5f 75 6e 69 6e 73 74 61 6c   local _uninstal
1d90: 6c 65 64 5f 73 6f 6d 65 74 68 69 6e 67 3d 66 61  led_something=fa
1da0: 6c 73 65 0a 0a 20 20 20 20 23 20 52 65 70 6c 61  lse..    # Repla
1db0: 63 65 20 63 6f 6d 6d 61 73 20 69 6e 20 6c 65 67  ce commas in leg
1dc0: 61 63 79 20 6d 61 6e 69 66 65 73 74 20 6c 69 73  acy manifest lis
1dd0: 74 20 77 69 74 68 20 73 70 61 63 65 73 0a 20 20  t with spaces.  
1de0: 20 20 5f 6c 65 67 61 63 79 5f 6d 61 6e 69 66 65    _legacy_manife
1df0: 73 74 5f 64 69 72 73 3d 60 65 63 68 6f 20 22 24  st_dirs=`echo "$
1e00: 54 45 4d 50 4c 41 54 45 5f 4c 45 47 41 43 59 5f  TEMPLATE_LEGACY_
1e10: 4d 41 4e 49 46 45 53 54 5f 44 49 52 53 22 20 7c  MANIFEST_DIRS" |
1e20: 20 73 65 64 20 22 73 2f 2c 2f 20 2f 67 22 60 0a   sed "s/,/ /g"`.
1e30: 0a 20 20 20 20 23 20 55 6e 69 6e 73 74 61 6c 6c  .    # Uninstall
1e40: 20 66 72 6f 6d 20 6c 65 67 61 63 79 20 6d 61 6e   from legacy man
1e50: 69 66 65 73 74 73 0a 20 20 20 20 6c 6f 63 61 6c  ifests.    local
1e60: 20 5f 6d 64 0a 20 20 20 20 66 6f 72 20 5f 6d 64   _md.    for _md
1e70: 20 69 6e 20 24 5f 6c 65 67 61 63 79 5f 6d 61 6e   in $_legacy_man
1e80: 69 66 65 73 74 5f 64 69 72 73 3b 20 64 6f 0a 09  ifest_dirs; do..
1e90: 23 20 46 69 72 73 74 2c 20 75 6e 69 6e 73 74 61  # First, uninsta
1ea0: 6c 6c 20 66 72 6f 6d 20 74 68 65 20 69 6e 73 74  ll from the inst
1eb0: 61 6c 6c 61 74 69 6f 6e 20 70 72 65 66 69 78 2e  allation prefix.
1ec0: 0a 09 23 20 45 72 72 6f 72 73 20 61 72 65 20 77  ..# Errors are w
1ed0: 61 72 6e 69 6e 67 73 20 2d 20 74 72 79 20 74 6f  arnings - try to
1ee0: 20 72 6d 20 65 76 65 72 79 74 68 69 6e 67 20 69   rm everything i
1ef0: 6e 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 65  n the manifest e
1f00: 76 65 6e 20 69 66 20 73 6f 6d 65 20 66 61 69 6c  ven if some fail
1f10: 2e 0a 09 69 66 20 5b 20 2d 66 20 22 24 5f 61 62  ...if [ -f "$_ab
1f20: 73 5f 6c 69 62 64 69 72 2f 24 5f 6d 64 2f 6d 61  s_libdir/$_md/ma
1f30: 6e 69 66 65 73 74 22 20 5d 0a 09 74 68 65 6e 0a  nifest" ]..then.
1f40: 0a 09 20 20 20 20 23 20 69 74 65 72 61 74 65 20  ..    # iterate 
1f50: 74 68 72 6f 75 67 68 20 69 6e 73 74 61 6c 6c 65  through installe
1f60: 64 20 6d 61 6e 69 66 65 73 74 20 61 6e 64 20 72  d manifest and r
1f70: 65 6d 6f 76 65 20 66 69 6c 65 73 0a 09 20 20 20  emove files..   
1f80: 20 6c 6f 63 61 6c 20 5f 70 3b 0a 09 20 20 20 20   local _p;..    
1f90: 77 68 69 6c 65 20 72 65 61 64 20 5f 70 3b 20 64  while read _p; d
1fa0: 6f 0a 09 09 23 20 74 68 65 20 69 6e 73 74 61 6c  o...# the instal
1fb0: 6c 65 64 20 6d 61 6e 69 66 65 73 74 20 63 6f 6e  led manifest con
1fc0: 74 61 69 6e 73 20 61 62 73 6f 6c 75 74 65 20 70  tains absolute p
1fd0: 61 74 68 73 0a 09 09 6d 73 67 20 22 72 65 6d 6f  aths...msg "remo
1fe0: 76 69 6e 67 20 6c 65 67 61 63 79 20 66 69 6c 65  ving legacy file
1ff0: 20 24 5f 70 22 0a 09 09 69 66 20 5b 20 2d 66 20   $_p"...if [ -f 
2000: 22 24 5f 70 22 20 5d 0a 09 09 74 68 65 6e 0a 09  "$_p" ]...then..
2010: 09 20 20 20 20 72 75 6e 20 72 6d 20 2d 66 20 22  .    run rm -f "
2020: 24 5f 70 22 0a 09 09 20 20 20 20 77 61 6e 74 5f  $_p"...    want_
2030: 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f 20 72 65  ok "failed to re
2040: 6d 6f 76 65 20 24 5f 70 22 0a 09 09 65 6c 73 65  move $_p"...else
2050: 0a 09 09 20 20 20 20 77 61 72 6e 20 22 73 75 70  ...    warn "sup
2060: 70 6f 73 65 64 6c 79 20 69 6e 73 74 61 6c 6c 65  posedly installe
2070: 64 20 66 69 6c 65 20 24 5f 70 20 64 6f 65 73 20  d file $_p does 
2080: 6e 6f 74 20 65 78 69 73 74 21 22 0a 09 09 66 69  not exist!"...fi
2090: 0a 09 20 20 20 20 64 6f 6e 65 20 3c 20 22 24 5f  ..    done < "$_
20a0: 61 62 73 5f 6c 69 62 64 69 72 2f 24 5f 6d 64 2f  abs_libdir/$_md/
20b0: 6d 61 6e 69 66 65 73 74 22 0a 0a 09 20 20 20 20  manifest"...    
20c0: 23 20 49 66 20 77 65 20 66 61 69 6c 20 74 6f 20  # If we fail to 
20d0: 72 65 6d 6f 76 65 20 24 6d 64 20 62 65 6c 6f 77  remove $md below
20e0: 2c 20 74 68 65 6e 20 74 68 65 0a 09 20 20 20 20  , then the..    
20f0: 23 20 69 6e 73 74 61 6c 6c 65 64 20 6d 61 6e 69  # installed mani
2100: 66 65 73 74 20 77 69 6c 6c 20 73 74 69 6c 6c 20  fest will still 
2110: 62 65 20 66 75 6c 6c 3b 20 74 68 65 20 69 6e 73  be full; the ins
2120: 74 61 6c 6c 65 64 20 6d 61 6e 69 66 65 73 74 0a  talled manifest.
2130: 09 20 20 20 20 23 20 6e 65 65 64 73 20 74 6f 20  .    # needs to 
2140: 62 65 20 65 6d 70 74 79 20 62 65 66 6f 72 65 20  be empty before 
2150: 69 6e 73 74 61 6c 6c 2e 0a 09 20 20 20 20 6d 73  install...    ms
2160: 67 20 22 72 65 6d 6f 76 69 6e 67 20 6c 65 67 61  g "removing lega
2170: 63 79 20 6d 61 6e 69 66 65 73 74 20 24 5f 61 62  cy manifest $_ab
2180: 73 5f 6c 69 62 64 69 72 2f 24 5f 6d 64 2f 6d 61  s_libdir/$_md/ma
2190: 6e 69 66 65 73 74 22 0a 09 20 20 20 20 72 75 6e  nifest"..    run
21a0: 20 72 6d 20 2d 66 20 22 24 5f 61 62 73 5f 6c 69   rm -f "$_abs_li
21b0: 62 64 69 72 2f 24 5f 6d 64 2f 6d 61 6e 69 66 65  bdir/$_md/manife
21c0: 73 74 22 0a 09 20 20 20 20 23 20 46 6f 72 20 74  st"..    # For t
21d0: 68 65 20 61 62 6f 76 65 20 72 65 61 73 6f 6e 2c  he above reason,
21e0: 20 74 68 69 73 20 69 73 20 61 20 68 61 72 64 20   this is a hard 
21f0: 65 72 72 6f 72 0a 09 20 20 20 20 6e 65 65 64 5f  error..    need_
2200: 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f 20 72 65  ok "failed to re
2210: 6d 6f 76 65 20 69 6e 73 74 61 6c 6c 65 64 20 6d  move installed m
2220: 61 6e 69 66 65 73 74 22 0a 0a 09 20 20 20 20 23  anifest"...    #
2230: 20 52 65 6d 6f 76 65 20 24 74 65 6d 70 6c 61 74   Remove $templat
2240: 65 5f 72 65 6c 5f 6d 61 6e 69 66 65 73 74 5f 64  e_rel_manifest_d
2250: 69 72 20 64 69 72 65 63 74 6f 72 79 0a 09 20 20  ir directory..  
2260: 20 20 6d 73 67 20 22 72 65 6d 6f 76 69 6e 67 20    msg "removing 
2270: 6c 65 67 61 63 79 20 6d 61 6e 69 66 65 73 74 20  legacy manifest 
2280: 64 69 72 20 24 5f 61 62 73 5f 6c 69 62 64 69 72  dir $_abs_libdir
2290: 2f 24 5f 6d 64 22 0a 09 20 20 20 20 72 75 6e 20  /$_md"..    run 
22a0: 72 6d 20 2d 52 20 22 24 5f 61 62 73 5f 6c 69 62  rm -R "$_abs_lib
22b0: 64 69 72 2f 24 5f 6d 64 22 0a 09 20 20 20 20 77  dir/$_md"..    w
22c0: 61 6e 74 5f 6f 6b 20 22 66 61 69 6c 65 64 20 74  ant_ok "failed t
22d0: 6f 20 72 65 6d 6f 76 65 20 24 5f 6d 64 22 0a 0a  o remove $_md"..
22e0: 09 20 20 20 20 5f 75 6e 69 6e 73 74 61 6c 6c 65  .    _uninstalle
22f0: 64 5f 73 6f 6d 65 74 68 69 6e 67 3d 74 72 75 65  d_something=true
2300: 0a 09 66 69 0a 20 20 20 20 64 6f 6e 65 0a 0a 20  ..fi.    done.. 
2310: 20 20 20 52 45 54 56 41 4c 3d 22 24 5f 75 6e 69     RETVAL="$_uni
2320: 6e 73 74 61 6c 6c 65 64 5f 73 6f 6d 65 74 68 69  nstalled_somethi
2330: 6e 67 22 0a 7d 0a 0a 75 6e 69 6e 73 74 61 6c 6c  ng".}..uninstall
2340: 5f 63 6f 6d 70 6f 6e 65 6e 74 73 28 29 20 7b 0a  _components() {.
2350: 20 20 20 20 6c 6f 63 61 6c 20 5f 61 62 73 5f 6c      local _abs_l
2360: 69 62 64 69 72 3d 22 24 31 22 0a 20 20 20 20 6c  ibdir="$1".    l
2370: 6f 63 61 6c 20 5f 64 65 73 74 5f 70 72 65 66 69  ocal _dest_prefi
2380: 78 3d 22 24 32 22 0a 20 20 20 20 6c 6f 63 61 6c  x="$2".    local
2390: 20 5f 63 6f 6d 70 6f 6e 65 6e 74 73 3d 22 24 33   _components="$3
23a0: 22 0a 0a 20 20 20 20 23 20 57 65 27 72 65 20 67  "..    # We're g
23b0: 6f 69 6e 67 20 74 6f 20 73 74 61 72 74 20 62 79  oing to start by
23c0: 20 75 6e 69 6e 73 74 61 6c 6c 69 6e 67 20 65 78   uninstalling ex
23d0: 69 73 74 69 6e 67 20 63 6f 6d 70 6f 6e 65 6e 74  isting component
23e0: 73 2e 20 54 68 69 73 0a 20 20 20 20 6c 6f 63 61  s. This.    loca
23f0: 6c 20 5f 75 6e 69 6e 73 74 61 6c 6c 65 64 5f 73  l _uninstalled_s
2400: 6f 6d 65 74 68 69 6e 67 3d 66 61 6c 73 65 0a 0a  omething=false..
2410: 20 20 20 20 23 20 46 69 72 73 74 2c 20 74 72 79      # First, try
2420: 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 27 6c   removing any 'l
2430: 65 67 61 63 79 27 20 6d 61 6e 69 66 65 73 74 73  egacy' manifests
2440: 20 66 72 6f 6d 20 62 65 66 6f 72 65 0a 20 20 20   from before.   
2450: 20 23 20 72 75 73 74 2d 69 6e 73 74 61 6c 6c 65   # rust-installe
2460: 72 0a 20 20 20 20 75 6e 69 6e 73 74 61 6c 6c 5f  r.    uninstall_
2470: 6c 65 67 61 63 79 20 22 24 5f 61 62 73 5f 6c 69  legacy "$_abs_li
2480: 62 64 69 72 22 0a 20 20 20 20 61 73 73 65 72 74  bdir".    assert
2490: 5f 6e 7a 20 22 24 52 45 54 56 41 4c 22 2c 20 22  _nz "$RETVAL", "
24a0: 52 45 54 56 41 4c 22 0a 20 20 20 20 69 66 20 5b  RETVAL".    if [
24b0: 20 22 24 52 45 54 56 41 4c 22 20 3d 20 74 72 75   "$RETVAL" = tru
24c0: 65 20 5d 3b 20 74 68 65 6e 0a 09 5f 75 6e 69 6e  e ]; then.._unin
24d0: 73 74 61 6c 6c 65 64 5f 73 6f 6d 65 74 68 69 6e  stalled_somethin
24e0: 67 3d 74 72 75 65 3b 0a 20 20 20 20 66 69 0a 0a  g=true;.    fi..
24f0: 20 20 20 20 23 20 4c 6f 61 64 20 74 68 65 20 76      # Load the v
2500: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e  ersion of the in
2510: 73 74 61 6c 6c 65 64 20 69 6e 73 74 61 6c 6c 65  stalled installe
2520: 72 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 69 6e 73  r.    local _ins
2530: 74 61 6c 6c 65 64 5f 76 65 72 73 69 6f 6e 3d 0a  talled_version=.
2540: 20 20 20 20 69 66 20 5b 20 2d 66 20 22 24 61 62      if [ -f "$ab
2550: 73 5f 6c 69 62 64 69 72 2f 24 54 45 4d 50 4c 41  s_libdir/$TEMPLA
2560: 54 45 5f 52 45 4c 5f 4d 41 4e 49 46 45 53 54 5f  TE_REL_MANIFEST_
2570: 44 49 52 2f 72 75 73 74 2d 69 6e 73 74 61 6c 6c  DIR/rust-install
2580: 65 72 2d 76 65 72 73 69 6f 6e 22 20 5d 3b 20 74  er-version" ]; t
2590: 68 65 6e 0a 09 5f 69 6e 73 74 61 6c 6c 65 64 5f  hen.._installed_
25a0: 76 65 72 73 69 6f 6e 3d 60 63 61 74 20 22 24 5f  version=`cat "$_
25b0: 61 62 73 5f 6c 69 62 64 69 72 2f 24 54 45 4d 50  abs_libdir/$TEMP
25c0: 4c 41 54 45 5f 52 45 4c 5f 4d 41 4e 49 46 45 53  LATE_REL_MANIFES
25d0: 54 5f 44 49 52 2f 72 75 73 74 2d 69 6e 73 74 61  T_DIR/rust-insta
25e0: 6c 6c 65 72 2d 76 65 72 73 69 6f 6e 22 60 0a 0a  ller-version"`..
25f0: 09 23 20 53 61 6e 69 74 79 20 63 68 65 63 6b 0a  .# Sanity check.
2600: 09 69 66 20 5b 20 21 20 2d 6e 20 22 24 5f 69 6e  .if [ ! -n "$_in
2610: 73 74 61 6c 6c 65 64 5f 76 65 72 73 69 6f 6e 22  stalled_version"
2620: 20 5d 3b 20 74 68 65 6e 20 63 72 69 74 69 63 61   ]; then critica
2630: 6c 5f 65 72 72 20 22 72 75 73 74 20 69 6e 73 74  l_err "rust inst
2640: 61 6c 6c 65 72 20 76 65 72 73 69 6f 6e 20 69 73  aller version is
2650: 20 65 6d 70 74 79 22 3b 20 66 69 0a 20 20 20 20   empty"; fi.    
2660: 66 69 0a 0a 20 20 20 20 23 20 49 66 20 74 68 65  fi..    # If the
2670: 72 65 27 73 20 73 6f 6d 65 74 68 69 6e 67 20 69  re's something i
2680: 6e 73 74 61 6c 6c 65 64 2c 20 74 68 65 6e 20 75  nstalled, then u
2690: 6e 69 6e 73 74 61 6c 6c 0a 20 20 20 20 69 66 20  ninstall.    if 
26a0: 5b 20 2d 6e 20 22 24 5f 69 6e 73 74 61 6c 6c 65  [ -n "$_installe
26b0: 64 5f 76 65 72 73 69 6f 6e 22 20 5d 3b 20 74 68  d_version" ]; th
26c0: 65 6e 0a 09 23 20 43 68 65 63 6b 20 74 68 65 20  en..# Check the 
26d0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 69  version of the i
26e0: 6e 73 74 61 6c 6c 65 64 20 69 6e 73 74 61 6c 6c  nstalled install
26f0: 65 72 0a 09 63 61 73 65 20 22 24 5f 69 6e 73 74  er..case "$_inst
2700: 61 6c 6c 65 64 5f 76 65 72 73 69 6f 6e 22 20 69  alled_version" i
2710: 6e 0a 0a 09 20 20 20 20 23 20 49 66 20 74 68 69  n...    # If thi
2720: 73 20 69 73 20 61 20 70 72 65 76 69 6f 75 73 20  s is a previous 
2730: 76 65 72 73 69 6f 6e 2c 20 74 68 65 6e 20 75 70  version, then up
2740: 67 72 61 64 65 20 69 6e 20 70 6c 61 63 65 20 74  grade in place t
2750: 6f 20 74 68 65 0a 09 20 20 20 20 23 20 63 75 72  o the..    # cur
2760: 72 65 6e 74 20 76 65 72 73 69 6f 6e 20 62 65 66  rent version bef
2770: 6f 72 65 20 75 6e 69 6e 73 74 61 6c 6c 69 6e 67  ore uninstalling
2780: 2e 0a 09 20 20 20 20 32 20 29 0a 09 09 23 20 54  ...    2 )...# T
2790: 68 65 20 6f 6e 6c 79 20 63 68 61 6e 67 65 20 62  he only change b
27a0: 65 74 77 65 65 6e 20 76 65 72 73 69 6f 6e 20 32  etween version 2
27b0: 20 2d 3e 20 33 20 69 73 20 74 68 61 74 20 63 6f   -> 3 is that co
27c0: 6d 70 6f 6e 65 6e 74 73 20 61 72 65 20 70 6c 61  mponents are pla
27d0: 63 65 64 0a 09 09 23 20 69 6e 20 73 75 62 64 69  ced...# in subdi
27e0: 72 65 63 74 6f 72 69 65 73 20 6f 66 20 74 68 65  rectories of the
27f0: 20 69 6e 73 74 61 6c 6c 65 72 20 74 61 72 62 61   installer tarba
2800: 6c 6c 2e 20 54 68 65 72 65 20 61 72 65 20 6e 6f  ll. There are no
2810: 20 63 68 61 6e 67 65 73 0a 09 09 23 20 74 6f 20   changes...# to 
2820: 74 68 65 20 69 6e 73 74 61 6c 6c 65 64 20 64 61  the installed da
2830: 74 61 20 66 6f 72 6d 61 74 2c 20 73 6f 20 6e 6f  ta format, so no
2840: 74 68 69 6e 67 20 74 6f 20 64 6f 2e 0a 09 09 3b  thing to do....;
2850: 3b 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 69  ;...    # This i
2860: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 65  s the current ve
2870: 72 73 69 6f 6e 2e 20 4e 6f 74 68 69 6e 67 20 6e  rsion. Nothing n
2880: 65 65 64 20 74 6f 20 62 65 20 64 6f 6e 65 20 65  eed to be done e
2890: 78 63 65 70 74 20 75 6e 69 6e 73 74 61 6c 6c 2e  xcept uninstall.
28a0: 0a 09 20 20 20 20 22 24 54 45 4d 50 4c 41 54 45  ..    "$TEMPLATE
28b0: 5f 52 55 53 54 5f 49 4e 53 54 41 4c 4c 45 52 5f  _RUST_INSTALLER_
28c0: 56 45 52 53 49 4f 4e 22 29 0a 09 09 3b 3b 0a 0a  VERSION")...;;..
28d0: 09 20 20 20 20 23 20 49 66 20 74 68 69 73 20 69  .    # If this i
28e0: 73 20 61 6e 20 75 6e 6b 6e 6f 77 6e 20 28 66 75  s an unknown (fu
28f0: 74 75 72 65 29 20 76 65 72 73 69 6f 6e 20 74 68  ture) version th
2900: 65 6e 20 62 61 69 6c 2e 0a 09 20 20 20 20 2a 20  en bail...    * 
2910: 29 0a 09 09 65 63 68 6f 20 22 54 68 65 20 63 6f  )...echo "The co
2920: 70 79 20 6f 66 20 24 54 45 4d 50 4c 41 54 45 5f  py of $TEMPLATE_
2930: 50 52 4f 44 55 43 54 5f 4e 41 4d 45 20 61 74 20  PRODUCT_NAME at 
2940: 24 5f 64 65 73 74 5f 70 72 65 66 69 78 20 77 61  $_dest_prefix wa
2950: 73 20 69 6e 73 74 61 6c 6c 65 64 20 75 73 69 6e  s installed usin
2960: 67 20 61 6e 22 0a 09 09 65 63 68 6f 20 22 75 6e  g an"...echo "un
2970: 6b 6e 6f 77 6e 20 76 65 72 73 69 6f 6e 20 28 24  known version ($
2980: 5f 69 6e 73 74 61 6c 6c 65 64 5f 76 65 72 73 69  _installed_versi
2990: 6f 6e 29 20 6f 66 20 72 75 73 74 2d 69 6e 73 74  on) of rust-inst
29a0: 61 6c 6c 65 72 2e 22 0a 09 09 65 63 68 6f 20 22  aller."...echo "
29b0: 55 6e 69 6e 73 74 61 6c 6c 20 69 74 20 66 69 72  Uninstall it fir
29c0: 73 74 20 77 69 74 68 20 74 68 65 20 69 6e 73 74  st with the inst
29d0: 61 6c 6c 65 72 20 75 73 65 64 20 66 6f 72 20 74  aller used for t
29e0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 6e 73 74  he original inst
29f0: 61 6c 6c 61 74 69 6f 6e 22 0a 09 09 65 63 68 6f  allation"...echo
2a00: 20 22 62 65 66 6f 72 65 20 63 6f 6e 74 69 6e 75   "before continu
2a10: 69 6e 67 2e 22 0a 09 09 65 78 69 74 20 31 0a 09  ing."...exit 1..
2a20: 09 3b 3b 0a 09 65 73 61 63 0a 0a 09 6c 6f 63 61  .;;..esac...loca
2a30: 6c 20 5f 6d 64 3d 22 24 5f 61 62 73 5f 6c 69 62  l _md="$_abs_lib
2a40: 64 69 72 2f 24 54 45 4d 50 4c 41 54 45 5f 52 45  dir/$TEMPLATE_RE
2a50: 4c 5f 4d 41 4e 49 46 45 53 54 5f 44 49 52 22 0a  L_MANIFEST_DIR".
2a60: 09 6c 6f 63 61 6c 20 5f 69 6e 73 74 61 6c 6c 65  .local _installe
2a70: 64 5f 63 6f 6d 70 6f 6e 65 6e 74 73 3d 22 24 28  d_components="$(
2a80: 63 61 74 20 22 24 5f 6d 64 2f 63 6f 6d 70 6f 6e  cat "$_md/compon
2a90: 65 6e 74 73 22 29 22 0a 0a 09 23 20 55 6e 69 6e  ents")"...# Unin
2aa0: 73 74 61 6c 6c 20 28 6f 75 72 20 63 6f 6d 70 6f  stall (our compo
2ab0: 6e 65 6e 74 73 20 6f 6e 6c 79 29 20 62 65 66 6f  nents only) befo
2ac0: 72 65 20 72 65 69 6e 73 74 61 6c 6c 69 6e 67 0a  re reinstalling.
2ad0: 09 6c 6f 63 61 6c 20 5f 61 76 61 69 6c 61 62 6c  .local _availabl
2ae0: 65 5f 63 6f 6d 70 6f 6e 65 6e 74 0a 09 66 6f 72  e_component..for
2af0: 20 5f 61 76 61 69 6c 61 62 6c 65 5f 63 6f 6d 70   _available_comp
2b00: 6f 6e 65 6e 74 20 69 6e 20 24 5f 63 6f 6d 70 6f  onent in $_compo
2b10: 6e 65 6e 74 73 3b 20 64 6f 0a 09 20 20 20 20 6c  nents; do..    l
2b20: 6f 63 61 6c 20 5f 69 6e 73 74 61 6c 6c 65 64 5f  ocal _installed_
2b30: 63 6f 6d 70 6f 6e 65 6e 74 0a 09 20 20 20 20 66  component..    f
2b40: 6f 72 20 5f 69 6e 73 74 61 6c 6c 65 64 5f 63 6f  or _installed_co
2b50: 6d 70 6f 6e 65 6e 74 20 69 6e 20 24 5f 69 6e 73  mponent in $_ins
2b60: 74 61 6c 6c 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74  talled_component
2b70: 73 3b 20 64 6f 0a 09 09 69 66 20 5b 20 22 24 5f  s; do...if [ "$_
2b80: 61 76 61 69 6c 61 62 6c 65 5f 63 6f 6d 70 6f 6e  available_compon
2b90: 65 6e 74 22 20 3d 20 22 24 5f 69 6e 73 74 61 6c  ent" = "$_instal
2ba0: 6c 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 22 20 5d  led_component" ]
2bb0: 3b 20 74 68 65 6e 0a 09 09 20 20 20 20 6d 73 67  ; then...    msg
2bc0: 20 22 75 6e 69 6e 73 74 61 6c 6c 69 6e 67 20 63   "uninstalling c
2bd0: 6f 6d 70 6f 6e 65 6e 74 20 27 24 5f 61 76 61 69  omponent '$_avai
2be0: 6c 61 62 6c 65 5f 63 6f 6d 70 6f 6e 65 6e 74 27  lable_component'
2bf0: 22 0a 09 09 20 20 20 20 6c 6f 63 61 6c 20 5f 63  "...    local _c
2c00: 6f 6d 70 6f 6e 65 6e 74 5f 6d 61 6e 69 66 65 73  omponent_manifes
2c10: 74 3d 22 24 5f 6d 64 2f 6d 61 6e 69 66 65 73 74  t="$_md/manifest
2c20: 2d 24 5f 69 6e 73 74 61 6c 6c 65 64 5f 63 6f 6d  -$_installed_com
2c30: 70 6f 6e 65 6e 74 22 0a 0a 09 09 20 20 20 20 23  ponent"....    #
2c40: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 3a 20 74   Sanity check: t
2c50: 68 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20 61  here should be a
2c60: 20 63 6f 6d 70 6f 6e 65 6e 74 20 6d 61 6e 69 66   component manif
2c70: 65 73 74 0a 09 09 20 20 20 20 69 66 20 5b 20 21  est...    if [ !
2c80: 20 2d 66 20 22 24 5f 63 6f 6d 70 6f 6e 65 6e 74   -f "$_component
2c90: 5f 6d 61 6e 69 66 65 73 74 22 20 5d 3b 20 74 68  _manifest" ]; th
2ca0: 65 6e 0a 09 09 09 63 72 69 74 69 63 61 6c 5f 65  en....critical_e
2cb0: 72 72 20 22 69 6e 73 74 61 6c 6c 65 64 20 63 6f  rr "installed co
2cc0: 6d 70 6f 6e 65 6e 74 20 27 24 5f 69 6e 73 74 61  mponent '$_insta
2cd0: 6c 6c 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 27 20  lled_component' 
2ce0: 68 61 73 20 6e 6f 20 6d 61 6e 69 66 65 73 74 22  has no manifest"
2cf0: 0a 09 09 20 20 20 20 66 69 0a 0a 09 09 20 20 20  ...    fi....   
2d00: 20 23 20 49 74 65 72 61 74 65 20 74 68 72 6f 75   # Iterate throu
2d10: 67 68 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6d  gh installed com
2d20: 70 6f 6e 65 6e 74 20 6d 61 6e 69 66 65 73 74 20  ponent manifest 
2d30: 61 6e 64 20 72 65 6d 6f 76 65 20 66 69 6c 65 73  and remove files
2d40: 0a 09 09 20 20 20 20 6c 6f 63 61 6c 20 5f 64 69  ...    local _di
2d50: 72 65 63 74 69 76 65 0a 09 09 20 20 20 20 77 68  rective...    wh
2d60: 69 6c 65 20 72 65 61 64 20 5f 64 69 72 65 63 74  ile read _direct
2d70: 69 76 65 3b 20 64 6f 0a 0a 09 09 09 6c 6f 63 61  ive; do.....loca
2d80: 6c 20 5f 63 6f 6d 6d 61 6e 64 3d 60 65 63 68 6f  l _command=`echo
2d90: 20 24 5f 64 69 72 65 63 74 69 76 65 20 7c 20 63   $_directive | c
2da0: 75 74 20 2d 66 31 20 2d 64 3a 60 0a 09 09 09 6c  ut -f1 -d:`....l
2db0: 6f 63 61 6c 20 5f 66 69 6c 65 3d 60 65 63 68 6f  ocal _file=`echo
2dc0: 20 24 5f 64 69 72 65 63 74 69 76 65 20 7c 20 63   $_directive | c
2dd0: 75 74 20 2d 66 32 20 2d 64 3a 60 0a 0a 09 09 09  ut -f2 -d:`.....
2de0: 23 20 53 61 6e 69 74 79 20 63 68 65 63 6b 73 0a  # Sanity checks.
2df0: 09 09 09 69 66 20 5b 20 21 20 2d 6e 20 22 24 5f  ...if [ ! -n "$_
2e00: 63 6f 6d 6d 61 6e 64 22 20 5d 3b 20 74 68 65 6e  command" ]; then
2e10: 20 63 72 69 74 69 63 61 6c 5f 65 72 72 20 22 6d   critical_err "m
2e20: 61 6c 66 6f 72 6d 65 64 20 69 6e 73 74 61 6c 6c  alformed install
2e30: 61 74 69 6f 6e 20 64 69 72 65 63 74 69 76 65 22  ation directive"
2e40: 3b 20 66 69 0a 09 09 09 69 66 20 5b 20 21 20 2d  ; fi....if [ ! -
2e50: 6e 20 22 24 5f 66 69 6c 65 22 20 5d 3b 20 74 68  n "$_file" ]; th
2e60: 65 6e 20 63 72 69 74 69 63 61 6c 5f 65 72 72 20  en critical_err 
2e70: 22 6d 61 6c 66 6f 72 6d 65 64 20 69 6e 73 74 61  "malformed insta
2e80: 6c 6c 61 74 69 6f 6e 20 64 69 72 65 63 74 69 76  llation directiv
2e90: 65 22 3b 20 66 69 0a 0a 09 09 09 63 61 73 65 20  e"; fi.....case 
2ea0: 22 24 5f 63 6f 6d 6d 61 6e 64 22 20 69 6e 0a 09  "$_command" in..
2eb0: 09 09 20 20 20 20 66 69 6c 65 29 0a 09 09 09 09  ..    file).....
2ec0: 76 65 72 62 6f 73 65 5f 6d 73 67 20 22 72 65 6d  verbose_msg "rem
2ed0: 6f 76 69 6e 67 20 66 69 6c 65 20 24 5f 66 69 6c  oving file $_fil
2ee0: 65 22 0a 09 09 09 09 69 66 20 5b 20 2d 66 20 22  e".....if [ -f "
2ef0: 24 5f 66 69 6c 65 22 20 5d 3b 20 74 68 65 6e 0a  $_file" ]; then.
2f00: 09 09 09 09 20 20 20 20 72 75 6e 20 72 6d 20 2d  ....    run rm -
2f10: 66 20 22 24 5f 66 69 6c 65 22 0a 09 09 09 09 20  f "$_file"..... 
2f20: 20 20 20 77 61 6e 74 5f 6f 6b 20 22 66 61 69 6c     want_ok "fail
2f30: 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 24 5f 66  ed to remove $_f
2f40: 69 6c 65 22 0a 09 09 09 09 65 6c 73 65 0a 09 09  ile".....else...
2f50: 09 09 20 20 20 20 77 61 72 6e 20 22 73 75 70 70  ..    warn "supp
2f60: 6f 73 65 64 6c 79 20 69 6e 73 74 61 6c 6c 65 64  osedly installed
2f70: 20 66 69 6c 65 20 24 5f 66 69 6c 65 20 64 6f 65   file $_file doe
2f80: 73 20 6e 6f 74 20 65 78 69 73 74 21 22 0a 09 09  s not exist!"...
2f90: 09 09 66 69 0a 09 09 09 09 3b 3b 0a 0a 09 09 09  ..fi.....;;.....
2fa0: 20 20 20 20 64 69 72 29 0a 09 09 09 09 76 65 72      dir).....ver
2fb0: 62 6f 73 65 5f 6d 73 67 20 22 72 65 6d 6f 76 69  bose_msg "removi
2fc0: 6e 67 20 64 69 72 65 63 74 6f 72 79 20 24 5f 66  ng directory $_f
2fd0: 69 6c 65 22 0a 09 09 09 09 72 75 6e 20 72 6d 20  ile".....run rm 
2fe0: 2d 72 20 22 24 5f 66 69 6c 65 22 0a 09 09 09 09  -r "$_file".....
2ff0: 77 61 6e 74 5f 6f 6b 20 22 75 6e 61 62 6c 65 20  want_ok "unable 
3000: 74 6f 20 72 65 6d 6f 76 65 20 64 69 72 65 63 74  to remove direct
3010: 6f 72 79 20 24 5f 66 69 6c 65 22 0a 09 09 09 09  ory $_file".....
3020: 3b 3b 0a 0a 09 09 09 20 20 20 20 2a 29 0a 09 09  ;;.....    *)...
3030: 09 09 63 72 69 74 69 63 61 6c 5f 65 72 72 20 22  ..critical_err "
3040: 75 6e 6b 6e 6f 77 6e 20 69 6e 73 74 61 6c 6c 61  unknown installa
3050: 74 69 6f 6e 20 64 69 72 65 63 74 69 76 65 22 0a  tion directive".
3060: 09 09 09 09 3b 3b 0a 09 09 09 65 73 61 63 0a 0a  ....;;....esac..
3070: 09 09 20 20 20 20 64 6f 6e 65 20 3c 20 22 24 5f  ..    done < "$_
3080: 63 6f 6d 70 6f 6e 65 6e 74 5f 6d 61 6e 69 66 65  component_manife
3090: 73 74 22 0a 0a 09 09 20 20 20 20 23 20 52 65 6d  st"....    # Rem
30a0: 6f 76 65 20 74 68 65 20 69 6e 73 74 61 6c 6c 65  ove the installe
30b0: 64 20 63 6f 6d 70 6f 6e 65 6e 74 20 6d 61 6e 69  d component mani
30c0: 66 65 73 74 0a 09 09 20 20 20 20 76 65 72 62 6f  fest...    verbo
30d0: 73 65 5f 6d 73 67 20 22 72 65 6d 6f 76 69 6e 67  se_msg "removing
30e0: 20 63 6f 6d 70 6f 6e 65 6e 74 20 6d 61 6e 69 66   component manif
30f0: 65 73 74 20 24 5f 63 6f 6d 70 6f 6e 65 6e 74 5f  est $_component_
3100: 6d 61 6e 69 66 65 73 74 22 0a 09 09 20 20 20 20  manifest"...    
3110: 72 75 6e 20 72 6d 20 22 24 5f 63 6f 6d 70 6f 6e  run rm "$_compon
3120: 65 6e 74 5f 6d 61 6e 69 66 65 73 74 22 0a 09 09  ent_manifest"...
3130: 20 20 20 20 23 20 54 68 69 73 20 69 73 20 61 20      # This is a 
3140: 68 61 72 64 20 65 72 72 6f 72 20 62 65 63 61 75  hard error becau
3150: 73 65 20 74 68 65 20 69 6e 73 74 61 6c 6c 61 74  se the installat
3160: 69 6f 6e 20 69 73 20 75 6e 72 65 63 6f 76 65 72  ion is unrecover
3170: 61 62 6c 65 0a 09 09 20 20 20 20 63 72 69 74 69  able...    criti
3180: 63 61 6c 5f 6e 65 65 64 5f 6f 6b 20 22 66 61 69  cal_need_ok "fai
3190: 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 69 6e  led to remove in
31a0: 73 74 61 6c 6c 65 64 20 6d 61 6e 69 66 65 73 74  stalled manifest
31b0: 20 66 6f 72 20 63 6f 6d 70 6f 6e 65 6e 74 20 27   for component '
31c0: 24 5f 69 6e 73 74 61 6c 6c 65 64 5f 63 6f 6d 70  $_installed_comp
31d0: 6f 6e 65 6e 74 27 22 0a 0a 09 09 20 20 20 20 23  onent'"....    #
31e0: 20 55 70 64 61 74 65 20 74 68 65 20 69 6e 73 74   Update the inst
31f0: 61 6c 6c 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 20  alled component 
3200: 6c 69 73 74 0a 09 09 20 20 20 20 6c 6f 63 61 6c  list...    local
3210: 20 5f 6d 6f 64 69 66 69 65 64 5f 63 6f 6d 70 6f   _modified_compo
3220: 6e 65 6e 74 73 3d 22 24 28 73 65 64 20 22 2f 5e  nents="$(sed "/^
3230: 24 5f 69 6e 73 74 61 6c 6c 65 64 5f 63 6f 6d 70  $_installed_comp
3240: 6f 6e 65 6e 74 5c 24 2f 64 22 20 22 24 5f 6d 64  onent\$/d" "$_md
3250: 2f 63 6f 6d 70 6f 6e 65 6e 74 73 22 29 22 0a 09  /components")"..
3260: 09 20 20 20 20 77 72 69 74 65 5f 74 6f 5f 66 69  .    write_to_fi
3270: 6c 65 20 22 24 5f 6d 6f 64 69 66 69 65 64 5f 63  le "$_modified_c
3280: 6f 6d 70 6f 6e 65 6e 74 73 22 20 22 24 5f 6d 64  omponents" "$_md
3290: 2f 63 6f 6d 70 6f 6e 65 6e 74 73 22 0a 09 09 20  /components"... 
32a0: 20 20 20 63 72 69 74 69 63 61 6c 5f 6e 65 65 64     critical_need
32b0: 5f 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f 20 75  _ok "failed to u
32c0: 70 64 61 74 65 20 69 6e 73 74 61 6c 6c 65 64 20  pdate installed 
32d0: 63 6f 6d 70 6f 6e 65 6e 74 20 6c 69 73 74 22 0a  component list".
32e0: 09 09 66 69 0a 09 20 20 20 20 64 6f 6e 65 0a 09  ..fi..    done..
32f0: 64 6f 6e 65 0a 0a 09 23 20 49 66 20 74 68 65 72  done...# If ther
3300: 65 20 61 72 65 20 6e 6f 20 72 65 6d 61 69 6e 69  e are no remaini
3310: 6e 67 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 64 65  ng components de
3320: 6c 65 74 65 20 74 68 65 20 6d 61 6e 69 66 65 73  lete the manifes
3330: 74 20 64 69 72 65 63 74 6f 72 79 2c 0a 09 23 20  t directory,..# 
3340: 62 75 74 20 6f 6e 6c 79 20 69 66 20 77 65 27 72  but only if we'r
3350: 65 20 64 6f 69 6e 67 20 61 6e 20 75 6e 69 6e 73  e doing an unins
3360: 74 61 6c 6c 20 2d 20 69 66 20 77 65 27 72 65 20  tall - if we're 
3370: 64 6f 69 6e 67 20 61 6e 20 69 6e 73 74 61 6c 6c  doing an install
3380: 2c 0a 09 23 20 74 68 65 6e 20 6c 65 61 76 65 20  ,..# then leave 
3390: 74 68 65 20 6d 61 6e 69 66 65 73 74 20 64 69 72  the manifest dir
33a0: 65 63 74 6f 72 79 20 61 72 6f 75 6e 64 20 74 6f  ectory around to
33b0: 20 68 61 6e 67 20 6f 6e 74 6f 20 74 68 65 20 6c   hang onto the l
33c0: 6f 67 73 2c 0a 09 23 20 61 6e 64 20 61 6e 79 20  ogs,..# and any 
33d0: 66 69 6c 65 73 20 6e 6f 74 20 6d 61 6e 61 67 65  files not manage
33e0: 64 20 62 79 20 74 68 65 20 69 6e 73 74 61 6c 6c  d by the install
33f0: 65 72 2e 0a 09 69 66 20 5b 20 2d 6e 20 22 24 7b  er...if [ -n "${
3400: 43 46 47 5f 55 4e 49 4e 53 54 41 4c 4c 2d 7d 22  CFG_UNINSTALL-}"
3410: 20 5d 3b 20 74 68 65 6e 0a 09 20 20 20 20 6c 6f   ]; then..    lo
3420: 63 61 6c 20 5f 72 65 6d 61 69 6e 69 6e 67 5f 63  cal _remaining_c
3430: 6f 6d 70 6f 6e 65 6e 74 73 3d 22 24 28 63 61 74  omponents="$(cat
3440: 20 22 24 5f 6d 64 2f 63 6f 6d 70 6f 6e 65 6e 74   "$_md/component
3450: 73 22 29 22 0a 09 20 20 20 20 69 66 20 5b 20 21  s")"..    if [ !
3460: 20 2d 6e 20 22 24 5f 72 65 6d 61 69 6e 69 6e 67   -n "$_remaining
3470: 5f 63 6f 6d 70 6f 6e 65 6e 74 73 22 20 5d 3b 20  _components" ]; 
3480: 74 68 65 6e 0a 09 09 76 65 72 62 6f 73 65 5f 6d  then...verbose_m
3490: 73 67 20 22 72 65 6d 6f 76 69 6e 67 20 6d 61 6e  sg "removing man
34a0: 69 66 65 73 74 20 64 69 72 65 63 74 6f 72 79 20  ifest directory 
34b0: 24 5f 6d 64 22 0a 09 09 72 75 6e 20 72 6d 20 2d  $_md"...run rm -
34c0: 72 20 22 24 5f 6d 64 22 0a 09 09 77 61 6e 74 5f  r "$_md"...want_
34d0: 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f 20 72 65  ok "failed to re
34e0: 6d 6f 76 65 20 24 5f 6d 64 22 0a 0a 09 09 6d 61  move $_md"....ma
34f0: 79 62 65 5f 75 6e 63 6f 6e 66 69 67 75 72 65 5f  ybe_unconfigure_
3500: 6c 64 0a 09 20 20 20 20 66 69 0a 09 66 69 0a 0a  ld..    fi..fi..
3510: 09 5f 75 6e 69 6e 73 74 61 6c 6c 65 64 5f 73 6f  ._uninstalled_so
3520: 6d 65 74 68 69 6e 67 3d 74 72 75 65 0a 20 20 20  mething=true.   
3530: 20 66 69 0a 0a 20 20 20 20 23 20 54 68 65 72 65   fi..    # There
3540: 27 73 20 6e 6f 20 69 6e 73 74 61 6c 6c 65 64 20  's no installed 
3550: 76 65 72 73 69 6f 6e 2e 20 49 66 20 77 65 20 77  version. If we w
3560: 65 72 65 20 61 73 6b 65 64 20 74 6f 20 75 6e 69  ere asked to uni
3570: 6e 73 74 61 6c 6c 2c 20 74 68 65 6e 20 74 68 61  nstall, then tha
3580: 74 27 73 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 20  t's a problem.. 
3590: 20 20 20 69 66 20 5b 20 2d 6e 20 22 24 7b 43 46     if [ -n "${CF
35a0: 47 5f 55 4e 49 4e 53 54 41 4c 4c 2d 7d 22 20 2d  G_UNINSTALL-}" -
35b0: 61 20 22 24 5f 75 6e 69 6e 73 74 61 6c 6c 65 64  a "$_uninstalled
35c0: 5f 73 6f 6d 65 74 68 69 6e 67 22 20 3d 20 66 61  _something" = fa
35d0: 6c 73 65 20 5d 0a 20 20 20 20 74 68 65 6e 0a 09  lse ].    then..
35e0: 65 72 72 20 22 75 6e 61 62 6c 65 20 74 6f 20 66  err "unable to f
35f0: 69 6e 64 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  ind installation
3600: 20 6d 61 6e 69 66 65 73 74 20 61 74 20 24 43 46   manifest at $CF
3610: 47 5f 4c 49 42 44 49 52 2f 24 54 45 4d 50 4c 41  G_LIBDIR/$TEMPLA
3620: 54 45 5f 52 45 4c 5f 4d 41 4e 49 46 45 53 54 5f  TE_REL_MANIFEST_
3630: 44 49 52 22 0a 20 20 20 20 66 69 0a 7d 0a 0a 69  DIR".    fi.}..i
3640: 6e 73 74 61 6c 6c 5f 63 6f 6d 70 6f 6e 65 6e 74  nstall_component
3650: 73 28 29 20 7b 0a 20 20 20 20 6c 6f 63 61 6c 20  s() {.    local 
3660: 5f 73 72 63 5f 64 69 72 3d 22 24 31 22 0a 20 20  _src_dir="$1".  
3670: 20 20 6c 6f 63 61 6c 20 5f 61 62 73 5f 6c 69 62    local _abs_lib
3680: 64 69 72 3d 22 24 32 22 0a 20 20 20 20 6c 6f 63  dir="$2".    loc
3690: 61 6c 20 5f 64 65 73 74 5f 70 72 65 66 69 78 3d  al _dest_prefix=
36a0: 22 24 33 22 0a 20 20 20 20 6c 6f 63 61 6c 20 5f  "$3".    local _
36b0: 63 6f 6d 70 6f 6e 65 6e 74 73 3d 22 24 34 22 0a  components="$4".
36c0: 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 63 6f 6d 70  .    local _comp
36d0: 6f 6e 65 6e 74 0a 20 20 20 20 66 6f 72 20 5f 63  onent.    for _c
36e0: 6f 6d 70 6f 6e 65 6e 74 20 69 6e 20 24 5f 63 6f  omponent in $_co
36f0: 6d 70 6f 6e 65 6e 74 73 3b 20 64 6f 0a 0a 09 6d  mponents; do...m
3700: 73 67 20 22 69 6e 73 74 61 6c 6c 69 6e 67 20 63  sg "installing c
3710: 6f 6d 70 6f 6e 65 6e 74 20 27 24 5f 63 6f 6d 70  omponent '$_comp
3720: 6f 6e 65 6e 74 27 22 0a 0a 09 23 20 54 68 65 20  onent'"...# The 
3730: 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  file name of the
3740: 20 6d 61 6e 69 66 65 73 74 20 77 65 27 72 65 20   manifest we're 
3750: 69 6e 73 74 61 6c 6c 69 6e 67 20 66 72 6f 6d 0a  installing from.
3760: 09 6c 6f 63 61 6c 20 5f 69 6e 70 75 74 5f 6d 61  .local _input_ma
3770: 6e 69 66 65 73 74 3d 22 24 5f 73 72 63 5f 64 69  nifest="$_src_di
3780: 72 2f 24 5f 63 6f 6d 70 6f 6e 65 6e 74 2f 6d 61  r/$_component/ma
3790: 6e 69 66 65 73 74 2e 69 6e 22 0a 0a 09 23 20 53  nifest.in"...# S
37a0: 61 6e 69 74 79 20 63 68 65 63 6b 3a 20 64 6f 20  anity check: do 
37b0: 77 65 20 68 61 76 65 20 6f 75 72 20 69 6e 70 75  we have our inpu
37c0: 74 20 6d 61 6e 69 66 65 73 74 73 3f 0a 09 69 66  t manifests?..if
37d0: 20 5b 20 21 20 2d 66 20 22 24 5f 69 6e 70 75 74   [ ! -f "$_input
37e0: 5f 6d 61 6e 69 66 65 73 74 22 20 5d 3b 20 74 68  _manifest" ]; th
37f0: 65 6e 0a 09 20 20 20 20 63 72 69 74 69 63 61 6c  en..    critical
3800: 5f 65 72 72 20 22 6d 61 6e 69 66 65 73 74 20 66  _err "manifest f
3810: 6f 72 20 24 5f 63 6f 6d 70 6f 6e 65 6e 74 20 64  or $_component d
3820: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 61 74  oes not exist at
3830: 20 24 5f 69 6e 70 75 74 5f 6d 61 6e 69 66 65 73   $_input_manifes
3840: 74 22 0a 09 66 69 0a 0a 09 23 20 54 68 65 20 69  t"..fi...# The i
3850: 6e 73 74 61 6c 6c 65 64 20 6d 61 6e 69 66 65 73  nstalled manifes
3860: 74 20 64 69 72 65 63 74 6f 72 79 0a 09 6c 6f 63  t directory..loc
3870: 61 6c 20 5f 6d 64 3d 22 24 5f 61 62 73 5f 6c 69  al _md="$_abs_li
3880: 62 64 69 72 2f 24 54 45 4d 50 4c 41 54 45 5f 52  bdir/$TEMPLATE_R
3890: 45 4c 5f 4d 41 4e 49 46 45 53 54 5f 44 49 52 22  EL_MANIFEST_DIR"
38a0: 0a 0a 09 23 20 54 68 65 20 66 69 6c 65 20 6e 61  ...# The file na
38b0: 6d 65 20 6f 66 20 74 68 65 20 6d 61 6e 69 66 65  me of the manife
38c0: 73 74 20 77 65 27 72 65 20 67 6f 69 6e 67 20 74  st we're going t
38d0: 6f 20 63 72 65 61 74 65 20 64 75 72 69 6e 67 20  o create during 
38e0: 69 6e 73 74 61 6c 6c 0a 09 6c 6f 63 61 6c 20 5f  install..local _
38f0: 69 6e 73 74 61 6c 6c 65 64 5f 6d 61 6e 69 66 65  installed_manife
3900: 73 74 3d 22 24 5f 6d 64 2f 6d 61 6e 69 66 65 73  st="$_md/manifes
3910: 74 2d 24 5f 63 6f 6d 70 6f 6e 65 6e 74 22 0a 0a  t-$_component"..
3920: 09 23 20 43 72 65 61 74 65 20 74 68 65 20 69 6e  .# Create the in
3930: 73 74 61 6c 6c 65 64 20 6d 61 6e 69 66 65 73 74  stalled manifest
3940: 2c 20 77 68 69 63 68 20 77 65 20 77 69 6c 6c 20  , which we will 
3950: 66 69 6c 6c 20 69 6e 20 77 69 74 68 20 61 62 73  fill in with abs
3960: 6f 6c 75 74 65 20 66 69 6c 65 20 70 61 74 68 73  olute file paths
3970: 0a 09 74 6f 75 63 68 20 22 24 5f 69 6e 73 74 61  ..touch "$_insta
3980: 6c 6c 65 64 5f 6d 61 6e 69 66 65 73 74 22 0a 09  lled_manifest"..
3990: 63 72 69 74 69 63 61 6c 5f 6e 65 65 64 5f 6f 6b  critical_need_ok
39a0: 20 22 66 61 69 6c 65 64 20 74 6f 20 63 72 65 61   "failed to crea
39b0: 74 65 20 69 6e 73 74 61 6c 6c 65 64 20 6d 61 6e  te installed man
39c0: 69 66 65 73 74 22 0a 0a 09 23 20 41 64 64 20 74  ifest"...# Add t
39d0: 68 69 73 20 63 6f 6d 70 6f 6e 65 6e 74 20 74 6f  his component to
39e0: 20 74 68 65 20 69 6e 73 74 61 6c 6c 65 64 20 63   the installed c
39f0: 6f 6d 70 6f 6e 65 6e 74 20 6c 69 73 74 0a 09 61  omponent list..a
3a00: 70 70 65 6e 64 5f 74 6f 5f 66 69 6c 65 20 22 24  ppend_to_file "$
3a10: 5f 63 6f 6d 70 6f 6e 65 6e 74 22 20 22 24 5f 6d  _component" "$_m
3a20: 64 2f 63 6f 6d 70 6f 6e 65 6e 74 73 22 0a 09 63  d/components"..c
3a30: 72 69 74 69 63 61 6c 5f 6e 65 65 64 5f 6f 6b 20  ritical_need_ok 
3a40: 22 66 61 69 6c 65 64 20 74 6f 20 75 70 64 61 74  "failed to updat
3a50: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6c 69 73  e components lis
3a60: 74 20 66 6f 72 20 24 5f 63 6f 6d 70 6f 6e 65 6e  t for $_componen
3a70: 74 22 0a 0a 09 23 20 4e 6f 77 20 69 6e 73 74 61  t"...# Now insta
3a80: 6c 6c 2c 20 69 74 65 72 61 74 65 20 74 68 72 6f  ll, iterate thro
3a90: 75 67 68 20 74 68 65 20 6e 65 77 20 6d 61 6e 69  ugh the new mani
3aa0: 66 65 73 74 20 61 6e 64 20 63 6f 70 79 20 66 69  fest and copy fi
3ab0: 6c 65 73 0a 09 6c 6f 63 61 6c 20 5f 64 69 72 65  les..local _dire
3ac0: 63 74 69 76 65 0a 09 77 68 69 6c 65 20 72 65 61  ctive..while rea
3ad0: 64 20 5f 64 69 72 65 63 74 69 76 65 3b 20 64 6f  d _directive; do
3ae0: 0a 0a 09 20 20 20 20 6c 6f 63 61 6c 20 5f 63 6f  ...    local _co
3af0: 6d 6d 61 6e 64 3d 60 65 63 68 6f 20 24 5f 64 69  mmand=`echo $_di
3b00: 72 65 63 74 69 76 65 20 7c 20 63 75 74 20 2d 66  rective | cut -f
3b10: 31 20 2d 64 3a 60 0a 09 20 20 20 20 6c 6f 63 61  1 -d:`..    loca
3b20: 6c 20 5f 66 69 6c 65 3d 60 65 63 68 6f 20 24 5f  l _file=`echo $_
3b30: 64 69 72 65 63 74 69 76 65 20 7c 20 63 75 74 20  directive | cut 
3b40: 2d 66 32 20 2d 64 3a 60 0a 0a 09 20 20 20 20 23  -f2 -d:`...    #
3b50: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 73 0a 09   Sanity checks..
3b60: 20 20 20 20 69 66 20 5b 20 21 20 2d 6e 20 22 24      if [ ! -n "$
3b70: 5f 63 6f 6d 6d 61 6e 64 22 20 5d 3b 20 74 68 65  _command" ]; the
3b80: 6e 20 63 72 69 74 69 63 61 6c 5f 65 72 72 20 22  n critical_err "
3b90: 6d 61 6c 66 6f 72 6d 65 64 20 69 6e 73 74 61 6c  malformed instal
3ba0: 6c 61 74 69 6f 6e 20 64 69 72 65 63 74 69 76 65  lation directive
3bb0: 22 3b 20 66 69 0a 09 20 20 20 20 69 66 20 5b 20  "; fi..    if [ 
3bc0: 21 20 2d 6e 20 22 24 5f 66 69 6c 65 22 20 5d 3b  ! -n "$_file" ];
3bd0: 20 74 68 65 6e 20 63 72 69 74 69 63 61 6c 5f 65   then critical_e
3be0: 72 72 20 22 6d 61 6c 66 6f 72 6d 65 64 20 69 6e  rr "malformed in
3bf0: 73 74 61 6c 6c 61 74 69 6f 6e 20 64 69 72 65 63  stallation direc
3c00: 74 69 76 65 22 3b 20 66 69 0a 0a 09 20 20 20 20  tive"; fi...    
3c10: 23 20 44 65 63 69 64 65 20 74 68 65 20 64 65 73  # Decide the des
3c20: 74 69 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  tination of the 
3c30: 66 69 6c 65 0a 09 20 20 20 20 6c 6f 63 61 6c 20  file..    local 
3c40: 5f 66 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70 61  _file_install_pa
3c50: 74 68 3d 22 24 5f 64 65 73 74 5f 70 72 65 66 69  th="$_dest_prefi
3c60: 78 2f 24 5f 66 69 6c 65 22 0a 0a 09 20 20 20 20  x/$_file"...    
3c70: 69 66 20 65 63 68 6f 20 22 24 5f 66 69 6c 65 22  if echo "$_file"
3c80: 20 7c 20 67 72 65 70 20 22 5e 65 74 63 2f 22 20   | grep "^etc/" 
3c90: 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 09 20 20 20  > /dev/null..   
3ca0: 20 74 68 65 6e 0a 09 09 6c 6f 63 61 6c 20 5f 66   then...local _f
3cb0: 3d 22 24 28 65 63 68 6f 20 22 24 5f 66 69 6c 65  ="$(echo "$_file
3cc0: 22 20 7c 20 73 65 64 20 27 73 2f 5e 65 74 63 5c  " | sed 's/^etc\
3cd0: 2f 2f 2f 27 29 22 0a 09 09 5f 66 69 6c 65 5f 69  ///')"..._file_i
3ce0: 6e 73 74 61 6c 6c 5f 70 61 74 68 3d 22 24 43 46  nstall_path="$CF
3cf0: 47 5f 53 59 53 43 4f 4e 46 44 49 52 2f 24 5f 66  G_SYSCONFDIR/$_f
3d00: 22 0a 09 20 20 20 20 66 69 0a 0a 09 20 20 20 20  "..    fi...    
3d10: 69 66 20 65 63 68 6f 20 22 24 5f 66 69 6c 65 22  if echo "$_file"
3d20: 20 7c 20 67 72 65 70 20 22 5e 62 69 6e 2f 22 20   | grep "^bin/" 
3d30: 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 09 20 20 20  > /dev/null..   
3d40: 20 74 68 65 6e 0a 09 09 6c 6f 63 61 6c 20 5f 66   then...local _f
3d50: 3d 22 24 28 65 63 68 6f 20 22 24 5f 66 69 6c 65  ="$(echo "$_file
3d60: 22 20 7c 20 73 65 64 20 27 73 2f 5e 62 69 6e 5c  " | sed 's/^bin\
3d70: 2f 2f 2f 27 29 22 0a 09 09 5f 66 69 6c 65 5f 69  ///')"..._file_i
3d80: 6e 73 74 61 6c 6c 5f 70 61 74 68 3d 22 24 43 46  nstall_path="$CF
3d90: 47 5f 42 49 4e 44 49 52 2f 24 5f 66 22 0a 09 20  G_BINDIR/$_f".. 
3da0: 20 20 20 66 69 0a 0a 09 20 20 20 20 69 66 20 65     fi...    if e
3db0: 63 68 6f 20 22 24 5f 66 69 6c 65 22 20 7c 20 67  cho "$_file" | g
3dc0: 72 65 70 20 22 5e 6c 69 62 2f 22 20 3e 20 2f 64  rep "^lib/" > /d
3dd0: 65 76 2f 6e 75 6c 6c 0a 09 20 20 20 20 74 68 65  ev/null..    the
3de0: 6e 0a 09 09 6c 6f 63 61 6c 20 5f 66 3d 22 24 28  n...local _f="$(
3df0: 65 63 68 6f 20 22 24 5f 66 69 6c 65 22 20 7c 20  echo "$_file" | 
3e00: 73 65 64 20 27 73 2f 5e 6c 69 62 5c 2f 2f 2f 27  sed 's/^lib\///'
3e10: 29 22 0a 09 09 5f 66 69 6c 65 5f 69 6e 73 74 61  )"..._file_insta
3e20: 6c 6c 5f 70 61 74 68 3d 22 24 43 46 47 5f 4c 49  ll_path="$CFG_LI
3e30: 42 44 49 52 2f 24 5f 66 22 0a 09 20 20 20 20 66  BDIR/$_f"..    f
3e40: 69 0a 0a 09 20 20 20 20 69 66 20 65 63 68 6f 20  i...    if echo 
3e50: 22 24 5f 66 69 6c 65 22 20 7c 20 67 72 65 70 20  "$_file" | grep 
3e60: 22 5e 73 68 61 72 65 2f 6d 61 6e 2f 22 20 3e 20  "^share/man/" > 
3e70: 2f 64 65 76 2f 6e 75 6c 6c 0a 09 20 20 20 20 74  /dev/null..    t
3e80: 68 65 6e 0a 09 09 6c 6f 63 61 6c 20 5f 66 3d 22  hen...local _f="
3e90: 24 28 65 63 68 6f 20 22 24 5f 66 69 6c 65 22 20  $(echo "$_file" 
3ea0: 7c 20 73 65 64 20 27 73 2f 5e 73 68 61 72 65 5c  | sed 's/^share\
3eb0: 2f 6d 61 6e 5c 2f 2f 2f 27 29 22 0a 09 09 5f 66  /man\///')"..._f
3ec0: 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70 61 74 68  ile_install_path
3ed0: 3d 22 24 43 46 47 5f 4d 41 4e 44 49 52 2f 24 5f  ="$CFG_MANDIR/$_
3ee0: 66 22 0a 09 20 20 20 20 66 69 0a 0a 20 20 20 20  f"..    fi..    
3ef0: 20 20 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20          # HACK: 
3f00: 54 72 79 20 74 6f 20 73 75 70 70 6f 72 74 20 6f  Try to support o
3f10: 76 65 72 72 69 64 69 6e 67 20 2d 2d 64 6f 63 64  verriding --docd
3f20: 69 72 2e 20 20 50 61 74 68 73 20 77 69 74 68 20  ir.  Paths with 
3f30: 74 68 65 20 66 6f 72 6d 0a 20 20 20 20 20 20 20  the form.       
3f40: 20 20 20 20 20 23 20 22 73 68 61 72 65 2f 64 6f       # "share/do
3f50: 63 2f 24 70 72 6f 64 75 63 74 2f 22 20 63 61 6e  c/$product/" can
3f60: 20 62 65 20 72 65 64 69 72 65 63 74 65 64 20 74   be redirected t
3f70: 6f 20 61 20 73 69 6e 67 6c 65 20 2d 2d 64 6f 63  o a single --doc
3f80: 64 69 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  dir.            
3f90: 23 20 70 61 74 68 2e 20 49 66 20 74 68 65 20 66  # path. If the f
3fa0: 6f 6c 6c 6f 77 69 6e 67 20 64 65 74 65 63 74 73  ollowing detects
3fb0: 20 74 68 61 74 20 2d 2d 64 6f 63 64 69 72 20 68   that --docdir h
3fc0: 61 73 20 62 65 65 6e 20 73 70 65 63 69 66 69 65  as been specifie
3fd0: 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  d.            # 
3fe0: 74 68 65 6e 20 69 74 20 77 69 6c 6c 20 72 65 70  then it will rep
3ff0: 6c 61 63 65 20 65 76 65 72 79 74 68 69 6e 67 20  lace everything 
4000: 70 72 65 63 65 65 64 69 6e 67 20 74 68 65 20 22  preceeding the "
4010: 24 70 72 6f 64 75 63 74 22 20 70 61 74 68 0a 20  $product" path. 
4020: 20 20 20 20 20 20 20 20 20 20 20 23 20 63 6f 6d             # com
4030: 70 6f 6e 65 6e 74 2e 20 54 68 65 20 70 72 6f 62  ponent. The prob
4040: 6c 65 6d 20 68 65 72 65 20 69 73 20 74 68 61 74  lem here is that
4050: 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 72 75   the combined ru
4060: 73 74 20 69 6e 73 74 61 6c 6c 65 72 0a 20 20 20  st installer.   
4070: 20 20 20 20 20 20 20 20 20 23 20 63 6f 6e 74 61           # conta
4080: 69 6e 73 20 74 77 6f 20 22 70 72 6f 64 75 63 74  ins two "product
4090: 73 22 3a 20 72 75 73 74 20 61 6e 64 20 63 61 72  s": rust and car
40a0: 67 6f 3b 20 73 6f 20 74 68 65 20 63 6f 6e 74 65  go; so the conte
40b0: 6e 74 73 20 6f 66 20 74 68 6f 73 65 0a 20 20 20  nts of those.   
40c0: 20 20 20 20 20 20 20 20 20 23 20 64 69 72 65 63           # direc
40d0: 74 6f 72 69 65 73 20 77 69 6c 6c 20 62 6f 74 68  tories will both
40e0: 20 62 65 20 64 75 6d 70 65 64 20 69 6e 74 6f 20   be dumped into 
40f0: 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f  the same directo
4100: 72 79 3b 20 61 6e 64 20 74 68 65 0a 20 20 20 20  ry; and the.    
4110: 20 20 20 20 20 20 20 20 23 20 63 6f 6e 74 65 6e          # conten
4120: 74 73 20 6f 66 20 74 68 6f 73 65 20 64 69 72 65  ts of those dire
4130: 63 74 6f 72 69 65 73 20 61 72 65 20 5f 6e 6f 74  ctories are _not
4140: 5f 20 64 69 73 6a 6f 69 6e 74 2e 20 53 69 6e 63  _ disjoint. Sinc
4150: 65 20 74 68 69 73 20 66 65 61 74 75 72 65 0a 20  e this feature. 
4160: 20 20 20 20 20 20 20 20 20 20 20 23 20 69 73 20             # is 
4170: 61 6c 6d 6f 73 74 20 65 6e 74 69 72 65 6c 79 20  almost entirely 
4180: 74 6f 20 73 75 70 70 6f 72 74 20 27 6d 61 6b 65  to support 'make
4190: 20 69 6e 73 74 61 6c 6c 27 20 61 6e 79 77 61 79   install' anyway
41a0: 20 49 20 64 6f 6e 27 74 20 65 78 70 65 63 74 0a   I don't expect.
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68              # th
41c0: 69 73 20 70 72 6f 62 6c 65 6d 20 74 6f 20 62 65  is problem to be
41d0: 20 61 20 62 69 67 20 64 65 61 6c 20 69 6e 20 70   a big deal in p
41e0: 72 61 63 74 69 63 65 2e 0a 20 20 20 20 20 20 20  ractice..       
41f0: 20 20 20 20 20 69 66 20 5b 20 22 24 43 46 47 5f       if [ "$CFG_
4200: 44 4f 43 44 49 52 22 20 21 3d 20 22 3c 64 65 66  DOCDIR" != "<def
4210: 61 75 6c 74 3e 22 20 5d 0a 20 20 20 20 20 20 20  ault>" ].       
4220: 20 20 20 20 20 74 68 65 6e 0a 09 20 20 20 20 20       then..     
4230: 20 20 20 69 66 20 65 63 68 6f 20 22 24 5f 66 69     if echo "$_fi
4240: 6c 65 22 20 7c 20 67 72 65 70 20 22 5e 73 68 61  le" | grep "^sha
4250: 72 65 2f 64 6f 63 2f 22 20 3e 20 2f 64 65 76 2f  re/doc/" > /dev/
4260: 6e 75 6c 6c 0a 09 20 20 20 20 20 20 20 20 74 68  null..        th
4270: 65 6e 0a 09 09 20 20 20 20 6c 6f 63 61 6c 20 5f  en...    local _
4280: 66 3d 22 24 28 65 63 68 6f 20 22 24 5f 66 69 6c  f="$(echo "$_fil
4290: 65 22 20 7c 20 73 65 64 20 27 73 2f 5e 73 68 61  e" | sed 's/^sha
42a0: 72 65 5c 2f 64 6f 63 5c 2f 5b 5e 2f 5d 2a 5c 2f  re\/doc\/[^/]*\/
42b0: 2f 2f 27 29 22 0a 09 09 20 20 20 20 5f 66 69 6c  //')"...    _fil
42c0: 65 5f 69 6e 73 74 61 6c 6c 5f 70 61 74 68 3d 22  e_install_path="
42d0: 24 43 46 47 5f 44 4f 43 44 49 52 2f 24 5f 66 22  $CFG_DOCDIR/$_f"
42e0: 0a 09 20 20 20 20 20 20 20 20 66 69 0a 20 20 20  ..        fi.   
42f0: 20 20 20 20 20 20 20 20 20 66 69 0a 0a 09 20 20           fi...  
4300: 20 20 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68    # Make sure th
4310: 65 72 65 27 73 20 61 20 64 69 72 65 63 74 6f 72  ere's a director
4320: 79 20 66 6f 72 20 69 74 0a 09 20 20 20 20 6d 61  y for it..    ma
4330: 6b 65 5f 64 69 72 5f 72 65 63 75 72 73 69 76 65  ke_dir_recursive
4340: 20 22 24 28 64 69 72 6e 61 6d 65 20 22 24 5f 66   "$(dirname "$_f
4350: 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70 61 74 68  ile_install_path
4360: 22 29 22 0a 09 20 20 20 20 63 72 69 74 69 63 61  ")"..    critica
4370: 6c 5f 6e 65 65 64 5f 6f 6b 20 22 64 69 72 65 63  l_need_ok "direc
4380: 74 6f 72 79 20 63 72 65 61 74 69 6f 6e 20 66 61  tory creation fa
4390: 69 6c 65 64 22 0a 0a 09 20 20 20 20 23 20 4d 61  iled"...    # Ma
43a0: 6b 65 20 74 68 65 20 70 61 74 68 20 61 62 73 6f  ke the path abso
43b0: 6c 75 74 65 20 73 6f 20 77 65 20 63 61 6e 20 75  lute so we can u
43c0: 6e 69 6e 73 74 61 6c 6c 20 69 74 20 6c 61 74 65  ninstall it late
43d0: 72 20 77 69 74 68 6f 75 74 0a 09 20 20 20 20 23  r without..    #
43e0: 20 73 74 61 72 74 69 6e 67 20 66 72 6f 6d 20 74   starting from t
43f0: 68 65 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20  he installation 
4400: 63 77 64 0a 09 20 20 20 20 61 62 73 6f 6c 75 74  cwd..    absolut
4410: 69 66 79 20 22 24 5f 66 69 6c 65 5f 69 6e 73 74  ify "$_file_inst
4420: 61 6c 6c 5f 70 61 74 68 22 0a 09 20 20 20 20 5f  all_path"..    _
4430: 66 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70 61 74  file_install_pat
4440: 68 3d 22 24 52 45 54 56 41 4c 22 0a 09 20 20 20  h="$RETVAL"..   
4450: 20 61 73 73 65 72 74 5f 6e 7a 20 22 24 5f 66 69   assert_nz "$_fi
4460: 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70 61 74 68 22  le_install_path"
4470: 20 22 66 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70   "file_install_p
4480: 61 74 68 22 0a 0a 09 20 20 20 20 63 61 73 65 20  ath"...    case 
4490: 22 24 5f 63 6f 6d 6d 61 6e 64 22 20 69 6e 0a 09  "$_command" in..
44a0: 09 66 69 6c 65 20 29 0a 0a 09 09 20 20 20 20 76  .file )....    v
44b0: 65 72 62 6f 73 65 5f 6d 73 67 20 22 63 6f 70 79  erbose_msg "copy
44c0: 69 6e 67 20 66 69 6c 65 20 24 5f 66 69 6c 65 5f  ing file $_file_
44d0: 69 6e 73 74 61 6c 6c 5f 70 61 74 68 22 0a 0a 09  install_path"...
44e0: 09 20 20 20 20 6d 61 79 62 65 5f 62 61 63 6b 75  .    maybe_backu
44f0: 70 5f 70 61 74 68 20 22 24 5f 66 69 6c 65 5f 69  p_path "$_file_i
4500: 6e 73 74 61 6c 6c 5f 70 61 74 68 22 0a 0a 09 09  nstall_path"....
4510: 20 20 20 20 69 66 20 65 63 68 6f 20 22 24 5f 66      if echo "$_f
4520: 69 6c 65 22 20 7c 20 67 72 65 70 20 22 5e 62 69  ile" | grep "^bi
4530: 6e 2f 22 20 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a  n/" > /dev/null.
4540: 09 09 20 20 20 20 74 68 65 6e 0a 09 09 09 72 75  ..    then....ru
4550: 6e 20 69 6e 73 74 61 6c 6c 20 2d 6d 37 35 35 20  n install -m755 
4560: 22 24 5f 73 72 63 5f 64 69 72 2f 24 5f 63 6f 6d  "$_src_dir/$_com
4570: 70 6f 6e 65 6e 74 2f 24 5f 66 69 6c 65 22 20 22  ponent/$_file" "
4580: 24 5f 66 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70  $_file_install_p
4590: 61 74 68 22 0a 09 09 20 20 20 20 65 6c 73 65 0a  ath"...    else.
45a0: 09 09 09 72 75 6e 20 69 6e 73 74 61 6c 6c 20 2d  ...run install -
45b0: 6d 36 34 34 20 22 24 5f 73 72 63 5f 64 69 72 2f  m644 "$_src_dir/
45c0: 24 5f 63 6f 6d 70 6f 6e 65 6e 74 2f 24 5f 66 69  $_component/$_fi
45d0: 6c 65 22 20 22 24 5f 66 69 6c 65 5f 69 6e 73 74  le" "$_file_inst
45e0: 61 6c 6c 5f 70 61 74 68 22 0a 09 09 20 20 20 20  all_path"...    
45f0: 66 69 0a 09 09 20 20 20 20 63 72 69 74 69 63 61  fi...    critica
4600: 6c 5f 6e 65 65 64 5f 6f 6b 20 22 66 69 6c 65 20  l_need_ok "file 
4610: 63 72 65 61 74 69 6f 6e 20 66 61 69 6c 65 64 22  creation failed"
4620: 0a 0a 09 09 20 20 20 20 23 20 55 70 64 61 74 65  ....    # Update
4630: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 0a 09 09   the manifest...
4640: 20 20 20 20 61 70 70 65 6e 64 5f 74 6f 5f 66 69      append_to_fi
4650: 6c 65 20 22 66 69 6c 65 3a 24 5f 66 69 6c 65 5f  le "file:$_file_
4660: 69 6e 73 74 61 6c 6c 5f 70 61 74 68 22 20 22 24  install_path" "$
4670: 5f 69 6e 73 74 61 6c 6c 65 64 5f 6d 61 6e 69 66  _installed_manif
4680: 65 73 74 22 0a 09 09 20 20 20 20 63 72 69 74 69  est"...    criti
4690: 63 61 6c 5f 6e 65 65 64 5f 6f 6b 20 22 66 61 69  cal_need_ok "fai
46a0: 6c 65 64 20 74 6f 20 75 70 64 61 74 65 20 6d 61  led to update ma
46b0: 6e 69 66 65 73 74 22 0a 0a 09 09 20 20 20 20 3b  nifest"....    ;
46c0: 3b 0a 0a 09 09 64 69 72 20 29 0a 0a 09 09 20 20  ;....dir )....  
46d0: 20 20 76 65 72 62 6f 73 65 5f 6d 73 67 20 22 63    verbose_msg "c
46e0: 6f 70 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  opying directory
46f0: 20 24 5f 66 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f   $_file_install_
4700: 70 61 74 68 22 0a 0a 09 09 20 20 20 20 6d 61 79  path"....    may
4710: 62 65 5f 62 61 63 6b 75 70 5f 70 61 74 68 20 22  be_backup_path "
4720: 24 5f 66 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70  $_file_install_p
4730: 61 74 68 22 0a 0a 09 09 20 20 20 20 72 75 6e 20  ath"....    run 
4740: 63 70 20 2d 52 20 22 24 5f 73 72 63 5f 64 69 72  cp -R "$_src_dir
4750: 2f 24 5f 63 6f 6d 70 6f 6e 65 6e 74 2f 24 5f 66  /$_component/$_f
4760: 69 6c 65 22 20 22 24 5f 66 69 6c 65 5f 69 6e 73  ile" "$_file_ins
4770: 74 61 6c 6c 5f 70 61 74 68 22 0a 09 09 20 20 20  tall_path"...   
4780: 20 63 72 69 74 69 63 61 6c 5f 6e 65 65 64 5f 6f   critical_need_o
4790: 6b 20 22 66 61 69 6c 65 64 20 74 6f 20 63 6f 70  k "failed to cop
47a0: 79 20 64 69 72 65 63 74 6f 72 79 22 0a 0a 20 20  y directory"..  
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 20 23 20 53 65 74 20 70 65 72 6d 69 73 73 69    # Set permissi
47d0: 6f 6e 73 2e 20 30 37 35 35 20 66 6f 72 20 64 69  ons. 0755 for di
47e0: 72 73 2c 20 36 34 34 20 66 6f 72 20 66 69 6c 65  rs, 644 for file
47f0: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
4800: 20 20 20 20 20 20 72 75 6e 20 63 68 6d 6f 64 20        run chmod 
4810: 2d 52 20 75 2b 72 77 78 2c 67 6f 2b 72 78 2c 67  -R u+rwx,go+rx,g
4820: 6f 2d 77 20 22 24 5f 66 69 6c 65 5f 69 6e 73 74  o-w "$_file_inst
4830: 61 6c 6c 5f 70 61 74 68 22 0a 20 20 20 20 20 20  all_path".      
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 72                cr
4850: 69 74 69 63 61 6c 5f 6e 65 65 64 5f 6f 6b 20 22  itical_need_ok "
4860: 66 61 69 6c 65 64 20 74 6f 20 73 65 74 20 70 65  failed to set pe
4870: 72 6d 69 73 73 69 6f 6e 73 20 6f 6e 20 64 69 72  rmissions on dir
4880: 65 63 74 6f 72 79 22 0a 0a 09 09 20 20 20 20 23  ectory"....    #
4890: 20 55 70 64 61 74 65 20 74 68 65 20 6d 61 6e 69   Update the mani
48a0: 66 65 73 74 0a 09 09 20 20 20 20 61 70 70 65 6e  fest...    appen
48b0: 64 5f 74 6f 5f 66 69 6c 65 20 22 64 69 72 3a 24  d_to_file "dir:$
48c0: 5f 66 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70 61  _file_install_pa
48d0: 74 68 22 20 22 24 5f 69 6e 73 74 61 6c 6c 65 64  th" "$_installed
48e0: 5f 6d 61 6e 69 66 65 73 74 22 0a 09 09 20 20 20  _manifest"...   
48f0: 20 63 72 69 74 69 63 61 6c 5f 6e 65 65 64 5f 6f   critical_need_o
4900: 6b 20 22 66 61 69 6c 65 64 20 74 6f 20 75 70 64  k "failed to upd
4910: 61 74 65 20 6d 61 6e 69 66 65 73 74 22 0a 09 09  ate manifest"...
4920: 20 20 20 20 3b 3b 0a 0a 09 09 2a 29 0a 09 09 20      ;;....*)... 
4930: 20 20 20 63 72 69 74 69 63 61 6c 5f 65 72 72 20     critical_err 
4940: 22 75 6e 6b 6e 6f 77 6e 20 69 6e 73 74 61 6c 6c  "unknown install
4950: 61 74 69 6f 6e 20 64 69 72 65 63 74 69 76 65 22  ation directive"
4960: 0a 09 09 20 20 20 20 3b 3b 0a 09 20 20 20 20 65  ...    ;;..    e
4970: 73 61 63 0a 09 64 6f 6e 65 20 3c 20 22 24 5f 69  sac..done < "$_i
4980: 6e 70 75 74 5f 6d 61 6e 69 66 65 73 74 22 0a 0a  nput_manifest"..
4990: 20 20 20 20 64 6f 6e 65 0a 7d 0a 0a 6d 61 79 62      done.}..mayb
49a0: 65 5f 63 6f 6e 66 69 67 75 72 65 5f 6c 64 28 29  e_configure_ld()
49b0: 20 7b 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 61 62   {.    local _ab
49c0: 73 5f 6c 69 62 64 69 72 3d 22 24 31 22 0a 0a 20  s_libdir="$1".. 
49d0: 20 20 20 67 65 74 5f 68 6f 73 74 5f 74 72 69 70     get_host_trip
49e0: 6c 65 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 6f 73  le.    local _os
49f0: 74 79 70 65 3d 22 24 52 45 54 56 41 4c 22 0a 20  type="$RETVAL". 
4a00: 20 20 20 61 73 73 65 72 74 5f 6e 7a 20 22 24 5f     assert_nz "$_
4a10: 6f 73 74 79 70 65 22 20 20 22 6f 73 74 79 70 65  ostype"  "ostype
4a20: 22 0a 0a 20 20 20 20 69 66 20 5b 20 22 24 5f 6f  "..    if [ "$_o
4a30: 73 74 79 70 65 22 20 3d 20 22 75 6e 6b 6e 6f 77  stype" = "unknow
4a40: 6e 2d 6c 69 6e 75 78 2d 67 6e 75 22 20 2d 61 20  n-linux-gnu" -a 
4a50: 21 20 2d 6e 20 22 24 7b 43 46 47 5f 44 49 53 41  ! -n "${CFG_DISA
4a60: 42 4c 45 5f 4c 44 43 4f 4e 46 49 47 2d 7d 22 20  BLE_LDCONFIG-}" 
4a70: 5d 3b 20 74 68 65 6e 0a 0a 09 23 20 46 65 64 6f  ]; then...# Fedo
4a80: 72 61 2d 62 61 73 65 64 20 73 79 73 74 65 6d 73  ra-based systems
4a90: 20 64 6f 20 6e 6f 74 20 63 6f 6e 66 69 67 75 72   do not configur
4aa0: 65 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69  e the dynamic li
4ab0: 6e 6b 65 72 20 74 6f 20 6c 6f 6f 6b 0a 09 23 20  nker to look..# 
4ac0: 2f 75 73 72 2f 6c 6f 63 61 6c 2f 6c 69 62 2c 20  /usr/local/lib, 
4ad0: 77 68 69 63 68 20 69 73 20 6f 75 72 20 64 65 66  which is our def
4ae0: 61 75 6c 74 20 69 6e 73 74 61 6c 6c 61 74 69 6f  ault installatio
4af0: 6e 20 64 69 72 65 63 74 6f 72 79 2e 20 54 6f 0a  n directory. To.
4b00: 09 23 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 6a  .# make things j
4b10: 75 73 74 20 77 6f 72 6b 2c 20 74 72 79 20 74 6f  ust work, try to
4b20: 20 70 75 74 20 74 68 61 74 20 64 69 72 65 63 74   put that direct
4b30: 6f 72 79 20 69 6e 0a 09 23 20 2f 65 74 63 2f 6c  ory in..# /etc/l
4b40: 64 2e 73 6f 2e 63 6f 6e 66 2e 64 2f 72 75 73 74  d.so.conf.d/rust
4b50: 2d 69 6e 73 74 61 6c 6c 65 72 2d 76 31 20 73 6f  -installer-v1 so
4b60: 20 6c 64 63 6f 6e 66 69 67 20 70 69 63 6b 73 20   ldconfig picks 
4b70: 69 74 20 75 70 2e 0a 09 23 20 49 73 73 75 65 20  it up...# Issue 
4b80: 23 33 30 2e 0a 09 23 0a 09 23 20 54 68 69 73 20  #30...#..# This 
4b90: 77 69 6c 6c 20 67 65 74 20 72 6d 27 64 20 77 68  will get rm'd wh
4ba0: 65 6e 20 74 68 65 20 6c 61 73 74 20 63 6f 6d 70  en the last comp
4bb0: 6f 6e 65 6e 74 20 69 73 20 75 6e 69 6e 73 74 61  onent is uninsta
4bc0: 6c 6c 65 64 20 69 6e 0a 09 23 20 6d 61 79 62 65  lled in..# maybe
4bd0: 5f 75 6e 63 6f 6e 66 69 67 75 72 65 5f 6c 64 2e  _unconfigure_ld.
4be0: 0a 09 69 66 20 5b 20 22 24 5f 61 62 73 5f 6c 69  ..if [ "$_abs_li
4bf0: 62 64 69 72 22 20 3d 20 22 2f 75 73 72 2f 6c 6f  bdir" = "/usr/lo
4c00: 63 61 6c 2f 6c 69 62 22 20 2d 61 20 2d 64 20 22  cal/lib" -a -d "
4c10: 2f 65 74 63 2f 6c 64 2e 73 6f 2e 63 6f 6e 66 2e  /etc/ld.so.conf.
4c20: 64 22 20 5d 3b 20 74 68 65 6e 0a 09 20 20 20 20  d" ]; then..    
4c30: 65 63 68 6f 20 22 24 5f 61 62 73 5f 6c 69 62 64  echo "$_abs_libd
4c40: 69 72 22 20 3e 20 22 2f 65 74 63 2f 6c 64 2e 73  ir" > "/etc/ld.s
4c50: 6f 2e 63 6f 6e 66 2e 64 2f 72 75 73 74 2d 69 6e  o.conf.d/rust-in
4c60: 73 74 61 6c 6c 65 72 2d 76 31 2d 24 54 45 4d 50  staller-v1-$TEMP
4c70: 4c 41 54 45 5f 52 45 4c 5f 4d 41 4e 49 46 45 53  LATE_REL_MANIFES
4c80: 54 5f 44 49 52 2e 63 6f 6e 66 22 0a 09 20 20 20  T_DIR.conf"..   
4c90: 20 69 66 20 5b 20 24 3f 20 2d 6e 65 20 30 20 5d   if [ $? -ne 0 ]
4ca0: 3b 20 74 68 65 6e 0a 09 09 23 20 54 68 69 73 20  ; then...# This 
4cb0: 73 68 6f 75 6c 64 6e 27 74 20 68 61 70 70 65 6e  shouldn't happen
4cc0: 20 69 66 20 77 65 27 76 65 20 67 6f 74 74 65 6e   if we've gotten
4cd0: 20 74 68 69 73 20 66 61 72 0a 09 09 23 20 69 6e   this far...# in
4ce0: 73 74 61 6c 6c 69 6e 67 20 74 6f 20 2f 75 73 72  stalling to /usr
4cf0: 2f 6c 6f 63 61 6c 0a 09 09 77 61 72 6e 20 22 66  /local...warn "f
4d00: 61 69 6c 65 64 20 74 6f 20 75 70 64 61 74 65 20  ailed to update 
4d10: 2f 65 74 63 2f 6c 64 2e 73 6f 2e 63 6f 6e 66 2e  /etc/ld.so.conf.
4d20: 64 2e 20 74 68 69 73 20 69 73 20 75 6e 65 78 70  d. this is unexp
4d30: 65 63 74 65 64 22 0a 09 20 20 20 20 66 69 0a 09  ected"..    fi..
4d40: 66 69 0a 0a 09 76 65 72 62 6f 73 65 5f 6d 73 67  fi...verbose_msg
4d50: 20 22 72 75 6e 6e 69 6e 67 20 6c 64 63 6f 6e 66   "running ldconf
4d60: 69 67 22 0a 09 69 66 20 5b 20 2d 6e 20 22 24 7b  ig"..if [ -n "${
4d70: 43 46 47 5f 56 45 52 42 4f 53 45 2d 7d 22 20 5d  CFG_VERBOSE-}" ]
4d80: 3b 20 74 68 65 6e 0a 09 20 20 20 20 6c 64 63 6f  ; then..    ldco
4d90: 6e 66 69 67 0a 09 65 6c 73 65 0a 09 20 20 20 20  nfig..else..    
4da0: 6c 64 63 6f 6e 66 69 67 20 32 3e 20 2f 64 65 76  ldconfig 2> /dev
4db0: 2f 6e 75 6c 6c 0a 09 66 69 0a 09 69 66 20 5b 20  /null..fi..if [ 
4dc0: 24 3f 20 2d 6e 65 20 30 20 5d 0a 09 74 68 65 6e  $? -ne 0 ]..then
4dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 61 72  .            war
4de0: 6e 20 22 66 61 69 6c 65 64 20 74 6f 20 72 75 6e  n "failed to run
4df0: 20 6c 64 63 6f 6e 66 69 67 2e 20 74 68 69 73 20   ldconfig. this 
4e00: 6d 61 79 20 68 61 70 70 65 6e 20 77 68 65 6e 20  may happen when 
4e10: 6e 6f 74 20 69 6e 73 74 61 6c 6c 69 6e 67 20 61  not installing a
4e20: 73 20 72 6f 6f 74 2e 20 72 75 6e 20 77 69 74 68  s root. run with
4e30: 20 2d 2d 76 65 72 62 6f 73 65 20 74 6f 20 73 65   --verbose to se
4e40: 65 20 74 68 65 20 65 72 72 6f 72 22 0a 09 66 69  e the error"..fi
4e50: 0a 20 20 20 20 66 69 0a 7d 0a 0a 6d 61 79 62 65  .    fi.}..maybe
4e60: 5f 75 6e 63 6f 6e 66 69 67 75 72 65 5f 6c 64 28  _unconfigure_ld(
4e70: 29 20 7b 0a 20 20 20 20 67 65 74 5f 68 6f 73 74  ) {.    get_host
4e80: 5f 74 72 69 70 6c 65 0a 20 20 20 20 6c 6f 63 61  _triple.    loca
4e90: 6c 20 5f 6f 73 74 79 70 65 3d 22 24 52 45 54 56  l _ostype="$RETV
4ea0: 41 4c 22 0a 20 20 20 20 61 73 73 65 72 74 5f 6e  AL".    assert_n
4eb0: 7a 20 22 24 5f 6f 73 74 79 70 65 22 20 20 22 6f  z "$_ostype"  "o
4ec0: 73 74 79 70 65 22 0a 0a 20 20 20 20 69 66 20 5b  stype"..    if [
4ed0: 20 22 24 5f 6f 73 74 79 70 65 22 20 21 3d 20 22   "$_ostype" != "
4ee0: 75 6e 6b 6e 6f 77 6e 2d 6c 69 6e 75 78 2d 67 6e  unknown-linux-gn
4ef0: 75 22 20 5d 3b 20 74 68 65 6e 0a 09 72 65 74 75  u" ]; then..retu
4f00: 72 6e 20 30 0a 20 20 20 20 66 69 0a 0a 20 20 20  rn 0.    fi..   
4f10: 20 72 6d 20 22 2f 65 74 63 2f 6c 64 2e 73 6f 2e   rm "/etc/ld.so.
4f20: 63 6f 6e 66 2e 64 2f 72 75 73 74 2d 69 6e 73 74  conf.d/rust-inst
4f30: 61 6c 6c 65 72 2d 76 31 2d 24 54 45 4d 50 4c 41  aller-v1-$TEMPLA
4f40: 54 45 5f 52 45 4c 5f 4d 41 4e 49 46 45 53 54 5f  TE_REL_MANIFEST_
4f50: 44 49 52 2e 63 6f 6e 66 22 20 32 3e 20 2f 64 65  DIR.conf" 2> /de
4f60: 76 2f 6e 75 6c 6c 0a 20 20 20 20 23 20 41 62 6f  v/null.    # Abo
4f70: 76 65 20 6d 61 79 20 66 61 69 6c 20 73 69 6e 63  ve may fail sinc
4f80: 65 20 74 68 61 74 20 66 69 6c 65 20 6d 61 79 20  e that file may 
4f90: 6e 6f 74 20 68 61 76 65 20 62 65 65 6e 20 63 72  not have been cr
4fa0: 65 61 74 65 64 20 6f 6e 20 69 6e 73 74 61 6c 6c  eated on install
4fb0: 0a 7d 0a 0a 23 20 44 6f 69 6e 67 20 6f 75 72 20  .}..# Doing our 
4fc0: 6f 77 6e 20 27 69 6e 73 74 61 6c 6c 27 2d 6c 69  own 'install'-li
4fd0: 6b 65 20 62 61 63 6b 75 70 20 74 68 61 74 20 69  ke backup that i
4fe0: 73 20 63 6f 6e 73 69 73 74 65 6e 74 20 61 63 72  s consistent acr
4ff0: 6f 73 73 20 70 6c 61 74 66 6f 72 6d 73 0a 6d 61  oss platforms.ma
5000: 79 62 65 5f 62 61 63 6b 75 70 5f 70 61 74 68 28  ybe_backup_path(
5010: 29 20 7b 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 66  ) {.    local _f
5020: 69 6c 65 5f 69 6e 73 74 61 6c 6c 5f 70 61 74 68  ile_install_path
5030: 3d 22 24 31 22 0a 0a 20 20 20 20 69 66 20 5b 20  ="$1"..    if [ 
5040: 2d 65 20 22 24 5f 66 69 6c 65 5f 69 6e 73 74 61  -e "$_file_insta
5050: 6c 6c 5f 70 61 74 68 22 20 5d 3b 20 74 68 65 6e  ll_path" ]; then
5060: 0a 09 6d 73 67 20 22 62 61 63 6b 69 6e 67 20 75  ..msg "backing u
5070: 70 20 65 78 69 73 74 69 6e 67 20 66 69 6c 65 20  p existing file 
5080: 61 74 20 24 5f 66 69 6c 65 5f 69 6e 73 74 61 6c  at $_file_instal
5090: 6c 5f 70 61 74 68 22 0a 09 72 75 6e 20 6d 76 20  l_path"..run mv 
50a0: 2d 66 20 22 24 5f 66 69 6c 65 5f 69 6e 73 74 61  -f "$_file_insta
50b0: 6c 6c 5f 70 61 74 68 22 20 22 24 5f 66 69 6c 65  ll_path" "$_file
50c0: 5f 69 6e 73 74 61 6c 6c 5f 70 61 74 68 2e 6f 6c  _install_path.ol
50d0: 64 22 0a 09 63 72 69 74 69 63 61 6c 5f 6e 65 65  d"..critical_nee
50e0: 64 5f 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f 20  d_ok "failed to 
50f0: 62 61 63 6b 20 75 70 20 24 5f 66 69 6c 65 5f 69  back up $_file_i
5100: 6e 73 74 61 6c 6c 5f 70 61 74 68 22 0a 20 20 20  nstall_path".   
5110: 20 66 69 0a 7d 0a 0a 69 6e 73 74 61 6c 6c 5f 75   fi.}..install_u
5120: 6e 69 6e 73 74 61 6c 6c 65 72 28 29 20 7b 0a 20  ninstaller() {. 
5130: 20 20 20 6c 6f 63 61 6c 20 5f 73 72 63 5f 64 69     local _src_di
5140: 72 3d 22 24 31 22 0a 20 20 20 20 6c 6f 63 61 6c  r="$1".    local
5150: 20 5f 73 72 63 5f 62 61 73 65 6e 61 6d 65 3d 22   _src_basename="
5160: 24 32 22 0a 20 20 20 20 6c 6f 63 61 6c 20 5f 61  $2".    local _a
5170: 62 73 5f 6c 69 62 64 69 72 3d 22 24 33 22 0a 0a  bs_libdir="$3"..
5180: 20 20 20 20 6c 6f 63 61 6c 20 5f 75 6e 69 6e 73      local _unins
5190: 74 61 6c 6c 65 72 3d 22 24 5f 61 62 73 5f 6c 69  taller="$_abs_li
51a0: 62 64 69 72 2f 24 54 45 4d 50 4c 41 54 45 5f 52  bdir/$TEMPLATE_R
51b0: 45 4c 5f 4d 41 4e 49 46 45 53 54 5f 44 49 52 2f  EL_MANIFEST_DIR/
51c0: 75 6e 69 6e 73 74 61 6c 6c 2e 73 68 22 0a 20 20  uninstall.sh".  
51d0: 20 20 6d 73 67 20 22 63 72 65 61 74 69 6e 67 20    msg "creating 
51e0: 75 6e 69 6e 73 74 61 6c 6c 20 73 63 72 69 70 74  uninstall script
51f0: 20 61 74 20 24 5f 75 6e 69 6e 73 74 61 6c 6c 65   at $_uninstalle
5200: 72 22 0a 20 20 20 20 72 75 6e 20 63 70 20 22 24  r".    run cp "$
5210: 5f 73 72 63 5f 64 69 72 2f 24 5f 73 72 63 5f 62  _src_dir/$_src_b
5220: 61 73 65 6e 61 6d 65 22 20 22 24 5f 75 6e 69 6e  asename" "$_unin
5230: 73 74 61 6c 6c 65 72 22 0a 20 20 20 20 63 72 69  staller".    cri
5240: 74 69 63 61 6c 5f 6e 65 65 64 5f 6f 6b 20 22 75  tical_need_ok "u
5250: 6e 61 62 6c 65 20 74 6f 20 69 6e 73 74 61 6c 6c  nable to install
5260: 20 75 6e 69 6e 73 74 61 6c 6c 65 72 22 0a 7d 0a   uninstaller".}.
5270: 0a 64 6f 5f 70 72 65 66 6c 69 67 68 74 5f 73 61  .do_preflight_sa
5280: 6e 69 74 79 5f 63 68 65 63 6b 73 28 29 20 7b 0a  nity_checks() {.
5290: 20 20 20 20 6c 6f 63 61 6c 20 5f 73 72 63 5f 64      local _src_d
52a0: 69 72 3d 22 24 31 22 0a 20 20 20 20 6c 6f 63 61  ir="$1".    loca
52b0: 6c 20 5f 64 65 73 74 5f 70 72 65 66 69 78 3d 22  l _dest_prefix="
52c0: 24 32 22 0a 0a 20 20 20 20 23 20 53 61 6e 69 74  $2"..    # Sanit
52d0: 79 20 63 68 65 63 6b 3a 20 63 61 6e 20 77 65 20  y check: can we 
52e0: 63 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65  can write to the
52f0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 3f 0a 20 20   destination?.  
5300: 20 20 76 65 72 62 6f 73 65 5f 6d 73 67 20 22 76    verbose_msg "v
5310: 65 72 69 66 79 69 6e 67 20 64 65 73 74 69 6e 61  erifying destina
5320: 74 69 6f 6e 20 69 73 20 77 72 69 74 61 62 6c 65  tion is writable
5330: 22 0a 20 20 20 20 6d 61 6b 65 5f 64 69 72 5f 72  ".    make_dir_r
5340: 65 63 75 72 73 69 76 65 20 22 24 43 46 47 5f 4c  ecursive "$CFG_L
5350: 49 42 44 49 52 22 0a 20 20 20 20 6e 65 65 64 5f  IBDIR".    need_
5360: 6f 6b 20 22 63 61 6e 27 74 20 77 72 69 74 65 20  ok "can't write 
5370: 74 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 20  to destination. 
5380: 63 6f 6e 73 69 64 65 72 20 5c 60 73 75 64 6f 5c  consider \`sudo\
5390: 60 2e 22 0a 20 20 20 20 74 6f 75 63 68 20 22 24  `.".    touch "$
53a0: 43 46 47 5f 4c 49 42 44 49 52 2f 72 75 73 74 2d  CFG_LIBDIR/rust-
53b0: 69 6e 73 74 61 6c 6c 2d 70 72 6f 62 65 22 20 3e  install-probe" >
53c0: 20 2f 64 65 76 2f 6e 75 6c 6c 0a 20 20 20 20 69   /dev/null.    i
53d0: 66 20 5b 20 24 3f 20 2d 6e 65 20 30 20 5d 0a 20  f [ $? -ne 0 ]. 
53e0: 20 20 20 74 68 65 6e 0a 09 65 72 72 20 22 63 61     then..err "ca
53f0: 6e 27 74 20 77 72 69 74 65 20 74 6f 20 64 65 73  n't write to des
5400: 74 69 6e 61 74 69 6f 6e 2e 20 63 6f 6e 73 69 64  tination. consid
5410: 65 72 20 5c 60 73 75 64 6f 5c 60 2e 22 0a 20 20  er \`sudo\`.".  
5420: 20 20 66 69 0a 20 20 20 20 72 6d 20 22 24 43 46    fi.    rm "$CF
5430: 47 5f 4c 49 42 44 49 52 2f 72 75 73 74 2d 69 6e  G_LIBDIR/rust-in
5440: 73 74 61 6c 6c 2d 70 72 6f 62 65 22 0a 20 20 20  stall-probe".   
5450: 20 6e 65 65 64 5f 6f 6b 20 22 66 61 69 6c 65 64   need_ok "failed
5460: 20 74 6f 20 72 65 6d 6f 76 65 20 69 6e 73 74 61   to remove insta
5470: 6c 6c 20 70 72 6f 62 65 22 0a 0a 20 20 20 20 23  ll probe"..    #
5480: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 3a 20 64   Sanity check: d
5490: 6f 6e 27 74 20 69 6e 73 74 61 6c 6c 20 74 6f 20  on't install to 
54a0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f  the directory co
54b0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6e 73  ntaining the ins
54c0: 74 61 6c 6c 65 72 2e 0a 20 20 20 20 23 20 54 68  taller..    # Th
54d0: 61 74 20 77 6f 75 6c 64 20 73 75 72 65 6c 79 20  at would surely 
54e0: 63 61 75 73 65 20 63 68 61 6f 73 2e 0a 20 20 20  cause chaos..   
54f0: 20 76 65 72 62 6f 73 65 5f 6d 73 67 20 22 76 65   verbose_msg "ve
5500: 72 69 66 79 69 6e 67 20 64 65 73 74 69 6e 61 74  rifying destinat
5510: 69 6f 6e 20 69 73 20 6e 6f 74 20 74 68 65 20 73  ion is not the s
5520: 61 6d 65 20 61 73 20 73 6f 75 72 63 65 22 0a 20  ame as source". 
5530: 20 20 20 6c 6f 63 61 6c 20 5f 70 72 65 66 69 78     local _prefix
5540: 5f 64 69 72 3d 22 24 28 61 62 73 5f 70 61 74 68  _dir="$(abs_path
5550: 20 22 24 64 65 73 74 5f 70 72 65 66 69 78 22 29   "$dest_prefix")
5560: 22 0a 20 20 20 20 69 66 20 5b 20 22 24 5f 73 72  ".    if [ "$_sr
5570: 63 5f 64 69 72 22 20 3d 20 22 24 5f 64 65 73 74  c_dir" = "$_dest
5580: 5f 70 72 65 66 69 78 22 20 2d 61 20 22 24 7b 43  _prefix" -a "${C
5590: 46 47 5f 55 4e 49 4e 53 54 41 4c 4c 2d 7d 22 20  FG_UNINSTALL-}" 
55a0: 21 3d 20 31 20 5d 3b 20 74 68 65 6e 0a 09 65 72  != 1 ]; then..er
55b0: 72 20 22 63 61 6e 6e 6f 74 20 69 6e 73 74 61 6c  r "cannot instal
55c0: 6c 20 74 6f 20 73 61 6d 65 20 64 69 72 65 63 74  l to same direct
55d0: 6f 72 79 20 61 73 20 69 6e 73 74 61 6c 6c 65 72  ory as installer
55e0: 22 0a 20 20 20 20 66 69 0a 7d 0a 0a 76 65 72 62  ".    fi.}..verb
55f0: 6f 73 65 5f 6d 73 67 20 22 6c 6f 6f 6b 69 6e 67  ose_msg "looking
5600: 20 66 6f 72 20 69 6e 73 74 61 6c 6c 20 70 72 6f   for install pro
5610: 67 72 61 6d 73 22 0a 76 65 72 62 6f 73 65 5f 6d  grams".verbose_m
5620: 73 67 0a 0a 6e 65 65 64 5f 63 6d 64 20 6d 6b 64  sg..need_cmd mkd
5630: 69 72 0a 6e 65 65 64 5f 63 6d 64 20 70 72 69 6e  ir.need_cmd prin
5640: 74 66 0a 6e 65 65 64 5f 63 6d 64 20 63 75 74 0a  tf.need_cmd cut.
5650: 6e 65 65 64 5f 63 6d 64 20 67 72 65 70 0a 6e 65  need_cmd grep.ne
5660: 65 64 5f 63 6d 64 20 75 6e 61 6d 65 0a 6e 65 65  ed_cmd uname.nee
5670: 64 5f 63 6d 64 20 74 72 0a 6e 65 65 64 5f 63 6d  d_cmd tr.need_cm
5680: 64 20 73 65 64 0a 6e 65 65 64 5f 63 6d 64 20 63  d sed.need_cmd c
5690: 68 6d 6f 64 0a 6e 65 65 64 5f 63 6d 64 20 65 6e  hmod.need_cmd en
56a0: 76 0a 6e 65 65 64 5f 63 6d 64 20 70 77 64 0a 0a  v.need_cmd pwd..
56b0: 43 46 47 5f 41 52 47 53 3d 22 24 7b 40 3a 2d 7d  CFG_ARGS="${@:-}
56c0: 22 0a 0a 48 45 4c 50 3d 30 0a 69 66 20 5b 20 22  "..HELP=0.if [ "
56d0: 24 7b 31 2d 7d 22 20 3d 20 22 2d 2d 68 65 6c 70  ${1-}" = "--help
56e0: 22 20 5d 0a 74 68 65 6e 0a 20 20 20 20 48 45 4c  " ].then.    HEL
56f0: 50 3d 31 0a 20 20 20 20 73 68 69 66 74 0a 20 20  P=1.    shift.  
5700: 20 20 65 63 68 6f 0a 20 20 20 20 65 63 68 6f 20    echo.    echo 
5710: 22 55 73 61 67 65 3a 20 24 30 20 5b 6f 70 74 69  "Usage: $0 [opti
5720: 6f 6e 73 5d 22 0a 20 20 20 20 65 63 68 6f 0a 20  ons]".    echo. 
5730: 20 20 20 65 63 68 6f 20 22 4f 70 74 69 6f 6e 73     echo "Options
5740: 3a 22 0a 20 20 20 20 65 63 68 6f 0a 65 6c 73 65  :".    echo.else
5750: 0a 20 20 20 20 76 65 72 62 6f 73 65 5f 73 74 65  .    verbose_ste
5760: 70 5f 6d 73 67 20 22 70 72 6f 63 65 73 73 69 6e  p_msg "processin
5770: 67 20 61 72 67 75 6d 65 6e 74 73 22 0a 66 69 0a  g arguments".fi.
5780: 0a 4f 50 54 49 4f 4e 53 3d 22 22 0a 42 4f 4f 4c  .OPTIONS="".BOOL
5790: 5f 4f 50 54 49 4f 4e 53 3d 22 22 0a 56 41 4c 5f  _OPTIONS="".VAL_
57a0: 4f 50 54 49 4f 4e 53 3d 22 22 0a 0a 66 6c 61 67  OPTIONS=""..flag
57b0: 20 75 6e 69 6e 73 74 61 6c 6c 20 22 6f 6e 6c 79   uninstall "only
57c0: 20 75 6e 69 6e 73 74 61 6c 6c 20 66 72 6f 6d 20   uninstall from 
57d0: 74 68 65 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  the installation
57e0: 20 70 72 65 66 69 78 22 0a 76 61 6c 6f 70 74 20   prefix".valopt 
57f0: 64 65 73 74 64 69 72 20 22 22 20 22 73 65 74 20  destdir "" "set 
5800: 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 6f 6f  installation roo
5810: 74 22 0a 76 61 6c 6f 70 74 20 70 72 65 66 69 78  t".valopt prefix
5820: 20 22 2f 75 73 72 2f 6c 6f 63 61 6c 22 20 22 73   "/usr/local" "s
5830: 65 74 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20  et installation 
5840: 70 72 65 66 69 78 22 0a 0a 23 20 41 76 6f 69 64  prefix"..# Avoid
5850: 20 70 72 65 70 65 6e 64 69 6e 67 20 61 6e 20 65   prepending an e
5860: 78 74 72 61 20 2f 20 74 6f 20 74 68 65 20 70 72  xtra / to the pr
5870: 65 66 69 78 20 70 61 74 68 20 69 66 20 74 68 65  efix path if the
5880: 72 65 27 73 20 6e 6f 20 64 65 73 74 64 69 72 0a  re's no destdir.
5890: 23 20 4e 42 3a 20 43 46 47 20 76 61 72 73 20 68  # NB: CFG vars h
58a0: 65 72 65 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ere are undefine
58b0: 64 20 77 68 65 6e 20 70 61 73 73 69 6e 67 20 2d  d when passing -
58c0: 2d 68 65 6c 70 0a 69 66 20 5b 20 2d 7a 20 22 24  -help.if [ -z "$
58d0: 7b 43 46 47 5f 44 45 53 54 44 49 52 2d 7d 22 20  {CFG_DESTDIR-}" 
58e0: 5d 3b 20 74 68 65 6e 0a 20 20 20 20 43 46 47 5f  ]; then.    CFG_
58f0: 44 45 53 54 44 49 52 5f 50 52 45 46 49 58 3d 22  DESTDIR_PREFIX="
5900: 24 7b 43 46 47 5f 50 52 45 46 49 58 2d 7d 22 0a  ${CFG_PREFIX-}".
5910: 65 6c 73 65 0a 20 20 20 20 43 46 47 5f 44 45 53  else.    CFG_DES
5920: 54 44 49 52 5f 50 52 45 46 49 58 3d 22 24 43 46  TDIR_PREFIX="$CF
5930: 47 5f 44 45 53 54 44 49 52 2f 24 43 46 47 5f 50  G_DESTDIR/$CFG_P
5940: 52 45 46 49 58 22 0a 66 69 0a 0a 23 20 4e 42 20  REFIX".fi..# NB 
5950: 54 68 69 73 20 69 73 6e 27 74 20 71 75 69 74 65  This isn't quite
5960: 20 74 68 65 20 73 61 6d 65 20 64 65 66 69 6e 69   the same defini
5970: 74 69 6f 6e 20 61 73 20 69 6e 20 60 63 6f 6e 66  tion as in `conf
5980: 69 67 75 72 65 60 2e 0a 23 20 6a 75 73 74 20 75  igure`..# just u
5990: 73 69 6e 67 20 27 6c 69 62 27 20 69 6e 73 74 65  sing 'lib' inste
59a0: 61 64 20 6f 66 20 63 6f 6e 66 69 67 75 72 65 27  ad of configure'
59b0: 73 20 43 46 47 5f 4c 49 42 44 49 52 5f 52 45 4c  s CFG_LIBDIR_REL
59c0: 41 54 49 56 45 0a 76 61 6c 6f 70 74 20 77 69 74  ATIVE.valopt wit
59d0: 68 6f 75 74 20 22 22 20 22 63 6f 6d 6d 61 2d 73  hout "" "comma-s
59e0: 65 70 61 72 61 74 65 64 20 6c 69 73 74 20 6f 66  eparated list of
59f0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 74 6f 20 6e   components to n
5a00: 6f 74 20 69 6e 73 74 61 6c 6c 22 0a 76 61 6c 6f  ot install".valo
5a10: 70 74 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 22 22  pt components ""
5a20: 20 22 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65   "comma-separate
5a30: 64 20 6c 69 73 74 20 6f 66 20 63 6f 6d 70 6f 6e  d list of compon
5a40: 65 6e 74 73 20 74 6f 20 69 6e 73 74 61 6c 6c 22  ents to install"
5a50: 0a 66 6c 61 67 20 6c 69 73 74 2d 63 6f 6d 70 6f  .flag list-compo
5a60: 6e 65 6e 74 73 20 22 6c 69 73 74 20 61 76 61 69  nents "list avai
5a70: 6c 61 62 6c 65 20 63 6f 6d 70 6f 6e 65 6e 74 73  lable components
5a80: 22 0a 76 61 6c 6f 70 74 20 73 79 73 63 6f 6e 66  ".valopt sysconf
5a90: 64 69 72 20 22 2f 65 74 63 22 20 22 69 6e 73 74  dir "/etc" "inst
5aa0: 61 6c 6c 20 73 79 73 74 65 6d 20 63 6f 6e 66 69  all system confi
5ab0: 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 22 0a  guration files".
5ac0: 76 61 6c 6f 70 74 20 62 69 6e 64 69 72 20 22 24  valopt bindir "$
5ad0: 43 46 47 5f 44 45 53 54 44 49 52 5f 50 52 45 46  CFG_DESTDIR_PREF
5ae0: 49 58 2f 62 69 6e 22 20 22 69 6e 73 74 61 6c 6c  IX/bin" "install
5af0: 20 62 69 6e 61 72 69 65 73 22 0a 76 61 6c 6f 70   binaries".valop
5b00: 74 20 6c 69 62 64 69 72 20 22 24 43 46 47 5f 44  t libdir "$CFG_D
5b10: 45 53 54 44 49 52 5f 50 52 45 46 49 58 2f 6c 69  ESTDIR_PREFIX/li
5b20: 62 22 20 22 69 6e 73 74 61 6c 6c 20 6c 69 62 72  b" "install libr
5b30: 61 72 69 65 73 22 0a 76 61 6c 6f 70 74 20 6d 61  aries".valopt ma
5b40: 6e 64 69 72 20 22 24 43 46 47 5f 44 45 53 54 44  ndir "$CFG_DESTD
5b50: 49 52 5f 50 52 45 46 49 58 2f 73 68 61 72 65 2f  IR_PREFIX/share/
5b60: 6d 61 6e 22 20 22 69 6e 73 74 61 6c 6c 20 6d 61  man" "install ma
5b70: 6e 20 70 61 67 65 73 20 69 6e 20 50 41 54 48 22  n pages in PATH"
5b80: 0a 23 20 4e 42 20 53 65 65 20 74 68 65 20 64 6f  .# NB See the do
5b90: 63 64 69 72 20 68 61 6e 64 6c 69 6e 67 20 69 6e  cdir handling in
5ba0: 20 69 6e 73 74 61 6c 6c 5f 63 6f 6d 70 6f 6e 65   install_compone
5bb0: 6e 74 73 20 66 6f 72 20 61 6e 20 65 78 70 6c 61  nts for an expla
5bc0: 6e 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 0a 23  nation of this.#
5bd0: 20 77 65 69 72 64 20 3c 64 65 66 61 75 6c 74 3e   weird <default>
5be0: 20 73 74 72 69 6e 67 0a 76 61 6c 6f 70 74 20 64   string.valopt d
5bf0: 6f 63 64 69 72 20 22 5c 3c 64 65 66 61 75 6c 74  ocdir "\<default
5c00: 5c 3e 22 20 22 69 6e 73 74 61 6c 6c 20 64 6f 63  \>" "install doc
5c10: 75 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 50 41  umentation in PA
5c20: 54 48 22 0a 6f 70 74 20 6c 64 63 6f 6e 66 69 67  TH".opt ldconfig
5c30: 20 31 20 22 72 75 6e 20 6c 64 63 6f 6e 66 69 67   1 "run ldconfig
5c40: 20 61 66 74 65 72 20 69 6e 73 74 61 6c 6c 61 74   after installat
5c50: 69 6f 6e 20 28 4c 69 6e 75 78 20 6f 6e 6c 79 29  ion (Linux only)
5c60: 22 0a 6f 70 74 20 76 65 72 69 66 79 20 31 20 22  ".opt verify 1 "
5c70: 6f 62 73 6f 6c 65 74 65 22 0a 66 6c 61 67 20 76  obsolete".flag v
5c80: 65 72 62 6f 73 65 20 22 72 75 6e 20 77 69 74 68  erbose "run with
5c90: 20 76 65 72 62 6f 73 65 20 6f 75 74 70 75 74 22   verbose output"
5ca0: 0a 0a 69 66 20 5b 20 24 48 45 4c 50 20 2d 65 71  ..if [ $HELP -eq
5cb0: 20 31 20 5d 0a 74 68 65 6e 0a 20 20 20 20 65 63   1 ].then.    ec
5cc0: 68 6f 0a 20 20 20 20 65 78 69 74 20 30 0a 66 69  ho.    exit 0.fi
5cd0: 0a 0a 76 65 72 62 6f 73 65 5f 73 74 65 70 5f 6d  ..verbose_step_m
5ce0: 73 67 20 22 76 61 6c 69 64 61 74 69 6e 67 20 61  sg "validating a
5cf0: 72 67 75 6d 65 6e 74 73 22 0a 76 61 6c 69 64 61  rguments".valida
5d00: 74 65 5f 6f 70 74 0a 0a 23 20 54 65 6d 70 6c 61  te_opt..# Templa
5d10: 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
5d20: 2e 0a 23 20 54 68 65 73 65 20 6e 61 6d 65 73 20  ..# These names 
5d30: 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 27 25  surrounded by '%
5d40: 25 60 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  %` are replaced 
5d50: 62 79 20 73 65 64 20 77 68 65 6e 20 67 65 6e 65  by sed when gene
5d60: 72 61 74 69 6e 67 20 69 6e 73 74 61 6c 6c 2e 73  rating install.s
5d70: 68 0a 23 20 46 49 58 4d 45 3a 20 4d 69 67 68 74  h.# FIXME: Might
5d80: 20 77 61 6e 74 20 74 6f 20 63 6f 6e 73 69 64 65   want to conside
5d90: 72 20 6c 6f 61 64 69 6e 67 20 74 68 69 73 20 66  r loading this f
5da0: 72 6f 6d 20 61 20 66 69 6c 65 20 61 6e 64 20 6e  rom a file and n
5db0: 6f 74 20 67 65 6e 65 72 61 74 69 6e 67 20 69 6e  ot generating in
5dc0: 73 74 61 6c 6c 2e 73 68 0a 0a 23 20 52 75 73 74  stall.sh..# Rust
5dd0: 20 6f 72 20 43 61 72 67 6f 0a 54 45 4d 50 4c 41   or Cargo.TEMPLA
5de0: 54 45 5f 50 52 4f 44 55 43 54 5f 4e 41 4d 45 3d  TE_PRODUCT_NAME=
5df0: 25 25 54 45 4d 50 4c 41 54 45 5f 50 52 4f 44 55  %%TEMPLATE_PRODU
5e00: 43 54 5f 4e 41 4d 45 25 25 0a 23 20 72 75 73 74  CT_NAME%%.# rust
5e10: 6c 69 62 20 6f 72 20 63 61 72 67 6f 0a 54 45 4d  lib or cargo.TEM
5e20: 50 4c 41 54 45 5f 52 45 4c 5f 4d 41 4e 49 46 45  PLATE_REL_MANIFE
5e30: 53 54 5f 44 49 52 3d 25 25 54 45 4d 50 4c 41 54  ST_DIR=%%TEMPLAT
5e40: 45 5f 52 45 4c 5f 4d 41 4e 49 46 45 53 54 5f 44  E_REL_MANIFEST_D
5e50: 49 52 25 25 0a 23 20 27 52 75 73 74 20 69 73 20  IR%%.# 'Rust is 
5e60: 72 65 61 64 79 20 74 6f 20 72 6f 6c 6c 2e 27 20  ready to roll.' 
5e70: 6f 72 20 27 43 61 72 67 6f 20 69 73 20 63 6f 6f  or 'Cargo is coo
5e80: 6c 20 74 6f 20 63 72 75 69 73 65 2e 27 0a 54 45  l to cruise.'.TE
5e90: 4d 50 4c 41 54 45 5f 53 55 43 43 45 53 53 5f 4d  MPLATE_SUCCESS_M
5ea0: 45 53 53 41 47 45 3d 25 25 54 45 4d 50 4c 41 54  ESSAGE=%%TEMPLAT
5eb0: 45 5f 53 55 43 43 45 53 53 5f 4d 45 53 53 41 47  E_SUCCESS_MESSAG
5ec0: 45 25 25 0a 23 20 4c 6f 63 61 74 69 6f 6e 73 20  E%%.# Locations 
5ed0: 74 6f 20 6c 6f 6f 6b 20 66 6f 72 20 64 69 72 65  to look for dire
5ee0: 63 74 6f 72 69 65 73 20 63 6f 6e 74 61 69 6e 69  ctories containi
5ef0: 6e 67 20 6c 65 67 61 63 79 2c 20 70 72 65 2d 76  ng legacy, pre-v
5f00: 65 72 73 69 6f 6e 65 64 20 6d 61 6e 69 66 65 73  ersioned manifes
5f10: 74 73 0a 54 45 4d 50 4c 41 54 45 5f 4c 45 47 41  ts.TEMPLATE_LEGA
5f20: 43 59 5f 4d 41 4e 49 46 45 53 54 5f 44 49 52 53  CY_MANIFEST_DIRS
5f30: 3d 25 25 54 45 4d 50 4c 41 54 45 5f 4c 45 47 41  =%%TEMPLATE_LEGA
5f40: 43 59 5f 4d 41 4e 49 46 45 53 54 5f 44 49 52 53  CY_MANIFEST_DIRS
5f50: 25 25 0a 23 20 54 68 65 20 69 6e 73 74 61 6c 6c  %%.# The install
5f60: 65 72 20 76 65 72 73 69 6f 6e 0a 54 45 4d 50 4c  er version.TEMPL
5f70: 41 54 45 5f 52 55 53 54 5f 49 4e 53 54 41 4c 4c  ATE_RUST_INSTALL
5f80: 45 52 5f 56 45 52 53 49 4f 4e 3d 25 25 54 45 4d  ER_VERSION=%%TEM
5f90: 50 4c 41 54 45 5f 52 55 53 54 5f 49 4e 53 54 41  PLATE_RUST_INSTA
5fa0: 4c 4c 45 52 5f 56 45 52 53 49 4f 4e 25 25 0a 0a  LLER_VERSION%%..
5fb0: 23 20 4f 4b 2c 20 6c 65 74 27 73 20 67 65 74 20  # OK, let's get 
5fc0: 69 6e 73 74 61 6c 6c 69 6e 67 20 2e 2e 2e 0a 0a  installing .....
5fd0: 23 20 54 68 69 73 20 69 73 20 77 68 65 72 65 20  # This is where 
5fe0: 77 65 20 61 72 65 20 69 6e 73 74 61 6c 6c 69 6e  we are installin
5ff0: 67 20 66 72 6f 6d 0a 73 72 63 5f 64 69 72 3d 22  g from.src_dir="
6000: 24 28 61 62 73 5f 70 61 74 68 20 24 28 64 69 72  $(abs_path $(dir
6010: 6e 61 6d 65 20 22 24 30 22 29 29 22 0a 0a 23 20  name "$0"))"..# 
6020: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
6030: 73 63 72 69 70 74 0a 73 72 63 5f 62 61 73 65 6e  script.src_basen
6040: 61 6d 65 3d 22 24 28 62 61 73 65 6e 61 6d 65 20  ame="$(basename 
6050: 22 24 30 22 29 22 0a 0a 23 20 49 66 20 77 65 27  "$0")"..# If we'
6060: 76 65 20 62 65 65 6e 20 72 75 6e 20 61 73 20 27  ve been run as '
6070: 75 6e 69 6e 73 74 61 6c 6c 2e 73 68 27 20 28 66  uninstall.sh' (f
6080: 72 6f 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67  rom the existing
6090: 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 29 0a 23   installation).#
60a0: 20 74 68 65 6e 20 77 65 27 72 65 20 64 6f 69 6e   then we're doin
60b0: 67 20 61 20 66 75 6c 6c 20 75 6e 69 6e 73 74 61  g a full uninsta
60c0: 6c 6c 2c 20 61 73 20 6f 70 70 6f 73 65 64 20 74  ll, as opposed t
60d0: 6f 20 74 68 65 20 2d 2d 75 6e 69 6e 73 74 61 6c  o the --uninstal
60e0: 6c 20 66 6c 61 67 0a 23 20 77 68 69 63 68 20 6a  l flag.# which j
60f0: 75 73 74 20 6d 65 61 6e 73 20 27 75 6e 69 6e 73  ust means 'unins
6100: 74 61 6c 6c 20 6d 79 20 63 6f 6d 70 6f 6e 65 6e  tall my componen
6110: 74 73 27 2e 0a 69 66 20 5b 20 22 24 73 72 63 5f  ts'..if [ "$src_
6120: 62 61 73 65 6e 61 6d 65 22 20 3d 20 22 75 6e 69  basename" = "uni
6130: 6e 73 74 61 6c 6c 2e 73 68 22 20 5d 3b 20 74 68  nstall.sh" ]; th
6140: 65 6e 0a 20 20 20 20 69 66 20 5b 20 22 24 7b 2a  en.    if [ "${*
6150: 3a 2d 7d 22 20 21 3d 20 22 22 20 5d 3b 20 74 68  :-}" != "" ]; th
6160: 65 6e 0a 09 23 20 43 75 72 72 65 6e 74 6c 79 20  en..# Currently 
6170: 64 6f 6e 27 74 20 6b 6e 6f 77 20 77 68 61 74 20  don't know what 
6180: 74 6f 20 64 6f 20 77 69 74 68 20 61 72 67 75 6d  to do with argum
6190: 65 6e 74 73 20 69 6e 20 74 68 69 73 20 6d 6f 64  ents in this mod
61a0: 65 0a 09 65 72 72 20 22 75 6e 69 6e 73 74 61 6c  e..err "uninstal
61b0: 6c 2e 73 68 20 64 6f 65 73 20 6e 6f 74 20 74 61  l.sh does not ta
61c0: 6b 65 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  ke any arguments
61d0: 22 0a 20 20 20 20 66 69 0a 20 20 20 20 43 46 47  ".    fi.    CFG
61e0: 5f 55 4e 49 4e 53 54 41 4c 4c 3d 31 0a 20 20 20  _UNINSTALL=1.   
61f0: 20 43 46 47 5f 44 45 53 54 44 49 52 5f 50 52 45   CFG_DESTDIR_PRE
6200: 46 49 58 3d 22 24 28 61 62 73 5f 70 61 74 68 20  FIX="$(abs_path 
6210: 22 24 73 72 63 5f 64 69 72 2f 2e 2e 2f 2e 2e 2f  "$src_dir/../../
6220: 22 29 22 0a 20 20 20 20 43 46 47 5f 4c 49 42 44  ")".    CFG_LIBD
6230: 49 52 3d 22 24 28 61 62 73 5f 70 61 74 68 20 22  IR="$(abs_path "
6240: 24 73 72 63 5f 64 69 72 2f 2e 2e 2f 22 29 22 0a  $src_dir/../")".
6250: 66 69 0a 0a 23 20 54 68 69 73 20 69 73 20 77 68  fi..# This is wh
6260: 65 72 65 20 77 65 20 61 72 65 20 69 6e 73 74 61  ere we are insta
6270: 6c 6c 69 6e 67 20 74 6f 0a 64 65 73 74 5f 70 72  lling to.dest_pr
6280: 65 66 69 78 3d 22 24 43 46 47 5f 44 45 53 54 44  efix="$CFG_DESTD
6290: 49 52 5f 50 52 45 46 49 58 22 0a 0a 23 20 4f 70  IR_PREFIX"..# Op
62a0: 65 6e 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74  en the component
62b0: 73 20 66 69 6c 65 20 74 6f 20 67 65 74 20 74 68  s file to get th
62c0: 65 20 6c 69 73 74 20 6f 66 20 63 6f 6d 70 6f 6e  e list of compon
62d0: 65 6e 74 73 20 74 6f 20 69 6e 73 74 61 6c 6c 2e  ents to install.
62e0: 0a 23 20 4e 42 3a 20 44 75 72 69 6e 67 20 69 6e  .# NB: During in
62f0: 73 74 61 6c 6c 20 74 68 69 73 20 63 6f 6d 70 6f  stall this compo
6300: 6e 65 6e 74 73 20 66 69 6c 65 20 69 73 20 72 65  nents file is re
6310: 61 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 73 74  ad from the inst
6320: 61 6c 6c 65 72 27 73 0a 23 20 73 6f 75 72 63 65  aller's.# source
6330: 20 64 69 72 2c 20 64 75 72 69 6e 67 20 61 20 66   dir, during a f
6340: 75 6c 6c 20 75 6e 69 6e 73 74 61 6c 6c 20 69 74  ull uninstall it
6350: 27 73 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  's read from the
6360: 20 6d 61 6e 69 66 65 73 74 20 64 69 72 2c 0a 23   manifest dir,.#
6370: 20 61 6e 64 20 74 68 75 73 20 63 6f 6e 74 61 69   and thus contai
6380: 6e 73 20 61 6c 6c 20 69 6e 73 74 61 6c 6c 65 64  ns all installed
6390: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0a 63 6f 6d   components..com
63a0: 70 6f 6e 65 6e 74 73 3d 60 63 61 74 20 22 24 73  ponents=`cat "$s
63b0: 72 63 5f 64 69 72 2f 63 6f 6d 70 6f 6e 65 6e 74  rc_dir/component
63c0: 73 22 60 0a 0a 23 20 53 61 6e 69 74 79 20 63 68  s"`..# Sanity ch
63d0: 65 63 6b 3a 20 64 6f 20 77 65 20 68 61 76 65 20  eck: do we have 
63e0: 63 6f 6d 70 6f 6e 65 6e 74 73 3f 0a 69 66 20 5b  components?.if [
63f0: 20 21 20 2d 6e 20 22 24 63 6f 6d 70 6f 6e 65 6e   ! -n "$componen
6400: 74 73 22 20 5d 3b 20 74 68 65 6e 0a 20 20 20 20  ts" ]; then.    
6410: 65 72 72 20 22 75 6e 61 62 6c 65 20 74 6f 20 66  err "unable to f
6420: 69 6e 64 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  ind installation
6430: 20 63 6f 6d 70 6f 6e 65 6e 74 73 22 0a 66 69 0a   components".fi.
6440: 0a 23 20 49 66 20 74 68 65 20 75 73 65 72 20 61  .# If the user a
6450: 73 6b 65 64 20 66 6f 72 20 61 20 63 6f 6d 70 6f  sked for a compo
6460: 6e 65 6e 74 20 6c 69 73 74 2c 20 64 6f 20 74 68  nent list, do th
6470: 61 74 20 61 6e 64 20 65 78 69 74 0a 69 66 20 5b  at and exit.if [
6480: 20 2d 6e 20 22 24 7b 43 46 47 5f 4c 49 53 54 5f   -n "${CFG_LIST_
6490: 43 4f 4d 50 4f 4e 45 4e 54 53 2d 7d 22 20 5d 3b  COMPONENTS-}" ];
64a0: 20 74 68 65 6e 0a 20 20 20 20 65 63 68 6f 0a 20   then.    echo. 
64b0: 20 20 20 65 63 68 6f 20 22 23 20 41 76 61 69 6c     echo "# Avail
64c0: 61 62 6c 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 22  able components"
64d0: 0a 20 20 20 20 65 63 68 6f 0a 20 20 20 20 66 6f  .    echo.    fo
64e0: 72 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 20 24  r component in $
64f0: 63 6f 6d 70 6f 6e 65 6e 74 73 3b 20 64 6f 0a 09  components; do..
6500: 65 63 68 6f 20 22 2a 20 24 63 6f 6d 70 6f 6e 65  echo "* $compone
6510: 6e 74 22 0a 20 20 20 20 64 6f 6e 65 0a 20 20 20  nt".    done.   
6520: 20 65 63 68 6f 0a 20 20 20 20 65 78 69 74 20 30   echo.    exit 0
6530: 0a 66 69 0a 0a 23 20 49 66 20 74 68 65 20 75 73  .fi..# If the us
6540: 65 72 20 73 70 65 63 69 66 69 65 64 20 77 68 69  er specified whi
6550: 63 68 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 74 6f  ch components to
6560: 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61   install/uninsta
6570: 6c 6c 2c 0a 23 20 74 68 65 6e 20 76 61 6c 69 64  ll,.# then valid
6580: 61 74 65 20 74 68 61 74 20 74 68 65 79 20 65 78  ate that they ex
6590: 69 73 74 20 61 6e 64 20 73 65 6c 65 63 74 20 74  ist and select t
65a0: 68 65 6d 20 66 6f 72 20 69 6e 73 74 61 6c 6c 61  hem for installa
65b0: 74 69 6f 6e 0a 69 66 20 5b 20 2d 6e 20 22 24 43  tion.if [ -n "$C
65c0: 46 47 5f 43 4f 4d 50 4f 4e 45 4e 54 53 22 20 5d  FG_COMPONENTS" ]
65d0: 3b 20 74 68 65 6e 0a 20 20 20 20 23 20 52 65 6d  ; then.    # Rem
65e0: 6f 76 65 20 63 6f 6d 6d 61 73 0a 20 20 20 20 75  ove commas.    u
65f0: 73 65 72 5f 63 6f 6d 70 6f 6e 65 6e 74 73 3d 22  ser_components="
6600: 24 28 65 63 68 6f 20 22 24 43 46 47 5f 43 4f 4d  $(echo "$CFG_COM
6610: 50 4f 4e 45 4e 54 53 22 20 7c 20 73 65 64 20 22  PONENTS" | sed "
6620: 73 2f 2c 2f 20 2f 67 22 29 22 0a 20 20 20 20 66  s/,/ /g")".    f
6630: 6f 72 20 75 73 65 72 5f 63 6f 6d 70 6f 6e 65 6e  or user_componen
6640: 74 20 69 6e 20 24 75 73 65 72 5f 63 6f 6d 70 6f  t in $user_compo
6650: 6e 65 6e 74 73 3b 20 64 6f 0a 09 66 6f 75 6e 64  nents; do..found
6660: 3d 66 61 6c 73 65 0a 09 66 6f 72 20 6d 79 5f 63  =false..for my_c
6670: 6f 6d 70 6f 6e 65 6e 74 20 69 6e 20 24 63 6f 6d  omponent in $com
6680: 70 6f 6e 65 6e 74 73 3b 20 64 6f 0a 09 20 20 20  ponents; do..   
6690: 20 69 66 20 5b 20 22 24 75 73 65 72 5f 63 6f 6d   if [ "$user_com
66a0: 70 6f 6e 65 6e 74 22 20 3d 20 22 24 6d 79 5f 63  ponent" = "$my_c
66b0: 6f 6d 70 6f 6e 65 6e 74 22 20 5d 3b 20 74 68 65  omponent" ]; the
66c0: 6e 0a 09 09 66 6f 75 6e 64 3d 74 72 75 65 0a 09  n...found=true..
66d0: 20 20 20 20 66 69 0a 09 64 6f 6e 65 0a 09 69 66      fi..done..if
66e0: 20 5b 20 22 24 66 6f 75 6e 64 22 20 3d 20 66 61   [ "$found" = fa
66f0: 6c 73 65 20 5d 3b 20 74 68 65 6e 0a 09 20 20 20  lse ]; then..   
6700: 20 65 72 72 20 22 75 6e 6b 6e 6f 77 6e 20 63 6f   err "unknown co
6710: 6d 70 6f 6e 65 6e 74 3a 20 24 75 73 65 72 5f 63  mponent: $user_c
6720: 6f 6d 70 6f 6e 65 6e 74 22 0a 09 66 69 0a 20 20  omponent"..fi.  
6730: 20 20 64 6f 6e 65 0a 20 20 20 20 63 6f 6d 70 6f    done.    compo
6740: 6e 65 6e 74 73 3d 22 24 75 73 65 72 5f 63 6f 6d  nents="$user_com
6750: 70 6f 6e 65 6e 74 73 22 0a 66 69 0a 0a 69 66 20  ponents".fi..if 
6760: 5b 20 2d 6e 20 22 24 43 46 47 5f 57 49 54 48 4f  [ -n "$CFG_WITHO
6770: 55 54 22 20 5d 3b 20 74 68 65 6e 0a 20 20 20 20  UT" ]; then.    
6780: 77 69 74 68 6f 75 74 5f 63 6f 6d 70 6f 6e 65 6e  without_componen
6790: 74 73 3d 22 24 28 65 63 68 6f 20 22 24 43 46 47  ts="$(echo "$CFG
67a0: 5f 57 49 54 48 4f 55 54 22 20 7c 20 73 65 64 20  _WITHOUT" | sed 
67b0: 22 73 2f 2c 2f 20 2f 67 22 29 22 0a 20 20 20 20  "s/,/ /g")".    
67c0: 66 6f 72 20 77 69 74 68 6f 75 74 5f 63 6f 6d 70  for without_comp
67d0: 6f 6e 65 6e 74 20 69 6e 20 24 77 69 74 68 6f 75  onent in $withou
67e0: 74 5f 63 6f 6d 70 6f 6e 65 6e 74 73 3b 20 64 6f  t_components; do
67f0: 0a 09 63 6f 6d 70 6f 6e 65 6e 74 73 3d 22 24 28  ..components="$(
6800: 65 63 68 6f 20 22 24 63 6f 6d 70 6f 6e 65 6e 74  echo "$component
6810: 73 22 20 7c 20 73 65 64 20 22 73 2f 24 77 69 74  s" | sed "s/$wit
6820: 68 6f 75 74 5f 63 6f 6d 70 6f 6e 65 6e 74 2f 2f  hout_component//
6830: 22 20 7c 20 73 65 64 20 22 73 2f 24 77 69 74 68  " | sed "s/$with
6840: 6f 75 74 5f 63 6f 6d 70 6f 6e 65 6e 74 2f 2f 22  out_component//"
6850: 29 22 0a 20 20 20 20 64 6f 6e 65 0a 66 69 0a 0a  )".    done.fi..
6860: 69 66 20 5b 20 2d 7a 20 22 24 63 6f 6d 70 6f 6e  if [ -z "$compon
6870: 65 6e 74 73 22 20 5d 3b 20 74 68 65 6e 0a 20 20  ents" ]; then.  
6880: 20 20 69 66 20 5b 20 2d 7a 20 22 24 7b 43 46 47    if [ -z "${CFG
6890: 5f 55 4e 49 4e 53 54 41 4c 4c 2d 7d 22 20 5d 3b  _UNINSTALL-}" ];
68a0: 20 74 68 65 6e 0a 09 65 72 72 20 22 6e 6f 20 63   then..err "no c
68b0: 6f 6d 70 6f 6e 65 6e 74 73 20 73 65 6c 65 63 74  omponents select
68c0: 65 64 20 66 6f 72 20 69 6e 73 74 61 6c 6c 61 74  ed for installat
68d0: 69 6f 6e 22 0a 20 20 20 20 65 6c 73 65 0a 09 65  ion".    else..e
68e0: 72 72 20 22 6e 6f 20 63 6f 6d 70 6f 6e 65 6e 74  rr "no component
68f0: 73 20 73 65 6c 65 63 74 65 64 20 66 6f 72 20 75  s selected for u
6900: 6e 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 22 0a 20  ninstallation". 
6910: 20 20 20 66 69 0a 66 69 0a 0a 64 6f 5f 70 72 65     fi.fi..do_pre
6920: 66 6c 69 67 68 74 5f 73 61 6e 69 74 79 5f 63 68  flight_sanity_ch
6930: 65 63 6b 73 20 22 24 73 72 63 5f 64 69 72 22 20  ecks "$src_dir" 
6940: 22 24 64 65 73 74 5f 70 72 65 66 69 78 22 0a 0a  "$dest_prefix"..
6950: 23 20 55 73 69 6e 67 20 61 6e 20 61 62 73 6f 6c  # Using an absol
6960: 75 74 65 20 70 61 74 68 20 74 6f 20 6c 69 62 64  ute path to libd
6970: 69 72 20 69 6e 20 61 20 66 65 77 20 70 6c 61 63  ir in a few plac
6980: 65 73 20 73 6f 20 74 68 61 74 20 74 68 65 20 73  es so that the s
6990: 74 61 74 75 73 0a 23 20 6d 65 73 73 61 67 65 73  tatus.# messages
69a0: 20 61 72 65 20 63 6f 6e 73 69 73 74 65 6e 74 6c   are consistentl
69b0: 79 20 75 73 69 6e 67 20 61 62 73 6f 6c 75 74 65  y using absolute
69c0: 20 70 61 74 68 73 2e 0a 61 62 73 6f 6c 75 74 69   paths..absoluti
69d0: 66 79 20 22 24 43 46 47 5f 4c 49 42 44 49 52 22  fy "$CFG_LIBDIR"
69e0: 0a 61 62 73 5f 6c 69 62 64 69 72 3d 22 24 52 45  .abs_libdir="$RE
69f0: 54 56 41 4c 22 0a 61 73 73 65 72 74 5f 6e 7a 20  TVAL".assert_nz 
6a00: 22 24 61 62 73 5f 6c 69 62 64 69 72 22 20 22 61  "$abs_libdir" "a
6a10: 62 73 5f 6c 69 62 64 69 72 22 0a 0a 23 20 43 72  bs_libdir"..# Cr
6a20: 65 61 74 65 20 74 68 65 20 6d 61 6e 69 66 65 73  eate the manifes
6a30: 74 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 65  t directory, whe
6a40: 72 65 20 77 65 20 77 69 6c 6c 20 70 75 74 20 6f  re we will put o
6a50: 75 72 20 6c 6f 67 73 0a 6d 61 6b 65 5f 64 69 72  ur logs.make_dir
6a60: 5f 72 65 63 75 72 73 69 76 65 20 22 24 61 62 73  _recursive "$abs
6a70: 5f 6c 69 62 64 69 72 2f 24 54 45 4d 50 4c 41 54  _libdir/$TEMPLAT
6a80: 45 5f 52 45 4c 5f 4d 41 4e 49 46 45 53 54 5f 44  E_REL_MANIFEST_D
6a90: 49 52 22 0a 6e 65 65 64 5f 6f 6b 20 22 66 61 69  IR".need_ok "fai
6aa0: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 24 54  led to create $T
6ab0: 45 4d 50 4c 41 54 45 5f 52 45 4c 5f 4d 41 4e 49  EMPLATE_REL_MANI
6ac0: 46 45 53 54 5f 44 49 52 22 0a 0a 23 20 4c 6f 67  FEST_DIR"..# Log
6ad0: 20 6d 65 73 73 61 67 65 73 20 61 6e 64 20 63 6f   messages and co
6ae0: 6d 6d 61 6e 64 73 0a 69 6e 69 74 5f 6c 6f 67 67  mmands.init_logg
6af0: 69 6e 67 20 22 24 61 62 73 5f 6c 69 62 64 69 72  ing "$abs_libdir
6b00: 22 0a 0a 23 20 46 69 72 73 74 20 64 6f 20 61 6e  "..# First do an
6b10: 79 20 75 6e 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  y uninstallation
6b20: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 66 72 6f 6d  , including from
6b30: 20 6c 65 67 61 63 79 20 6d 61 6e 69 66 65 73 74   legacy manifest
6b40: 73 2e 20 54 68 69 73 0a 23 20 77 69 6c 6c 20 61  s. This.# will a
6b50: 6c 73 6f 20 75 70 67 72 61 64 65 20 74 68 65 20  lso upgrade the 
6b60: 6d 65 74 61 64 61 74 61 20 6f 66 20 65 78 69 73  metadata of exis
6b70: 74 69 6e 67 20 69 6e 73 74 61 6c 6c 73 2e 0a 75  ting installs..u
6b80: 6e 69 6e 73 74 61 6c 6c 5f 63 6f 6d 70 6f 6e 65  ninstall_compone
6b90: 6e 74 73 20 22 24 61 62 73 5f 6c 69 62 64 69 72  nts "$abs_libdir
6ba0: 22 20 22 24 64 65 73 74 5f 70 72 65 66 69 78 22  " "$dest_prefix"
6bb0: 20 22 24 63 6f 6d 70 6f 6e 65 6e 74 73 22 0a 0a   "$components"..
6bc0: 23 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79 20  # If we're only 
6bd0: 75 6e 69 6e 73 74 61 6c 6c 69 6e 67 20 74 68 65  uninstalling the
6be0: 6e 20 65 78 69 74 0a 69 66 20 5b 20 2d 6e 20 22  n exit.if [ -n "
6bf0: 24 7b 43 46 47 5f 55 4e 49 4e 53 54 41 4c 4c 2d  ${CFG_UNINSTALL-
6c00: 7d 22 20 5d 0a 74 68 65 6e 0a 20 20 20 20 65 63  }" ].then.    ec
6c10: 68 6f 0a 20 20 20 20 65 63 68 6f 20 22 20 20 20  ho.    echo "   
6c20: 20 24 54 45 4d 50 4c 41 54 45 5f 50 52 4f 44 55   $TEMPLATE_PRODU
6c30: 43 54 5f 4e 41 4d 45 20 69 73 20 75 6e 69 6e 73  CT_NAME is unins
6c40: 74 61 6c 6c 65 64 2e 22 0a 20 20 20 20 65 63 68  talled.".    ech
6c50: 6f 0a 20 20 20 20 65 78 69 74 20 30 0a 66 69 0a  o.    exit 0.fi.
6c60: 0a 23 20 43 72 65 61 74 65 20 74 68 65 20 6d 61  .# Create the ma
6c70: 6e 69 66 65 73 74 20 64 69 72 65 63 74 6f 72 79  nifest directory
6c80: 20 61 67 61 69 6e 21 20 75 6e 69 6e 73 74 61 6c   again! uninstal
6c90: 6c 5f 6c 65 67 61 63 79 0a 23 20 6d 61 79 20 68  l_legacy.# may h
6ca0: 61 76 65 20 64 65 6c 65 74 65 64 20 69 74 2e 0a  ave deleted it..
6cb0: 6d 61 6b 65 5f 64 69 72 5f 72 65 63 75 72 73 69  make_dir_recursi
6cc0: 76 65 20 22 24 61 62 73 5f 6c 69 62 64 69 72 2f  ve "$abs_libdir/
6cd0: 24 54 45 4d 50 4c 41 54 45 5f 52 45 4c 5f 4d 41  $TEMPLATE_REL_MA
6ce0: 4e 49 46 45 53 54 5f 44 49 52 22 0a 6e 65 65 64  NIFEST_DIR".need
6cf0: 5f 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f 20 63  _ok "failed to c
6d00: 72 65 61 74 65 20 24 54 45 4d 50 4c 41 54 45 5f  reate $TEMPLATE_
6d10: 52 45 4c 5f 4d 41 4e 49 46 45 53 54 5f 44 49 52  REL_MANIFEST_DIR
6d20: 22 0a 0a 23 20 44 72 6f 70 20 74 68 65 20 76 65  "..# Drop the ve
6d30: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 6e 74  rsion number int
6d40: 6f 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 64  o the manifest d
6d50: 69 72 0a 77 72 69 74 65 5f 74 6f 5f 66 69 6c 65  ir.write_to_file
6d60: 20 22 24 54 45 4d 50 4c 41 54 45 5f 52 55 53 54   "$TEMPLATE_RUST
6d70: 5f 49 4e 53 54 41 4c 4c 45 52 5f 56 45 52 53 49  _INSTALLER_VERSI
6d80: 4f 4e 22 20 22 24 61 62 73 5f 6c 69 62 64 69 72  ON" "$abs_libdir
6d90: 2f 24 54 45 4d 50 4c 41 54 45 5f 52 45 4c 5f 4d  /$TEMPLATE_REL_M
6da0: 41 4e 49 46 45 53 54 5f 44 49 52 2f 72 75 73 74  ANIFEST_DIR/rust
6db0: 2d 69 6e 73 74 61 6c 6c 65 72 2d 76 65 72 73 69  -installer-versi
6dc0: 6f 6e 22 0a 63 72 69 74 69 63 61 6c 5f 6e 65 65  on".critical_nee
6dd0: 64 5f 6f 6b 20 22 66 61 69 6c 65 64 20 74 6f 20  d_ok "failed to 
6de0: 77 72 69 74 65 20 69 6e 73 74 61 6c 6c 65 72 20  write installer 
6df0: 76 65 72 73 69 6f 6e 22 0a 0a 23 20 49 6e 73 74  version"..# Inst
6e00: 61 6c 6c 20 74 68 65 20 75 6e 69 6e 73 74 61 6c  all the uninstal
6e10: 6c 65 72 0a 69 6e 73 74 61 6c 6c 5f 75 6e 69 6e  ler.install_unin
6e20: 73 74 61 6c 6c 65 72 20 22 24 73 72 63 5f 64 69  staller "$src_di
6e30: 72 22 20 22 24 73 72 63 5f 62 61 73 65 6e 61 6d  r" "$src_basenam
6e40: 65 22 20 22 24 61 62 73 5f 6c 69 62 64 69 72 22  e" "$abs_libdir"
6e50: 0a 0a 23 20 49 6e 73 74 61 6c 6c 20 65 61 63 68  ..# Install each
6e60: 20 63 6f 6d 70 6f 6e 65 6e 74 0a 69 6e 73 74 61   component.insta
6e70: 6c 6c 5f 63 6f 6d 70 6f 6e 65 6e 74 73 20 22 24  ll_components "$
6e80: 73 72 63 5f 64 69 72 22 20 22 24 61 62 73 5f 6c  src_dir" "$abs_l
6e90: 69 62 64 69 72 22 20 22 24 64 65 73 74 5f 70 72  ibdir" "$dest_pr
6ea0: 65 66 69 78 22 20 22 24 63 6f 6d 70 6f 6e 65 6e  efix" "$componen
6eb0: 74 73 22 0a 0a 23 20 4d 61 6b 65 20 64 79 6e 61  ts"..# Make dyna
6ec0: 6d 69 63 20 6c 69 62 72 61 72 69 65 73 20 61 76  mic libraries av
6ed0: 61 69 6c 61 62 6c 65 20 74 6f 20 74 68 65 20 6c  ailable to the l
6ee0: 69 6e 6b 65 72 0a 6d 61 79 62 65 5f 63 6f 6e 66  inker.maybe_conf
6ef0: 69 67 75 72 65 5f 6c 64 20 22 24 61 62 73 5f 6c  igure_ld "$abs_l
6f00: 69 62 64 69 72 22 0a 0a 65 63 68 6f 0a 65 63 68  ibdir"..echo.ech
6f10: 6f 20 22 20 20 20 20 24 54 45 4d 50 4c 41 54 45  o "    $TEMPLATE
6f20: 5f 53 55 43 43 45 53 53 5f 4d 45 53 53 41 47 45  _SUCCESS_MESSAGE
6f30: 22 0a 65 63 68 6f 0a 0a 0a                       ".echo...