Hex Artifact Content

Artifact 970bc0b0dc3c4cd5bc2e7598a2a8b6e9b8095efc:


0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20  #! /usr/bin/env 
0010: 62 61 73 68 0a 0a 23 20 53 65 74 20 74 69 6d 65  bash..# Set time
0020: 7a 6f 6e 65 20 74 6f 20 64 65 66 61 75 6c 74 0a  zone to default.
0030: 54 5a 3d 55 54 43 0a 65 78 70 6f 72 74 20 54 5a  TZ=UTC.export TZ
0040: 0a 0a 74 61 72 67 65 74 6d 6f 64 65 3d 27 69 6e  ..targetmode='in
0050: 73 74 61 6c 6c 27 0a 69 66 20 5b 20 22 24 31 22  stall'.if [ "$1"
0060: 20 3d 3d 20 27 2d 2d 63 70 69 6f 27 20 5d 3b 20   == '--cpio' ]; 
0070: 74 68 65 6e 0a 09 74 61 72 67 65 74 6d 6f 64 65  then..targetmode
0080: 3d 27 61 72 63 68 69 76 65 27 0a 0a 09 73 68 69  ='archive'...shi
0090: 66 74 0a 66 69 0a 0a 70 6b 67 3d 22 24 28 65 63  ft.fi..pkg="$(ec
00a0: 68 6f 20 22 24 31 22 20 7c 20 73 65 64 20 27 73  ho "$1" | sed 's
00b0: 40 2f 2a 24 40 40 3b 73 40 5e 5c 2e 2a 2f 2a 40  @/*$@@;s@^\.*/*@
00c0: 40 27 29 22 0a 0a 69 66 20 5b 20 2d 7a 20 22 24  @')"..if [ -z "$
00d0: 7b 70 6b 67 7d 22 20 5d 3b 20 74 68 65 6e 0a 09  {pkg}" ]; then..
00e0: 65 63 68 6f 20 22 55 73 61 67 65 3a 20 62 75 69  echo "Usage: bui
00f0: 6c 64 20 5b 2d 2d 63 70 69 6f 5d 20 3c 70 61 63  ld [--cpio] <pac
0100: 6b 61 67 65 3e 22 20 32 3e 26 31 0a 0a 09 65 78  kage>" 2>&1...ex
0110: 69 74 20 31 0a 66 69 0a 0a 66 75 6e 63 74 69 6f  it 1.fi..functio
0120: 6e 20 70 72 65 64 6f 77 6e 6c 6f 61 64 28 29 20  n predownload() 
0130: 7b 0a 09 3a 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e  {..:.}..function
0140: 20 64 6f 77 6e 6c 6f 61 64 28 29 20 7b 0a 09 69   download() {..i
0150: 66 20 5b 20 21 20 2d 65 20 22 24 7b 70 6b 67 61  f [ ! -e "${pkga
0160: 72 63 68 69 76 65 7d 22 20 5d 3b 20 74 68 65 6e  rchive}" ]; then
0170: 0a 09 09 23 20 44 6f 77 6e 6c 6f 61 64 0a 09 09  ...# Download...
0180: 23 23 20 43 6c 65 61 6e 75 70 0a 09 09 72 6d 20  ## Cleanup...rm 
0190: 2d 66 20 73 72 63 2e 6e 65 77 0a 0a 09 09 23 23  -f src.new....##
01a0: 20 46 65 74 63 68 20 66 69 6c 65 0a 09 09 77 67   Fetch file...wg
01b0: 65 74 20 2d 2d 6e 6f 2d 63 68 65 63 6b 2d 63 65  et --no-check-ce
01c0: 72 74 69 66 69 63 61 74 65 20 2d 4f 20 73 72 63  rtificate -O src
01d0: 2e 6e 65 77 20 22 24 7b 75 72 6c 7d 22 20 7c 7c  .new "${url}" ||
01e0: 20 65 78 69 74 20 31 0a 0a 09 09 23 23 20 56 65   exit 1....## Ve
01f0: 72 69 66 79 20 73 69 67 6e 61 74 75 72 65 0a 09  rify signature..
0200: 09 73 72 63 5f 73 68 61 32 35 36 3d 22 24 28 6f  .src_sha256="$(o
0210: 70 65 6e 73 73 6c 20 73 68 61 32 35 36 20 27 73  penssl sha256 's
0220: 72 63 2e 6e 65 77 27 20 7c 20 73 65 64 20 27 73  rc.new' | sed 's
0230: 40 5e 2e 2a 3d 20 40 40 27 29 22 0a 09 09 69 66  @^.*= @@')"...if
0240: 20 5b 20 22 24 7b 73 72 63 5f 73 68 61 32 35 36   [ "${src_sha256
0250: 7d 22 20 21 3d 20 22 24 7b 73 68 61 32 35 36 7d  }" != "${sha256}
0260: 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 65 63 68  " ]; then....ech
0270: 6f 20 22 53 48 41 32 35 36 20 6d 69 73 6d 61 74  o "SHA256 mismat
0280: 63 68 3a 20 20 44 6f 77 6e 6c 6f 61 64 65 64 3a  ch:  Downloaded:
0290: 20 24 7b 73 72 63 5f 73 68 61 32 35 36 7d 20 21   ${src_sha256} !
02a0: 3d 20 45 78 70 65 63 74 65 64 3a 20 24 7b 73 68  = Expected: ${sh
02b0: 61 32 35 36 7d 22 20 3e 26 32 0a 0a 09 09 09 65  a256}" >&2.....e
02c0: 78 69 74 20 31 0a 09 09 66 69 0a 0a 09 09 23 23  xit 1...fi....##
02d0: 20 4d 6f 76 65 20 66 69 6c 65 20 69 6e 74 6f 20   Move file into 
02e0: 70 6c 61 63 65 0a 09 09 6d 76 20 73 72 63 2e 6e  place...mv src.n
02f0: 65 77 20 22 24 7b 70 6b 67 61 72 63 68 69 76 65  ew "${pkgarchive
0300: 7d 22 0a 09 66 69 0a 7d 0a 0a 66 75 6e 63 74 69  }"..fi.}..functi
0310: 6f 6e 20 65 78 74 72 61 63 74 28 29 20 7b 0a 09  on extract() {..
0320: 6c 6f 63 61 6c 20 64 65 63 6f 6d 70 72 65 73 73  local decompress
0330: 0a 0a 09 23 20 44 65 63 6f 6d 70 72 65 73 73 20  ...# Decompress 
0340: 61 72 63 68 69 76 65 0a 09 23 23 20 44 65 74 65  archive..## Dete
0350: 72 6d 69 6e 65 20 74 79 70 65 20 6f 66 20 61 72  rmine type of ar
0360: 63 68 69 76 65 0a 09 63 61 73 65 20 22 24 7b 75  chive..case "${u
0370: 72 6c 7d 22 20 69 6e 0a 09 09 2a 2e 74 61 72 2e  rl}" in...*.tar.
0380: 78 7a 7c 2a 2e 74 61 72 2e 78 7a 27 3f 27 2a 7c  xz|*.tar.xz'?'*|
0390: 2a 2e 74 78 7a 29 0a 09 09 09 64 65 63 6f 6d 70  *.txz)....decomp
03a0: 72 65 73 73 3d 27 78 7a 27 0a 09 09 09 3b 3b 0a  ress='xz'....;;.
03b0: 09 09 2a 2e 74 61 72 2e 67 7a 7c 2a 2e 74 61 72  ..*.tar.gz|*.tar
03c0: 2e 67 7a 27 3f 27 2a 7c 2a 2e 74 67 7a 29 0a 09  .gz'?'*|*.tgz)..
03d0: 09 09 64 65 63 6f 6d 70 72 65 73 73 3d 27 67 7a  ..decompress='gz
03e0: 69 70 27 0a 09 09 09 3b 3b 0a 09 09 2a 2e 74 61  ip'....;;...*.ta
03f0: 72 2e 62 7a 32 7c 2a 2e 74 61 72 2e 62 7a 32 27  r.bz2|*.tar.bz2'
0400: 3f 27 2a 7c 2a 2e 74 62 7a 32 29 0a 09 09 09 64  ?'*|*.tbz2)....d
0410: 65 63 6f 6d 70 72 65 73 73 3d 27 62 7a 69 70 32  ecompress='bzip2
0420: 27 0a 09 09 09 3b 3b 0a 09 09 2a 2e 7a 69 70 7c  '....;;...*.zip|
0430: 2a 2e 7a 69 70 27 3f 27 2a 29 0a 09 09 09 64 65  *.zip'?'*)....de
0440: 63 6f 6d 70 72 65 73 73 3d 27 75 6e 7a 69 70 27  compress='unzip'
0450: 0a 09 09 09 3b 3b 0a 09 09 2a 29 0a 09 09 09 65  ....;;...*)....e
0460: 63 68 6f 20 22 55 6e 6b 6e 6f 77 6e 20 63 6f 6d  cho "Unknown com
0470: 70 72 65 73 73 69 6f 6e 20 6d 65 74 68 6f 64 3a  pression method:
0480: 20 24 7b 75 72 6c 7d 22 20 3e 26 32 0a 0a 09 09   ${url}" >&2....
0490: 09 65 78 69 74 20 31 0a 09 09 09 3b 3b 0a 09 65  .exit 1....;;..e
04a0: 73 61 63 0a 0a 09 23 23 20 44 6f 20 64 65 63 6f  sac...## Do deco
04b0: 6d 70 72 65 73 73 69 6f 6e 0a 09 63 61 73 65 20  mpression..case 
04c0: 22 24 7b 64 65 63 6f 6d 70 72 65 73 73 7d 22 20  "${decompress}" 
04d0: 69 6e 0a 09 09 75 6e 7a 69 70 29 0a 09 09 09 75  in...unzip)....u
04e0: 6e 7a 69 70 20 22 24 7b 70 6b 67 61 72 63 68 69  nzip "${pkgarchi
04f0: 76 65 7d 22 20 7c 7c 20 64 69 65 20 27 55 6e 61  ve}" || die 'Una
0500: 62 6c 65 20 74 6f 20 75 6e 63 6f 6d 70 72 65 73  ble to uncompres
0510: 73 20 61 72 63 68 69 76 65 27 0a 09 09 09 3b 3b  s archive'....;;
0520: 0a 09 09 2a 29 0a 09 09 09 22 24 7b 64 65 63 6f  ...*)...."${deco
0530: 6d 70 72 65 73 73 7d 22 20 2d 64 63 20 22 24 7b  mpress}" -dc "${
0540: 70 6b 67 61 72 63 68 69 76 65 7d 22 20 7c 20 74  pkgarchive}" | t
0550: 61 72 20 2d 78 66 20 2d 20 7c 7c 20 64 69 65 20  ar -xf - || die 
0560: 27 55 6e 61 62 6c 65 20 74 6f 20 75 6e 63 6f 6d  'Unable to uncom
0570: 70 72 65 73 73 20 61 72 63 68 69 76 65 27 0a 09  press archive'..
0580: 09 09 3b 3b 0a 09 65 73 61 63 0a 7d 0a 0a 66 75  ..;;..esac.}..fu
0590: 6e 63 74 69 6f 6e 20 61 70 70 6c 79 5f 70 61 74  nction apply_pat
05a0: 63 68 65 73 28 29 20 7b 0a 09 6c 6f 63 61 6c 20  ches() {..local 
05b0: 70 61 74 63 68 0a 0a 09 66 6f 72 20 70 61 74 63  patch...for patc
05c0: 68 20 69 6e 20 22 24 7b 70 6b 67 64 69 72 7d 2f  h in "${pkgdir}/
05d0: 70 61 74 63 68 65 73 22 2f 2a 3b 20 64 6f 0a 09  patches"/*; do..
05e0: 09 69 66 20 5b 20 21 20 2d 65 20 22 24 7b 70 61  .if [ ! -e "${pa
05f0: 74 63 68 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09  tch}" ]; then...
0600: 09 63 6f 6e 74 69 6e 75 65 0a 09 09 66 69 0a 0a  .continue...fi..
0610: 09 09 63 61 73 65 20 22 24 7b 70 61 74 63 68 7d  ..case "${patch}
0620: 22 20 69 6e 0a 09 09 09 2a 2e 64 69 66 66 7c 2a  " in....*.diff|*
0630: 2e 70 61 74 63 68 29 0a 09 09 09 09 3b 3b 0a 09  .patch).....;;..
0640: 09 09 2a 29 0a 09 09 09 09 63 6f 6e 74 69 6e 75  ..*).....continu
0650: 65 0a 09 09 09 09 3b 3b 0a 09 09 65 73 61 63 0a  e.....;;...esac.
0660: 0a 09 09 69 66 20 5b 20 2d 65 20 22 24 7b 70 61  ...if [ -e "${pa
0670: 74 63 68 7d 2e 73 68 22 20 5d 3b 20 74 68 65 6e  tch}.sh" ]; then
0680: 0a 09 09 09 69 66 20 21 20 73 68 20 22 24 7b 70  ....if ! sh "${p
0690: 61 74 63 68 7d 2e 73 68 22 3b 20 74 68 65 6e 0a  atch}.sh"; then.
06a0: 09 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09 09  ....continue....
06b0: 66 69 0a 09 09 66 69 0a 0a 09 09 70 61 74 63 68  fi...fi....patch
06c0: 20 2d 70 31 20 3c 20 22 24 7b 70 61 74 63 68 7d   -p1 < "${patch}
06d0: 22 0a 09 64 6f 6e 65 0a 7d 0a 0a 66 75 6e 63 74  "..done.}..funct
06e0: 69 6f 6e 20 76 65 72 69 66 79 52 65 71 75 69 72  ion verifyRequir
06f0: 65 64 50 61 63 6b 61 67 65 73 28 29 20 7b 0a 09  edPackages() {..
0700: 6c 6f 63 61 6c 20 70 6b 67 20 70 6b 67 64 6f 6d  local pkg pkgdom
0710: 61 69 6e 20 70 6b 67 76 65 72 73 69 6f 6e 0a 09  ain pkgversion..
0720: 6c 6f 63 61 6c 20 70 6b 67 64 69 72 20 70 6b 67  local pkgdir pkg
0730: 63 6f 6e 66 69 67 64 69 72 20 70 6b 67 66 6f 75  configdir pkgfou
0740: 6e 64 0a 09 6c 6f 63 61 6c 20 75 73 65 5f 6e 61  nd..local use_na
0750: 74 69 76 65 5f 70 6c 61 74 66 6f 72 6d 0a 09 6c  tive_platform..l
0760: 6f 63 61 6c 20 61 64 64 5f 68 65 61 64 65 72 73  ocal add_headers
0770: 5f 73 74 72 0a 0a 09 53 41 56 45 5f 50 4b 47 5f  _str...SAVE_PKG_
0780: 43 4f 4e 46 49 47 5f 50 41 54 48 3d 22 24 7b 50  CONFIG_PATH="${P
0790: 4b 47 5f 43 4f 4e 46 49 47 5f 50 41 54 48 7d 22  KG_CONFIG_PATH}"
07a0: 0a 09 50 4b 47 5f 43 4f 4e 46 49 47 5f 50 41 54  ..PKG_CONFIG_PAT
07b0: 48 3d 27 27 0a 09 65 78 70 6f 72 74 20 50 4b 47  H=''..export PKG
07c0: 5f 43 4f 4e 46 49 47 5f 50 41 54 48 0a 0a 09 75  _CONFIG_PATH...u
07d0: 73 65 5f 6e 61 74 69 76 65 5f 70 6c 61 74 66 6f  se_native_platfo
07e0: 72 6d 3d 27 30 27 0a 09 66 6f 72 20 70 6b 67 20  rm='0'..for pkg 
07f0: 69 6e 20 22 24 7b 72 65 71 75 69 72 65 5b 40 5d  in "${require[@]
0800: 7d 22 3b 20 64 6f 0a 09 09 63 61 73 65 20 22 24  }"; do...case "$
0810: 7b 70 6b 67 7d 22 20 69 6e 0a 09 09 09 40 6e 61  {pkg}" in....@na
0820: 74 69 76 65 2d 6f 73 29 0a 09 09 09 09 75 73 65  tive-os).....use
0830: 5f 6e 61 74 69 76 65 5f 70 6c 61 74 66 6f 72 6d  _native_platform
0840: 3d 27 31 27 0a 09 09 09 09 3b 3b 0a 09 09 65 73  ='1'.....;;...es
0850: 61 63 0a 09 64 6f 6e 65 0a 0a 09 69 66 20 5b 20  ac..done...if [ 
0860: 22 24 7b 75 73 65 5f 6e 61 74 69 76 65 5f 70 6c  "${use_native_pl
0870: 61 74 66 6f 72 6d 7d 22 20 3d 20 27 31 27 20 5d  atform}" = '1' ]
0880: 3b 20 74 68 65 6e 0a 09 09 61 64 64 5f 68 65 61  ; then...add_hea
0890: 64 65 72 73 5f 73 74 72 3d 27 2d 49 27 0a 09 65  ders_str='-I'..e
08a0: 6c 73 65 0a 09 09 61 64 64 5f 68 65 61 64 65 72  lse...add_header
08b0: 73 5f 73 74 72 3d 27 2d 69 73 79 73 74 65 6d 20  s_str='-isystem 
08c0: 27 0a 09 66 69 0a 0a 09 66 6f 72 20 70 6b 67 20  '..fi...for pkg 
08d0: 69 6e 20 22 24 7b 72 65 71 75 69 72 65 5b 40 5d  in "${require[@]
08e0: 7d 22 3b 20 64 6f 0a 09 09 70 6b 67 64 6f 6d 61  }"; do...pkgdoma
08f0: 69 6e 3d 27 27 0a 09 09 70 6b 67 76 65 72 73 69  in=''...pkgversi
0900: 6f 6e 3d 27 27 0a 09 09 70 6b 67 63 68 61 6e 67  on=''...pkgchang
0910: 65 73 3d 28 43 46 4c 41 47 53 20 4c 44 46 4c 41  es=(CFLAGS LDFLA
0920: 47 53 20 50 41 54 48 20 50 4b 47 5f 43 4f 4e 46  GS PATH PKG_CONF
0930: 49 47 5f 50 41 54 48 29 0a 0a 09 09 63 61 73 65  IG_PATH)....case
0940: 20 22 24 7b 70 6b 67 7d 22 20 69 6e 0a 09 09 09   "${pkg}" in....
0950: 2a 3a 2a 29 0a 09 09 09 09 70 6b 67 63 68 61 6e  *:*).....pkgchan
0960: 67 65 73 3d 28 24 28 65 63 68 6f 20 22 24 7b 70  ges=($(echo "${p
0970: 6b 67 7d 22 20 7c 20 63 75 74 20 2d 66 20 32 20  kg}" | cut -f 2 
0980: 2d 64 20 27 3a 27 29 29 0a 09 09 09 09 70 6b 67  -d ':')).....pkg
0990: 3d 22 24 28 65 63 68 6f 20 22 24 7b 70 6b 67 7d  ="$(echo "${pkg}
09a0: 22 20 7c 20 63 75 74 20 2d 66 20 31 20 2d 64 20  " | cut -f 1 -d 
09b0: 27 3a 27 29 22 0a 09 09 09 09 3b 3b 0a 09 09 65  ':')".....;;...e
09c0: 73 61 63 0a 0a 09 09 63 61 73 65 20 22 24 7b 70  sac....case "${p
09d0: 6b 67 7d 22 20 69 6e 0a 09 09 09 40 6e 61 74 69  kg}" in....@nati
09e0: 76 65 2d 6f 73 29 0a 09 09 09 09 50 4b 47 5f 43  ve-os).....PKG_C
09f0: 4f 4e 46 49 47 5f 50 41 54 48 3d 22 24 7b 50 4b  ONFIG_PATH="${PK
0a00: 47 5f 43 4f 4e 46 49 47 5f 50 41 54 48 7d 3a 24  G_CONFIG_PATH}:$
0a10: 7b 53 41 56 45 5f 50 4b 47 5f 43 4f 4e 46 49 47  {SAVE_PKG_CONFIG
0a20: 5f 50 41 54 48 7d 22 0a 0a 09 09 09 09 63 6f 6e  _PATH}"......con
0a30: 74 69 6e 75 65 0a 09 09 09 09 3b 3b 0a 09 09 09  tinue.....;;....
0a40: 40 2a 29 0a 09 09 09 09 23 20 46 61 6b 65 20 70  @*).....# Fake p
0a50: 61 63 6b 61 67 65 0a 09 09 09 09 63 6f 6e 74 69  ackage.....conti
0a60: 6e 75 65 0a 09 09 09 09 3b 3b 0a 09 09 09 2a 2f  nue.....;;....*/
0a70: 2a 40 2a 29 0a 09 09 09 09 70 6b 67 64 6f 6d 61  *@*).....pkgdoma
0a80: 69 6e 3d 22 24 28 65 63 68 6f 20 22 24 7b 70 6b  in="$(echo "${pk
0a90: 67 7d 22 20 7c 20 63 75 74 20 2d 66 20 32 20 2d  g}" | cut -f 2 -
0aa0: 64 20 27 40 27 29 22 0a 09 09 09 09 70 6b 67 76  d '@')".....pkgv
0ab0: 65 72 73 69 6f 6e 3d 22 24 28 65 63 68 6f 20 22  ersion="$(echo "
0ac0: 24 7b 70 6b 67 7d 22 20 7c 20 63 75 74 20 2d 66  ${pkg}" | cut -f
0ad0: 20 32 20 2d 64 20 27 2f 27 20 7c 20 63 75 74 20   2 -d '/' | cut 
0ae0: 2d 66 20 31 20 2d 64 20 27 40 27 29 22 0a 09 09  -f 1 -d '@')"...
0af0: 09 09 70 6b 67 3d 22 24 28 65 63 68 6f 20 22 24  ..pkg="$(echo "$
0b00: 7b 70 6b 67 7d 22 20 7c 20 63 75 74 20 2d 66 20  {pkg}" | cut -f 
0b10: 31 20 2d 64 20 27 2f 27 29 22 0a 09 09 09 09 3b  1 -d '/')".....;
0b20: 3b 0a 09 09 09 2a 2f 2a 29 0a 09 09 09 09 70 6b  ;....*/*).....pk
0b30: 67 76 65 72 73 69 6f 6e 3d 22 24 28 65 63 68 6f  gversion="$(echo
0b40: 20 22 24 7b 70 6b 67 7d 22 20 7c 20 63 75 74 20   "${pkg}" | cut 
0b50: 2d 66 20 32 20 2d 64 20 27 2f 27 29 22 0a 09 09  -f 2 -d '/')"...
0b60: 09 09 70 6b 67 3d 22 24 28 65 63 68 6f 20 22 24  ..pkg="$(echo "$
0b70: 7b 70 6b 67 7d 22 20 7c 20 63 75 74 20 2d 66 20  {pkg}" | cut -f 
0b80: 31 20 2d 64 20 27 2f 27 29 22 0a 09 09 09 09 3b  1 -d '/')".....;
0b90: 3b 0a 09 09 09 2a 40 2a 29 0a 09 09 09 09 70 6b  ;....*@*).....pk
0ba0: 67 64 6f 6d 61 69 6e 3d 22 24 28 65 63 68 6f 20  gdomain="$(echo 
0bb0: 22 24 7b 70 6b 67 7d 22 20 7c 20 63 75 74 20 2d  "${pkg}" | cut -
0bc0: 66 20 32 20 2d 64 20 27 40 27 29 22 0a 09 09 09  f 2 -d '@')"....
0bd0: 09 70 6b 67 3d 22 24 28 65 63 68 6f 20 22 24 7b  .pkg="$(echo "${
0be0: 70 6b 67 7d 22 20 7c 20 63 75 74 20 2d 66 20 31  pkg}" | cut -f 1
0bf0: 20 2d 64 20 27 40 27 29 22 0a 09 09 09 09 3b 3b   -d '@')".....;;
0c00: 0a 09 09 65 73 61 63 0a 0a 09 09 69 66 20 5b 20  ...esac....if [ 
0c10: 2d 7a 20 22 24 7b 70 6b 67 64 6f 6d 61 69 6e 7d  -z "${pkgdomain}
0c20: 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 70 6b 67  " ]; then....pkg
0c30: 64 6f 6d 61 69 6e 3d 22 24 7b 64 6f 6d 61 69 6e  domain="${domain
0c40: 7d 22 0a 09 09 66 69 0a 0a 09 09 70 6b 67 66 6f  }"...fi....pkgfo
0c50: 75 6e 64 3d 27 30 27 0a 09 09 41 44 44 5f 50 41  und='0'...ADD_PA
0c60: 54 48 3d 27 27 0a 09 09 66 6f 72 20 70 6b 67 64  TH=''...for pkgd
0c70: 69 72 20 69 6e 20 22 2f 6f 70 74 2f 61 70 70 66  ir in "/opt/appf
0c80: 73 2f 24 7b 70 6b 67 64 6f 6d 61 69 6e 7d 2f 24  s/${pkgdomain}/$
0c90: 7b 70 6b 67 7d 2f 24 7b 6f 73 7d 2d 24 7b 61 72  {pkg}/${os}-${ar
0ca0: 63 68 7d 22 2f 24 7b 70 6b 67 76 65 72 73 69 6f  ch}"/${pkgversio
0cb0: 6e 3a 2d 6c 61 74 65 73 74 7d 20 22 2f 6f 70 74  n:-latest} "/opt
0cc0: 2f 61 70 70 66 73 2f 24 7b 70 6b 67 64 6f 6d 61  /appfs/${pkgdoma
0cd0: 69 6e 7d 2f 24 7b 70 6b 67 7d 2f 24 7b 6f 73 7d  in}/${pkg}/${os}
0ce0: 2d 24 7b 61 72 63 68 7d 22 2f 24 7b 70 6b 67 76  -${arch}"/${pkgv
0cf0: 65 72 73 69 6f 6e 3a 2d 2a 7d 3b 20 64 6f 0a 09  ersion:-*}; do..
0d00: 09 09 70 6b 67 63 6f 6e 66 69 67 64 69 72 3d 22  ..pkgconfigdir="
0d10: 24 7b 70 6b 67 64 69 72 7d 2f 6c 69 62 2f 70 6b  ${pkgdir}/lib/pk
0d20: 67 63 6f 6e 66 69 67 22 0a 0a 09 09 09 69 66 20  gconfig".....if 
0d30: 5b 20 21 20 2d 64 20 22 24 7b 70 6b 67 64 69 72  [ ! -d "${pkgdir
0d40: 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 09 63  }" ]; then.....c
0d50: 6f 6e 74 69 6e 75 65 0a 09 09 09 66 69 0a 0a 09  ontinue....fi...
0d60: 09 09 23 20 49 66 20 74 68 65 20 70 61 63 6b 61  ..# If the packa
0d70: 67 65 20 76 65 72 73 69 6f 6e 20 77 61 73 20 75  ge version was u
0d80: 6e 73 70 65 63 69 66 69 65 64 2c 20 66 75 6c 6c  nspecified, full
0d90: 79 20 72 65 73 6f 6c 76 65 0a 09 09 09 23 20 74  y resolve....# t
0da0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 61  he directory tha
0db0: 74 20 77 65 20 66 6f 75 6e 64 0a 09 09 09 69 66  t we found....if
0dc0: 20 5b 20 2d 7a 20 22 24 7b 70 6b 67 76 65 72 73   [ -z "${pkgvers
0dd0: 69 6f 6e 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09  ion}" ]; then...
0de0: 09 09 70 6b 67 64 69 72 3d 22 24 28 72 65 61 64  ..pkgdir="$(read
0df0: 6c 69 6e 6b 20 2d 66 20 22 24 7b 70 6b 67 64 69  link -f "${pkgdi
0e00: 72 7d 22 29 22 0a 09 09 09 66 69 0a 0a 09 09 09  r}")"....fi.....
0e10: 70 6b 67 66 6f 75 6e 64 3d 27 31 27 0a 0a 09 09  pkgfound='1'....
0e20: 09 66 6f 72 20 70 6b 67 63 68 61 6e 67 65 20 69  .for pkgchange i
0e30: 6e 20 22 24 7b 70 6b 67 63 68 61 6e 67 65 73 5b  n "${pkgchanges[
0e40: 40 5d 7d 22 3b 20 64 6f 0a 09 09 09 09 63 61 73  @]}"; do.....cas
0e50: 65 20 22 24 7b 70 6b 67 63 68 61 6e 67 65 7d 22  e "${pkgchange}"
0e60: 20 69 6e 0a 09 09 09 09 09 43 46 4c 41 47 53 29   in......CFLAGS)
0e70: 0a 09 09 09 09 09 09 43 46 4c 41 47 53 3d 22 24  .......CFLAGS="$
0e80: 7b 43 46 4c 41 47 53 7d 20 24 7b 61 64 64 5f 68  {CFLAGS} ${add_h
0e90: 65 61 64 65 72 73 5f 73 74 72 7d 24 7b 70 6b 67  eaders_str}${pkg
0ea0: 64 69 72 7d 2f 69 6e 63 6c 75 64 65 22 0a 09 09  dir}/include"...
0eb0: 09 09 09 09 43 58 58 46 4c 41 47 53 3d 22 24 7b  ....CXXFLAGS="${
0ec0: 43 46 4c 41 47 53 7d 20 24 7b 61 64 64 5f 68 65  CFLAGS} ${add_he
0ed0: 61 64 65 72 73 5f 73 74 72 7d 24 7b 70 6b 67 64  aders_str}${pkgd
0ee0: 69 72 7d 2f 69 6e 63 6c 75 64 65 22 0a 09 09 09  ir}/include"....
0ef0: 09 09 09 43 50 50 46 4c 41 47 53 3d 22 24 7b 43  ...CPPFLAGS="${C
0f00: 50 50 46 4c 41 47 53 7d 20 24 7b 61 64 64 5f 68  PPFLAGS} ${add_h
0f10: 65 61 64 65 72 73 5f 73 74 72 7d 24 7b 70 6b 67  eaders_str}${pkg
0f20: 64 69 72 7d 2f 69 6e 63 6c 75 64 65 22 0a 09 09  dir}/include"...
0f30: 09 09 09 09 65 78 70 6f 72 74 20 43 46 4c 41 47  ....export CFLAG
0f40: 53 20 43 58 58 46 4c 41 47 53 20 43 50 50 46 4c  S CXXFLAGS CPPFL
0f50: 41 47 53 0a 09 09 09 09 09 09 3b 3b 0a 09 09 09  AGS.......;;....
0f60: 09 09 4c 44 46 4c 41 47 53 29 0a 09 09 09 09 09  ..LDFLAGS)......
0f70: 09 4c 44 46 4c 41 47 53 3d 22 24 7b 4c 44 46 4c  .LDFLAGS="${LDFL
0f80: 41 47 53 7d 20 2d 4c 24 7b 70 6b 67 64 69 72 7d  AGS} -L${pkgdir}
0f90: 2f 6c 69 62 20 2d 57 6c 2c 2d 72 70 61 74 68 2c  /lib -Wl,-rpath,
0fa0: 24 7b 70 6b 67 64 69 72 7d 2f 6c 69 62 22 0a 09  ${pkgdir}/lib"..
0fb0: 09 09 09 09 09 65 78 70 6f 72 74 20 4c 44 46 4c  .....export LDFL
0fc0: 41 47 53 0a 09 09 09 09 09 09 3b 3b 0a 09 09 09  AGS.......;;....
0fd0: 09 09 50 41 54 48 29 0a 09 09 09 09 09 09 41 44  ..PATH).......AD
0fe0: 44 5f 50 41 54 48 3d 22 24 7b 41 44 44 5f 50 41  D_PATH="${ADD_PA
0ff0: 54 48 7d 3a 24 7b 70 6b 67 64 69 72 7d 2f 62 69  TH}:${pkgdir}/bi
1000: 6e 22 0a 09 09 09 09 09 09 3b 3b 0a 09 09 09 09  n".......;;.....
1010: 09 50 45 52 4c 35 4c 49 42 29 0a 09 09 09 09 09  .PERL5LIB)......
1020: 09 50 45 52 4c 35 4c 49 42 3d 22 24 7b 70 6b 67  .PERL5LIB="${pkg
1030: 64 69 72 7d 2f 6c 69 62 2f 70 65 72 6c 35 3a 24  dir}/lib/perl5:$
1040: 7b 50 45 52 4c 35 4c 49 42 7d 22 0a 09 09 09 09  {PERL5LIB}".....
1050: 09 09 50 45 52 4c 35 4c 49 42 3d 22 24 7b 70 6b  ..PERL5LIB="${pk
1060: 67 64 69 72 7d 2f 6c 69 62 2f 73 69 74 65 5f 70  gdir}/lib/site_p
1070: 65 72 6c 3a 24 7b 50 45 52 4c 35 4c 49 42 7d 22  erl:${PERL5LIB}"
1080: 0a 09 09 09 09 09 09 65 78 70 6f 72 74 20 50 45  .......export PE
1090: 52 4c 35 4c 49 42 0a 09 09 09 09 09 09 3b 3b 0a  RL5LIB.......;;.
10a0: 09 09 09 09 09 50 4b 47 5f 43 4f 4e 46 49 47 5f  .....PKG_CONFIG_
10b0: 50 41 54 48 29 0a 09 09 09 09 09 09 69 66 20 5b  PATH).......if [
10c0: 20 2d 64 20 22 24 7b 70 6b 67 63 6f 6e 66 69 67   -d "${pkgconfig
10d0: 64 69 72 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09  dir}" ]; then...
10e0: 09 09 09 09 09 50 4b 47 5f 43 4f 4e 46 49 47 5f  .....PKG_CONFIG_
10f0: 50 41 54 48 3d 22 24 7b 50 4b 47 5f 43 4f 4e 46  PATH="${PKG_CONF
1100: 49 47 5f 50 41 54 48 7d 3a 24 7b 70 6b 67 63 6f  IG_PATH}:${pkgco
1110: 6e 66 69 67 64 69 72 7d 22 0a 09 09 09 09 09 09  nfigdir}".......
1120: 09 65 78 70 6f 72 74 20 50 4b 47 5f 43 4f 4e 46  .export PKG_CONF
1130: 49 47 5f 50 41 54 48 0a 09 09 09 09 09 09 66 69  IG_PATH.......fi
1140: 0a 09 09 09 09 09 09 3b 3b 0a 09 09 09 09 65 73  .......;;.....es
1150: 61 63 0a 09 09 09 64 6f 6e 65 0a 0a 09 09 09 62  ac....done.....b
1160: 72 65 61 6b 0a 09 09 64 6f 6e 65 0a 0a 09 09 69  reak...done....i
1170: 66 20 5b 20 22 24 7b 70 6b 67 66 6f 75 6e 64 7d  f [ "${pkgfound}
1180: 22 20 3d 20 27 30 27 20 5d 3b 20 74 68 65 6e 0a  " = '0' ]; then.
1190: 09 09 09 64 69 65 20 22 50 61 63 6b 61 67 65 20  ...die "Package 
11a0: 24 7b 70 6b 67 7d 2f 24 7b 70 6b 67 76 65 72 73  ${pkg}/${pkgvers
11b0: 69 6f 6e 3a 2d 2a 7d 40 24 7b 70 6b 67 64 6f 6d  ion:-*}@${pkgdom
11c0: 61 69 6e 7d 20 6e 6f 74 20 66 6f 75 6e 64 2e 22  ain} not found."
11d0: 0a 09 09 66 69 0a 0a 09 09 41 44 44 5f 50 41 54  ...fi....ADD_PAT
11e0: 48 3d 22 24 28 65 63 68 6f 20 22 24 7b 41 44 44  H="$(echo "${ADD
11f0: 5f 50 41 54 48 7d 22 20 7c 20 73 65 64 20 27 73  _PATH}" | sed 's
1200: 40 5e 3a 2a 40 40 27 29 22 0a 0a 09 09 50 41 54  @^:*@@')"....PAT
1210: 48 3d 22 24 7b 41 44 44 5f 50 41 54 48 7d 3a 24  H="${ADD_PATH}:$
1220: 7b 50 41 54 48 7d 22 0a 09 64 6f 6e 65 0a 7d 0a  {PATH}"..done.}.
1230: 0a 66 75 6e 63 74 69 6f 6e 20 76 65 72 69 66 79  .function verify
1240: 50 72 65 72 65 71 75 69 73 69 74 65 73 28 29 20  Prerequisites() 
1250: 7b 0a 09 3a 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e  {..:.}..function
1260: 20 64 65 74 65 72 6d 69 6e 65 4f 73 41 72 63 68   determineOsArch
1270: 28 29 20 7b 0a 09 69 66 20 5b 20 2d 7a 20 22 24  () {..if [ -z "$
1280: 7b 41 50 50 46 53 5f 42 55 49 4c 44 5f 4f 53 7d  {APPFS_BUILD_OS}
1290: 22 20 5d 3b 20 74 68 65 6e 0a 09 09 6f 73 3d 22  " ]; then...os="
12a0: 24 28 75 6e 61 6d 65 20 2d 73 20 7c 20 64 64 20  $(uname -s | dd 
12b0: 63 6f 6e 76 3d 6c 63 61 73 65 20 32 3e 2f 64 65  conv=lcase 2>/de
12c0: 76 2f 6e 75 6c 6c 29 22 0a 09 65 6c 73 65 0a 09  v/null)"..else..
12d0: 09 6f 73 3d 22 24 7b 41 50 50 46 53 5f 42 55 49  .os="${APPFS_BUI
12e0: 4c 44 5f 4f 53 7d 22 0a 09 66 69 0a 0a 09 69 66  LD_OS}"..fi...if
12f0: 20 5b 20 2d 7a 20 22 24 7b 41 50 50 46 53 5f 42   [ -z "${APPFS_B
1300: 55 49 4c 44 5f 41 52 43 48 7d 22 20 5d 3b 20 74  UILD_ARCH}" ]; t
1310: 68 65 6e 0a 09 09 61 72 63 68 3d 22 24 28 75 6e  hen...arch="$(un
1320: 61 6d 65 20 2d 6d 20 7c 20 64 64 20 63 6f 6e 76  ame -m | dd conv
1330: 3d 6c 63 61 73 65 20 32 3e 2f 64 65 76 2f 6e 75  =lcase 2>/dev/nu
1340: 6c 6c 29 22 0a 0a 09 09 63 61 73 65 20 22 24 7b  ll)"....case "${
1350: 61 72 63 68 7d 22 20 69 6e 0a 09 09 09 69 3f 38  arch}" in....i?8
1360: 36 29 0a 09 09 09 09 61 72 63 68 3d 27 69 78 38  6).....arch='ix8
1370: 36 27 0a 09 09 09 09 3b 3b 0a 09 09 65 73 61 63  6'.....;;...esac
1380: 0a 09 65 6c 73 65 0a 09 09 61 72 63 68 3d 22 24  ..else...arch="$
1390: 7b 41 50 50 46 53 5f 42 55 49 4c 44 5f 41 52 43  {APPFS_BUILD_ARC
13a0: 48 7d 22 0a 09 66 69 0a 7d 0a 0a 66 75 6e 63 74  H}"..fi.}..funct
13b0: 69 6f 6e 20 64 65 74 65 72 6d 69 6e 65 50 72 65  ion determinePre
13c0: 66 69 78 28 29 20 7b 0a 09 64 65 74 65 72 6d 69  fix() {..determi
13d0: 6e 65 4f 73 41 72 63 68 0a 0a 09 70 72 65 66 69  neOsArch...prefi
13e0: 78 73 75 66 66 69 78 3d 22 24 7b 70 6b 67 7d 2f  xsuffix="${pkg}/
13f0: 24 7b 6f 73 7d 2d 24 7b 61 72 63 68 7d 2f 24 7b  ${os}-${arch}/${
1400: 76 65 72 73 69 6f 6e 7d 22 0a 09 70 72 65 66 69  version}"..prefi
1410: 78 3d 22 2f 6f 70 74 2f 61 70 70 66 73 2f 24 7b  x="/opt/appfs/${
1420: 64 6f 6d 61 69 6e 7d 2f 24 7b 70 72 65 66 69 78  domain}/${prefix
1430: 73 75 66 66 69 78 7d 22 0a 09 64 65 73 74 64 69  suffix}"..destdi
1440: 72 3d 22 24 28 70 77 64 29 2f 49 4e 53 54 22 0a  r="$(pwd)/INST".
1450: 0a 09 6d 6b 64 69 72 20 22 24 7b 64 65 73 74 64  ..mkdir "${destd
1460: 69 72 7d 22 20 7c 7c 20 64 69 65 0a 7d 0a 0a 66  ir}" || die.}..f
1470: 75 6e 63 74 69 6f 6e 20 70 72 65 63 6f 6e 66 69  unction preconfi
1480: 67 75 72 65 28 29 20 7b 0a 09 3a 0a 7d 0a 0a 66  gure() {..:.}..f
1490: 75 6e 63 74 69 6f 6e 20 70 6f 73 74 63 6f 6e 66  unction postconf
14a0: 69 67 75 72 65 28 29 20 7b 0a 09 3a 0a 7d 0a 0a  igure() {..:.}..
14b0: 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 66 69 67 75  function configu
14c0: 72 65 5f 67 63 63 28 29 20 7b 0a 09 6c 6f 63 61  re_gcc() {..loca
14d0: 6c 20 67 6c 69 62 63 64 69 72 20 6c 69 6e 75 78  l glibcdir linux
14e0: 68 65 61 64 65 72 73 64 69 72 0a 09 6c 6f 63 61  headersdir..loca
14f0: 6c 20 64 79 6e 6c 69 6e 6b 65 72 0a 09 6c 6f 63  l dynlinker..loc
1500: 61 6c 20 67 63 63 5f 64 65 66 61 75 6c 74 5f 68  al gcc_default_h
1510: 65 61 64 65 72 73 5f 63 20 67 63 63 5f 64 65 66  eaders_c gcc_def
1520: 61 75 6c 74 5f 68 65 61 64 65 72 73 5f 63 78 78  ault_headers_cxx
1530: 0a 09 6c 6f 63 61 6c 20 70 6b 67 20 75 73 65 5f  ..local pkg use_
1540: 6e 61 74 69 76 65 5f 70 6c 61 74 66 6f 72 6d 0a  native_platform.
1550: 0a 09 67 6c 69 62 63 64 69 72 3d 22 2f 6f 70 74  ..glibcdir="/opt
1560: 2f 61 70 70 66 73 2f 63 6f 72 65 2e 61 70 70 66  /appfs/core.appf
1570: 73 2e 72 6b 65 65 6e 65 2e 6f 72 67 2f 67 6c 69  s.rkeene.org/gli
1580: 62 63 2f 24 7b 6f 73 7d 2d 24 7b 61 72 63 68 7d  bc/${os}-${arch}
1590: 2f 6c 61 74 65 73 74 22 0a 09 67 6c 69 62 63 64  /latest"..glibcd
15a0: 69 72 3d 22 24 28 72 65 61 64 6c 69 6e 6b 20 2d  ir="$(readlink -
15b0: 66 20 22 24 7b 67 6c 69 62 63 64 69 72 7d 22 29  f "${glibcdir}")
15c0: 22 0a 0a 09 6c 69 6e 75 78 68 65 61 64 65 72 73  "...linuxheaders
15d0: 64 69 72 3d 22 2f 6f 70 74 2f 61 70 70 66 73 2f  dir="/opt/appfs/
15e0: 63 6f 72 65 2e 61 70 70 66 73 2e 72 6b 65 65 6e  core.appfs.rkeen
15f0: 65 2e 6f 72 67 2f 6c 69 6e 75 78 2d 68 65 61 64  e.org/linux-head
1600: 65 72 73 2f 24 7b 6f 73 7d 2d 24 7b 61 72 63 68  ers/${os}-${arch
1610: 7d 2f 6c 61 74 65 73 74 22 0a 09 6c 69 6e 75 78  }/latest"..linux
1620: 68 65 61 64 65 72 73 64 69 72 3d 22 24 28 72 65  headersdir="$(re
1630: 61 64 6c 69 6e 6b 20 2d 66 20 22 24 7b 6c 69 6e  adlink -f "${lin
1640: 75 78 68 65 61 64 65 72 73 64 69 72 7d 22 29 22  uxheadersdir}")"
1650: 0a 0a 09 64 79 6e 6c 69 6e 6b 65 72 3d 22 24 28  ...dynlinker="$(
1660: 6c 73 20 22 24 7b 67 6c 69 62 63 64 69 72 7d 22  ls "${glibcdir}"
1670: 2f 6c 69 62 2f 6c 64 2d 6c 69 6e 75 78 2a 2e 73  /lib/ld-linux*.s
1680: 6f 2e 2a 20 7c 20 74 61 69 6c 20 2d 6e 20 31 29  o.* | tail -n 1)
1690: 22 0a 0a 09 69 66 20 5b 20 21 20 2d 66 20 22 24  "...if [ ! -f "$
16a0: 7b 64 79 6e 6c 69 6e 6b 65 72 7d 22 20 5d 3b 20  {dynlinker}" ]; 
16b0: 74 68 65 6e 0a 09 09 64 69 65 20 27 67 6c 69 62  then...die 'glib
16c0: 63 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 6e  c directory is n
16d0: 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 28 61 70  ot available (ap
16e0: 70 66 73 20 72 75 6e 6e 69 6e 67 2f 77 6f 72 6b  pfs running/work
16f0: 69 6e 67 3f 29 27 0a 09 66 69 0a 0a 09 75 73 65  ing?)'..fi...use
1700: 5f 6e 61 74 69 76 65 5f 70 6c 61 74 66 6f 72 6d  _native_platform
1710: 3d 27 30 27 0a 09 66 6f 72 20 70 6b 67 20 69 6e  ='0'..for pkg in
1720: 20 22 24 7b 72 65 71 75 69 72 65 5b 40 5d 7d 22   "${require[@]}"
1730: 3b 20 64 6f 0a 09 09 63 61 73 65 20 22 24 7b 70  ; do...case "${p
1740: 6b 67 7d 22 20 69 6e 0a 09 09 09 40 6e 61 74 69  kg}" in....@nati
1750: 76 65 2d 6f 73 29 0a 09 09 09 09 75 73 65 5f 6e  ve-os).....use_n
1760: 61 74 69 76 65 5f 70 6c 61 74 66 6f 72 6d 3d 27  ative_platform='
1770: 31 27 0a 09 09 09 09 3b 3b 0a 09 09 65 73 61 63  1'.....;;...esac
1780: 0a 09 64 6f 6e 65 0a 0a 09 69 66 20 5b 20 22 24  ..done...if [ "$
1790: 7b 75 73 65 5f 6e 61 74 69 76 65 5f 70 6c 61 74  {use_native_plat
17a0: 66 6f 72 6d 7d 22 20 3d 20 27 30 27 20 5d 3b 20  form}" = '0' ]; 
17b0: 74 68 65 6e 0a 09 09 67 63 63 5f 64 65 66 61 75  then...gcc_defau
17c0: 6c 74 5f 68 65 61 64 65 72 73 5f 63 3d 22 24 28  lt_headers_c="$(
17d0: 65 63 68 6f 20 27 27 20 7c 20 24 7b 43 50 50 3a  echo '' | ${CPP:
17e0: 2d 63 70 70 7d 20 2d 76 20 32 3e 26 31 20 7c 20  -cpp} -v 2>&1 | 
17f0: 73 65 64 20 27 2f 5e 45 6e 64 20 6f 66 20 73 65  sed '/^End of se
1800: 61 72 63 68 20 6c 69 73 74 2f 2c 24 20 64 3b 30  arch list/,$ d;0
1810: 2c 2f 73 65 61 72 63 68 20 73 74 61 72 74 73 20  ,/search starts 
1820: 68 65 72 65 3a 24 2f 20 64 27 20 7c 20 67 72 65  here:$/ d' | gre
1830: 70 20 27 2f 67 63 63 2f 27 20 7c 20 73 65 64 20  p '/gcc/' | sed 
1840: 27 73 40 5e 20 2a 40 2d 69 73 79 73 74 65 6d 20  's@^ *@-isystem 
1850: 40 27 20 7c 20 74 72 20 24 27 5c 6e 27 20 27 20  @' | tr $'\n' ' 
1860: 27 29 22 0a 09 09 67 63 63 5f 64 65 66 61 75 6c  ')"...gcc_defaul
1870: 74 5f 68 65 61 64 65 72 73 5f 63 78 78 3d 22 24  t_headers_cxx="$
1880: 28 65 63 68 6f 20 27 27 20 7c 20 24 7b 43 50 50  (echo '' | ${CPP
1890: 3a 2d 63 70 70 7d 20 2d 78 20 63 2b 2b 20 2d 76  :-cpp} -x c++ -v
18a0: 20 32 3e 26 31 20 7c 20 73 65 64 20 27 2f 5e 45   2>&1 | sed '/^E
18b0: 6e 64 20 6f 66 20 73 65 61 72 63 68 20 6c 69 73  nd of search lis
18c0: 74 2f 2c 24 20 64 3b 30 2c 2f 73 65 61 72 63 68  t/,$ d;0,/search
18d0: 20 73 74 61 72 74 73 20 68 65 72 65 3a 24 2f 20   starts here:$/ 
18e0: 64 27 20 7c 20 67 72 65 70 20 27 2f 67 63 63 2f  d' | grep '/gcc/
18f0: 27 20 7c 20 73 65 64 20 27 73 40 5e 20 2a 40 2d  ' | sed 's@^ *@-
1900: 69 73 79 73 74 65 6d 20 40 27 20 7c 20 74 72 20  isystem @' | tr 
1910: 24 27 5c 6e 27 20 27 20 27 29 22 0a 0a 09 09 43  $'\n' ' ')"....C
1920: 43 3d 22 24 7b 43 43 3a 2d 67 63 63 7d 20 2d 6e  C="${CC:-gcc} -n
1930: 6f 73 74 64 69 6e 63 20 24 7b 67 63 63 5f 64 65  ostdinc ${gcc_de
1940: 66 61 75 6c 74 5f 68 65 61 64 65 72 73 5f 63 7d  fault_headers_c}
1950: 20 2d 69 73 79 73 74 65 6d 20 24 7b 67 6c 69 62   -isystem ${glib
1960: 63 64 69 72 7d 2f 69 6e 63 6c 75 64 65 22 0a 09  cdir}/include"..
1970: 09 43 58 58 3d 22 24 7b 43 58 58 3a 2d 67 2b 2b  .CXX="${CXX:-g++
1980: 7d 20 2d 6e 6f 73 74 64 69 6e 63 20 24 7b 67 63  } -nostdinc ${gc
1990: 63 5f 64 65 66 61 75 6c 74 5f 68 65 61 64 65 72  c_default_header
19a0: 73 5f 63 78 78 7d 20 2d 69 73 79 73 74 65 6d 20  s_cxx} -isystem 
19b0: 24 7b 67 6c 69 62 63 64 69 72 7d 2f 69 6e 63 6c  ${glibcdir}/incl
19c0: 75 64 65 22 0a 0a 09 09 69 66 20 21 20 65 63 68  ude"....if ! ech
19d0: 6f 20 22 20 24 7b 72 65 71 75 69 72 65 5b 2a 5d  o " ${require[*]
19e0: 7d 20 22 20 7c 20 67 72 65 70 20 27 20 6c 69 6e  } " | grep ' lin
19f0: 75 78 2d 68 65 61 64 65 72 73 5b 2f 40 3a 20 5d  ux-headers[/@: ]
1a00: 27 20 3e 2f 64 65 76 2f 6e 75 6c 6c 3b 20 74 68  ' >/dev/null; th
1a10: 65 6e 0a 09 09 09 43 43 3d 22 24 7b 43 43 7d 20  en....CC="${CC} 
1a20: 2d 69 73 79 73 74 65 6d 20 24 7b 6c 69 6e 75 78  -isystem ${linux
1a30: 68 65 61 64 65 72 73 64 69 72 7d 2f 69 6e 63 6c  headersdir}/incl
1a40: 75 64 65 22 0a 09 09 09 43 58 58 3d 22 24 7b 43  ude"....CXX="${C
1a50: 58 58 7d 20 2d 69 73 79 73 74 65 6d 20 24 7b 6c  XX} -isystem ${l
1a60: 69 6e 75 78 68 65 61 64 65 72 73 64 69 72 7d 2f  inuxheadersdir}/
1a70: 69 6e 63 6c 75 64 65 22 0a 09 09 66 69 0a 09 65  include"...fi..e
1a80: 6c 73 65 0a 09 09 43 43 3d 22 24 7b 43 43 3a 2d  lse...CC="${CC:-
1a90: 67 63 63 7d 22 0a 09 09 43 58 58 3d 22 24 7b 43  gcc}"...CXX="${C
1aa0: 58 58 3a 2d 67 2b 2b 7d 22 0a 09 66 69 0a 0a 09  XX:-g++}"..fi...
1ab0: 42 55 49 4c 44 5f 43 43 3d 22 24 7b 43 43 7d 22  BUILD_CC="${CC}"
1ac0: 0a 09 48 4f 53 54 5f 43 43 3d 22 24 7b 43 43 7d  ..HOST_CC="${CC}
1ad0: 22 0a 09 42 55 49 4c 44 5f 43 58 58 3d 22 24 7b  "..BUILD_CXX="${
1ae0: 43 58 58 7d 22 0a 09 48 4f 53 54 5f 43 58 58 3d  CXX}"..HOST_CXX=
1af0: 22 24 7b 43 58 58 7d 22 0a 0a 09 69 66 20 5b 20  "${CXX}"...if [ 
1b00: 22 24 7b 75 73 65 5f 6e 61 74 69 76 65 5f 70 6c  "${use_native_pl
1b10: 61 74 66 6f 72 6d 7d 22 20 3d 20 27 30 27 20 5d  atform}" = '0' ]
1b20: 3b 20 74 68 65 6e 0a 09 09 4c 44 46 4c 41 47 53  ; then...LDFLAGS
1b30: 3d 22 24 7b 4c 44 46 4c 41 47 53 7d 20 2d 4c 24  ="${LDFLAGS} -L$
1b40: 7b 67 6c 69 62 63 64 69 72 7d 2f 6c 69 62 20 2d  {glibcdir}/lib -
1b50: 57 6c 2c 2d 72 70 61 74 68 2c 24 7b 67 6c 69 62  Wl,-rpath,${glib
1b60: 63 64 69 72 7d 2f 6c 69 62 20 2d 57 6c 2c 2d 2d  cdir}/lib -Wl,--
1b70: 64 79 6e 61 6d 69 63 2d 6c 69 6e 6b 65 72 2c 24  dynamic-linker,$
1b80: 7b 64 79 6e 6c 69 6e 6b 65 72 7d 22 0a 09 66 69  {dynlinker}"..fi
1b90: 0a 0a 09 69 66 20 5b 20 2d 7a 20 22 24 7b 61 70  ...if [ -z "${ap
1ba0: 70 66 73 5f 62 75 69 6c 64 5f 6e 6f 5f 64 65 66  pfs_build_no_def
1bb0: 61 75 6c 74 5f 73 79 6d 76 65 72 7d 22 20 5d 3b  ault_symver}" ];
1bc0: 20 74 68 65 6e 0a 09 09 4c 44 46 4c 41 47 53 3d   then...LDFLAGS=
1bd0: 22 24 7b 4c 44 46 4c 41 47 53 7d 20 2d 57 6c 2c  "${LDFLAGS} -Wl,
1be0: 2d 2d 64 65 66 61 75 6c 74 2d 73 79 6d 76 65 72  --default-symver
1bf0: 22 0a 09 66 69 0a 0a 09 50 4b 47 5f 43 4f 4e 46  "..fi...PKG_CONF
1c00: 49 47 5f 4c 49 42 44 49 52 3d 22 24 7b 67 6c 69  IG_LIBDIR="${gli
1c10: 62 63 64 69 72 7d 2f 6c 69 62 2f 70 6b 67 63 6f  bcdir}/lib/pkgco
1c20: 6e 66 69 67 22 0a 0a 09 65 78 70 6f 72 74 20 43  nfig"...export C
1c30: 43 20 43 58 58 20 42 55 49 4c 44 5f 43 43 20 48  C CXX BUILD_CC H
1c40: 4f 53 54 5f 43 43 20 42 55 49 4c 44 5f 43 58 58  OST_CC BUILD_CXX
1c50: 20 48 4f 53 54 5f 43 58 58 20 4c 44 46 4c 41 47   HOST_CXX LDFLAG
1c60: 53 20 50 4b 47 5f 43 4f 4e 46 49 47 5f 4c 49 42  S PKG_CONFIG_LIB
1c70: 44 49 52 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20  DIR.}..function 
1c80: 63 6f 6e 66 69 67 75 72 65 28 29 20 7b 0a 09 63  configure() {..c
1c90: 6f 6e 66 69 67 75 72 65 5f 67 63 63 0a 09 2e 2f  onfigure_gcc.../
1ca0: 63 6f 6e 66 69 67 75 72 65 20 2d 2d 70 72 65 66  configure --pref
1cb0: 69 78 3d 22 24 7b 70 72 65 66 69 78 7d 22 20 2d  ix="${prefix}" -
1cc0: 2d 73 79 73 63 6f 6e 66 64 69 72 3d 22 24 7b 70  -sysconfdir="${p
1cd0: 72 65 66 69 78 7d 2f 65 74 63 22 20 2d 2d 6c 69  refix}/etc" --li
1ce0: 62 64 69 72 3d 22 24 7b 70 72 65 66 69 78 7d 2f  bdir="${prefix}/
1cf0: 6c 69 62 22 20 2d 2d 6c 6f 63 61 6c 73 74 61 74  lib" --localstat
1d00: 65 64 69 72 3d 2f 76 61 72 20 22 24 7b 63 6f 6e  edir=/var "${con
1d10: 66 69 67 75 72 65 5f 65 78 74 72 61 5b 40 5d 7d  figure_extra[@]}
1d20: 22 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 70 72  ".}..function pr
1d30: 65 62 75 69 6c 64 28 29 20 7b 0a 09 3a 0a 7d 0a  ebuild() {..:.}.
1d40: 0a 66 75 6e 63 74 69 6f 6e 20 70 6f 73 74 62 75  .function postbu
1d50: 69 6c 64 28 29 20 7b 0a 09 3a 0a 7d 0a 0a 66 75  ild() {..:.}..fu
1d60: 6e 63 74 69 6f 6e 20 62 75 69 6c 64 28 29 20 7b  nction build() {
1d70: 0a 09 67 72 65 70 20 22 44 45 53 54 44 49 52 22  ..grep "DESTDIR"
1d80: 20 4d 61 6b 65 66 69 6c 65 20 3e 2f 64 65 76 2f   Makefile >/dev/
1d90: 6e 75 6c 6c 20 7c 7c 20 64 69 65 20 22 44 6f 6e  null || die "Don
1da0: 27 74 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20 62  't know how to b
1db0: 75 69 6c 64 20 74 68 69 73 20 73 6f 66 74 77 61  uild this softwa
1dc0: 72 65 22 0a 0a 09 6d 61 6b 65 20 22 24 7b 6d 61  re"...make "${ma
1dd0: 6b 65 5f 65 78 74 72 61 5b 40 5d 7d 22 0a 7d 0a  ke_extra[@]}".}.
1de0: 0a 66 75 6e 63 74 69 6f 6e 20 70 72 65 69 6e 73  .function preins
1df0: 74 61 6c 6c 28 29 20 7b 0a 09 3a 0a 7d 0a 0a 66  tall() {..:.}..f
1e00: 75 6e 63 74 69 6f 6e 20 70 6f 73 74 69 6e 73 74  unction postinst
1e10: 61 6c 6c 28 29 20 7b 0a 09 3a 0a 7d 0a 0a 66 75  all() {..:.}..fu
1e20: 6e 63 74 69 6f 6e 20 69 6e 73 74 61 6c 6c 28 29  nction install()
1e30: 20 7b 0a 09 6d 61 6b 65 20 22 24 7b 6d 61 6b 65   {..make "${make
1e40: 5f 65 78 74 72 61 5b 40 5d 7d 22 20 69 6e 73 74  _extra[@]}" inst
1e50: 61 6c 6c 20 44 45 53 54 44 49 52 3d 22 24 7b 64  all DESTDIR="${d
1e60: 65 73 74 64 69 72 7d 22 0a 7d 0a 0a 66 75 6e 63  estdir}".}..func
1e70: 74 69 6f 6e 20 63 6c 65 61 6e 75 70 28 29 20 7b  tion cleanup() {
1e80: 0a 09 63 64 20 22 24 7b 77 6f 72 6b 64 69 72 7d  ..cd "${workdir}
1e90: 22 20 7c 7c 20 65 78 69 74 20 31 0a 09 63 64 20  " || exit 1..cd 
1ea0: 2e 2e 20 7c 7c 20 65 78 69 74 20 31 0a 09 72 6d  .. || exit 1..rm
1eb0: 20 2d 72 66 20 22 24 7b 77 6f 72 6b 64 69 72 7d   -rf "${workdir}
1ec0: 22 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 64 69  ".}..function di
1ed0: 65 28 29 20 7b 0a 09 6c 6f 63 61 6c 20 6d 65 73  e() {..local mes
1ee0: 73 61 67 65 0a 0a 09 6d 65 73 73 61 67 65 3d 22  sage...message="
1ef0: 24 31 22 0a 0a 09 69 66 20 5b 20 2d 6e 20 22 24  $1"...if [ -n "$
1f00: 7b 6d 65 73 73 61 67 65 7d 22 20 5d 3b 20 74 68  {message}" ]; th
1f10: 65 6e 0a 09 09 65 63 68 6f 20 22 65 72 72 6f 72  en...echo "error
1f20: 3a 20 24 7b 6d 65 73 73 61 67 65 7d 22 20 3e 26  : ${message}" >&
1f30: 32 0a 09 66 69 0a 0a 09 65 78 69 74 20 31 0a 7d  2..fi...exit 1.}
1f40: 0a 0a 73 63 72 69 70 74 64 69 72 3d 22 24 28 63  ..scriptdir="$(c
1f50: 64 20 22 24 28 64 69 72 6e 61 6d 65 20 22 24 28  d "$(dirname "$(
1f60: 77 68 69 63 68 20 22 24 30 22 29 22 29 22 20 26  which "$0")")" &
1f70: 26 20 70 77 64 29 22 0a 69 66 20 5b 20 2d 7a 20  & pwd)".if [ -z 
1f80: 22 24 7b 73 63 72 69 70 74 64 69 72 7d 22 20 5d  "${scriptdir}" ]
1f90: 3b 20 74 68 65 6e 0a 09 65 63 68 6f 20 22 55 6e  ; then..echo "Un
1fa0: 61 62 6c 65 20 74 6f 20 6c 6f 63 61 74 65 20 73  able to locate s
1fb0: 63 72 69 70 74 20 64 69 72 65 63 74 6f 72 79 22  cript directory"
1fc0: 20 3e 26 32 0a 0a 09 65 78 69 74 20 31 0a 66 69   >&2...exit 1.fi
1fd0: 0a 0a 63 64 20 22 24 7b 73 63 72 69 70 74 64 69  ..cd "${scriptdi
1fe0: 72 7d 22 20 7c 7c 20 65 78 69 74 20 31 0a 0a 69  r}" || exit 1..i
1ff0: 66 20 5b 20 2d 66 20 27 62 75 69 6c 64 2e 63 6f  f [ -f 'build.co
2000: 6e 66 27 20 5d 3b 20 74 68 65 6e 0a 09 2e 20 27  nf' ]; then... '
2010: 62 75 69 6c 64 2e 63 6f 6e 66 27 0a 66 69 0a 0a  build.conf'.fi..
2020: 69 66 20 5b 20 2d 64 20 22 70 6b 67 73 2f 24 7b  if [ -d "pkgs/${
2030: 70 6b 67 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 70  pkg}" ]; then..p
2040: 6b 67 64 69 72 3d 22 24 28 70 77 64 29 2f 70 6b  kgdir="$(pwd)/pk
2050: 67 73 2f 24 7b 70 6b 67 7d 22 0a 09 70 6b 67 66  gs/${pkg}"..pkgf
2060: 69 6c 65 3d 22 24 7b 70 6b 67 64 69 72 7d 2f 69  ile="${pkgdir}/i
2070: 6e 66 6f 22 0a 65 6c 73 65 0a 09 70 6b 67 66 69  nfo".else..pkgfi
2080: 6c 65 3d 22 24 28 70 77 64 29 2f 70 6b 67 73 2f  le="$(pwd)/pkgs/
2090: 24 7b 70 6b 67 7d 22 0a 09 70 6b 67 64 69 72 3d  ${pkg}"..pkgdir=
20a0: 22 24 7b 70 6b 67 66 69 6c 65 7d 22 0a 66 69 0a  "${pkgfile}".fi.
20b0: 0a 69 66 20 5b 20 21 20 2d 65 20 22 24 7b 70 6b  .if [ ! -e "${pk
20c0: 67 66 69 6c 65 7d 22 20 5d 3b 20 74 68 65 6e 0a  gfile}" ]; then.
20d0: 09 65 63 68 6f 20 22 49 6e 76 61 6c 69 64 20 70  .echo "Invalid p
20e0: 61 63 6b 61 67 65 2e 22 20 3e 26 32 0a 0a 09 65  ackage." >&2...e
20f0: 78 69 74 20 31 0a 66 69 0a 0a 70 6b 67 64 61 74  xit 1.fi..pkgdat
2100: 65 3d 22 24 28 66 6f 72 20 61 72 74 69 66 61 63  e="$(for artifac
2110: 74 20 69 6e 20 24 28 66 69 6e 64 20 22 24 7b 70  t in $(find "${p
2120: 6b 67 64 69 72 7d 22 20 2d 74 79 70 65 20 66 20  kgdir}" -type f 
2130: 2d 70 72 69 6e 74 30 20 7c 20 78 61 72 67 73 20  -print0 | xargs 
2140: 2d 6e 20 31 20 2d 30 20 66 6f 73 73 69 6c 20 66  -n 1 -0 fossil f
2150: 69 6e 66 6f 20 2d 2d 6c 69 6d 69 74 20 31 20 2d  info --limit 1 -
2160: 2d 77 69 64 74 68 20 30 20 32 3e 2f 64 65 76 2f  -width 0 2>/dev/
2170: 6e 75 6c 6c 20 7c 20 67 72 65 70 20 27 5e 5b 30  null | grep '^[0
2180: 2d 39 5d 5b 30 2d 39 5d 5b 30 2d 39 5d 5b 30 2d  -9][0-9][0-9][0-
2190: 39 5d 2d 5b 30 2d 39 5d 5b 30 2d 39 5d 2d 5b 30  9]-[0-9][0-9]-[0
21a0: 2d 39 5d 5b 30 2d 39 5d 20 27 20 7c 20 73 65 64  -9][0-9] ' | sed
21b0: 20 27 73 40 5e 5b 5e 20 5d 2a 20 5c 5b 40 40 3b   's@^[^ ]* \[@@;
21c0: 73 40 5c 5d 2e 2a 40 40 27 20 7c 20 73 6f 72 74  s@\].*@@' | sort
21d0: 20 2d 75 29 3b 20 64 6f 20 66 6f 73 73 69 6c 20   -u); do fossil 
21e0: 69 6e 66 6f 20 22 24 7b 61 72 74 69 66 61 63 74  info "${artifact
21f0: 7d 22 20 7c 20 61 77 6b 20 27 2f 5e 75 75 69 64  }" | awk '/^uuid
2200: 3a 2f 7b 20 70 72 69 6e 74 20 24 33 20 24 34 20  :/{ print $3 $4 
2210: 7d 27 20 7c 20 73 65 64 20 27 73 40 5b 2d 3a 5d  }' | sed 's@[-:]
2220: 40 40 67 3b 73 40 2e 2e 24 40 5c 2e 26 40 27 3b  @@g;s@..$@\.&@';
2230: 20 64 6f 6e 65 20 7c 20 73 6f 72 74 20 2d 6e 20   done | sort -n 
2240: 7c 20 74 61 69 6c 20 2d 6e 20 31 29 22 0a 69 66  | tail -n 1)".if
2250: 20 5b 20 2d 7a 20 22 24 7b 70 6b 67 64 61 74 65   [ -z "${pkgdate
2260: 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 70 6b 67 64  }" ]; then..pkgd
2270: 61 74 65 3d 22 24 28 66 69 6e 64 20 22 24 7b 70  ate="$(find "${p
2280: 6b 67 64 69 72 7d 22 20 2d 74 79 70 65 20 66 20  kgdir}" -type f 
2290: 2d 70 72 69 6e 74 66 20 27 25 54 59 25 54 6d 25  -printf '%TY%Tm%
22a0: 54 64 25 54 48 25 54 4d 2e 25 54 53 5c 6e 27 20  Td%TH%TM.%TS\n' 
22b0: 32 3e 2f 64 65 76 2f 6e 75 6c 6c 20 7c 20 63 75  2>/dev/null | cu
22c0: 74 20 2d 66 20 31 2d 32 20 2d 64 20 27 2e 27 20  t -f 1-2 -d '.' 
22d0: 7c 20 73 6f 72 74 20 2d 6e 20 7c 20 74 61 69 6c  | sort -n | tail
22e0: 20 2d 6e 20 31 29 22 0a 66 69 0a 0a 2e 20 22 24   -n 1)".fi... "$
22f0: 7b 70 6b 67 66 69 6c 65 7d 22 0a 0a 61 72 63 68  {pkgfile}"..arch
2300: 69 76 65 64 69 72 3d 22 24 28 70 77 64 29 2f 41  ivedir="$(pwd)/A
2310: 52 43 48 49 56 45 22 0a 77 6f 72 6b 64 69 72 3d  RCHIVE".workdir=
2320: 22 77 6f 72 6b 64 69 72 2d 24 24 24 7b 52 41 4e  "workdir-$$${RAN
2330: 44 4f 4d 7d 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52  DOM}${RANDOM}${R
2340: 41 4e 44 4f 4d 7d 22 0a 70 6b 67 61 72 63 68 69  ANDOM}".pkgarchi
2350: 76 65 3d 22 24 7b 61 72 63 68 69 76 65 64 69 72  ve="${archivedir
2360: 7d 2f 24 7b 70 6b 67 7d 2d 24 7b 76 65 72 73 69  }/${pkg}-${versi
2370: 6f 6e 7d 2e 61 72 63 68 69 76 65 22 0a 6d 6b 64  on}.archive".mkd
2380: 69 72 20 22 24 7b 61 72 63 68 69 76 65 64 69 72  ir "${archivedir
2390: 7d 22 20 3e 2f 64 65 76 2f 6e 75 6c 6c 20 32 3e  }" >/dev/null 2>
23a0: 2f 64 65 76 2f 6e 75 6c 6c 0a 6d 6b 64 69 72 20  /dev/null.mkdir 
23b0: 22 24 7b 77 6f 72 6b 64 69 72 7d 22 20 7c 7c 20  "${workdir}" || 
23c0: 65 78 69 74 20 31 0a 63 64 20 22 24 7b 77 6f 72  exit 1.cd "${wor
23d0: 6b 64 69 72 7d 22 20 7c 7c 20 65 78 69 74 20 31  kdir}" || exit 1
23e0: 0a 77 6f 72 6b 64 69 72 3d 22 24 28 70 77 64 29  .workdir="$(pwd)
23f0: 22 0a 0a 23 20 44 6f 77 6e 6c 6f 61 64 0a 70 72  "..# Download.pr
2400: 65 64 6f 77 6e 6c 6f 61 64 0a 64 6f 77 6e 6c 6f  edownload.downlo
2410: 61 64 0a 0a 23 20 45 78 74 72 61 63 74 0a 65 78  ad..# Extract.ex
2420: 74 72 61 63 74 0a 0a 23 20 49 66 20 77 65 20 6a  tract..# If we j
2430: 75 73 74 20 68 61 76 65 20 6f 6e 65 20 64 69 72  ust have one dir
2440: 65 63 74 6f 72 79 2c 20 75 73 65 20 74 68 61 74  ectory, use that
2450: 20 64 69 72 65 63 74 6f 72 79 0a 64 69 72 3d 22   directory.dir="
2460: 24 28 65 63 68 6f 20 2a 29 22 0a 69 66 20 5b 20  $(echo *)".if [ 
2470: 2d 65 20 22 24 7b 64 69 72 7d 22 20 5d 3b 20 74  -e "${dir}" ]; t
2480: 68 65 6e 0a 09 28 0a 09 09 73 68 6f 70 74 20 2d  hen..(...shopt -
2490: 73 20 64 6f 74 67 6c 6f 62 0a 09 09 6d 76 20 22  s dotglob...mv "
24a0: 24 7b 64 69 72 7d 22 2f 2a 20 2e 0a 09 29 0a 66  ${dir}"/* ...).f
24b0: 69 0a 0a 23 20 44 65 74 65 72 6d 69 6e 65 20 70  i..# Determine p
24c0: 72 6f 70 65 72 74 69 65 73 0a 64 65 74 65 72 6d  roperties.determ
24d0: 69 6e 65 50 72 65 66 69 78 0a 0a 23 20 53 74 61  inePrefix..# Sta
24e0: 72 74 20 6c 6f 67 67 69 6e 67 0a 73 65 74 20 2d  rt logging.set -
24f0: 78 0a 0a 23 20 56 65 72 69 66 79 20 70 72 65 2d  x..# Verify pre-
2500: 72 65 71 75 69 73 69 74 65 73 20 61 72 65 20 6d  requisites are m
2510: 65 74 0a 76 65 72 69 66 79 52 65 71 75 69 72 65  et.verifyRequire
2520: 64 50 61 63 6b 61 67 65 73 20 7c 7c 20 64 69 65  dPackages || die
2530: 20 27 52 65 71 75 69 72 65 64 20 70 61 63 6b 61   'Required packa
2540: 67 65 73 20 6d 69 73 73 69 6e 67 27 0a 76 65 72  ges missing'.ver
2550: 69 66 79 50 72 65 72 65 71 75 69 73 69 74 65 73  ifyPrerequisites
2560: 20 7c 7c 20 64 69 65 20 27 50 72 65 72 65 71 75   || die 'Prerequ
2570: 69 73 69 74 69 65 73 20 66 61 69 6c 65 64 27 0a  isities failed'.
2580: 0a 23 20 41 70 70 6c 79 20 70 61 74 63 68 65 73  .# Apply patches
2590: 0a 61 70 70 6c 79 5f 70 61 74 63 68 65 73 0a 0a  .apply_patches..
25a0: 23 20 53 74 61 72 74 20 74 68 65 20 62 75 69 6c  # Start the buil
25b0: 64 0a 70 72 65 63 6f 6e 66 69 67 75 72 65 20 7c  d.preconfigure |
25c0: 7c 20 64 69 65 20 27 70 72 65 63 6f 6e 66 69 67  | die 'preconfig
25d0: 75 72 65 20 66 61 69 6c 65 64 27 0a 63 6f 6e 66  ure failed'.conf
25e0: 69 67 75 72 65 20 7c 7c 20 64 69 65 20 27 63 6f  igure || die 'co
25f0: 6e 66 69 67 75 72 65 20 66 61 69 6c 65 64 27 0a  nfigure failed'.
2600: 70 6f 73 74 63 6f 6e 66 69 67 75 72 65 20 7c 7c  postconfigure ||
2610: 20 64 69 65 20 27 70 6f 73 74 63 6f 6e 66 69 67   die 'postconfig
2620: 75 72 65 20 66 61 69 6c 65 64 27 0a 0a 70 72 65  ure failed'..pre
2630: 62 75 69 6c 64 20 7c 7c 20 64 69 65 20 27 70 72  build || die 'pr
2640: 65 62 75 69 6c 64 20 66 61 69 6c 65 64 27 0a 62  ebuild failed'.b
2650: 75 69 6c 64 20 7c 7c 20 64 69 65 20 27 62 75 69  uild || die 'bui
2660: 6c 64 20 66 61 69 6c 65 64 27 0a 70 6f 73 74 62  ld failed'.postb
2670: 75 69 6c 64 20 7c 7c 20 64 69 65 20 27 70 6f 73  uild || die 'pos
2680: 74 62 75 69 6c 64 20 66 61 69 6c 65 64 27 0a 0a  tbuild failed'..
2690: 70 72 65 69 6e 73 74 61 6c 6c 20 7c 7c 20 64 69  preinstall || di
26a0: 65 20 27 70 72 65 69 6e 73 74 61 6c 6c 20 66 61  e 'preinstall fa
26b0: 69 6c 65 64 27 0a 69 6e 73 74 61 6c 6c 20 7c 7c  iled'.install ||
26c0: 20 64 69 65 20 27 69 6e 73 74 61 6c 6c 20 66 61   die 'install fa
26d0: 69 6c 65 64 27 0a 70 6f 73 74 69 6e 73 74 61 6c  iled'.postinstal
26e0: 6c 20 7c 7c 20 64 69 65 20 27 70 6f 73 74 69 6e  l || die 'postin
26f0: 73 74 61 6c 6c 20 66 61 69 6c 65 64 27 0a 0a 28  stall failed'..(
2700: 0a 09 63 61 73 65 20 22 24 7b 74 61 72 67 65 74  ..case "${target
2710: 6d 6f 64 65 7d 22 20 69 6e 0a 09 09 69 6e 73 74  mode}" in...inst
2720: 61 6c 6c 29 0a 09 09 09 61 70 70 64 69 72 3d 22  all)....appdir="
2730: 24 28 61 70 70 66 73 69 6e 73 74 61 6c 6c 64 69  $(appfsinstalldi
2740: 72 29 2f 24 7b 70 72 65 66 69 78 73 75 66 66 69  r)/${prefixsuffi
2750: 78 7d 22 0a 09 09 09 6d 6b 64 69 72 20 2d 70 20  x}"....mkdir -p 
2760: 22 24 7b 61 70 70 64 69 72 7d 22 0a 0a 09 09 09  "${appdir}".....
2770: 63 64 20 22 24 7b 64 65 73 74 64 69 72 7d 2f 24  cd "${destdir}/$
2780: 7b 70 72 65 66 69 78 7d 22 20 7c 7c 20 65 78 69  {prefix}" || exi
2790: 74 20 31 0a 0a 09 09 09 63 70 20 2d 72 70 20 2a  t 1.....cp -rp *
27a0: 20 22 24 7b 61 70 70 64 69 72 7d 22 0a 09 09 09   "${appdir}"....
27b0: 66 69 6e 64 20 22 24 7b 61 70 70 64 69 72 7d 22  find "${appdir}"
27c0: 20 2d 70 72 69 6e 74 30 20 7c 20 78 61 72 67 73   -print0 | xargs
27d0: 20 2d 30 20 74 6f 75 63 68 20 2d 74 20 22 24 7b   -0 touch -t "${
27e0: 70 6b 67 64 61 74 65 7d 22 0a 09 09 09 66 69 6e  pkgdate}"....fin
27f0: 64 20 22 24 7b 61 70 70 64 69 72 7d 22 20 2d 70  d "${appdir}" -p
2800: 72 69 6e 74 30 20 7c 20 78 61 72 67 73 20 2d 30  rint0 | xargs -0
2810: 20 74 6f 75 63 68 20 2d 6d 20 2d 74 20 22 24 7b   touch -m -t "${
2820: 70 6b 67 64 61 74 65 7d 22 0a 09 09 09 66 69 6e  pkgdate}"....fin
2830: 64 20 22 24 7b 61 70 70 64 69 72 7d 22 20 2d 70  d "${appdir}" -p
2840: 72 69 6e 74 30 20 7c 20 78 61 72 67 73 20 2d 30  rint0 | xargs -0
2850: 20 74 6f 75 63 68 20 2d 61 20 2d 74 20 22 24 7b   touch -a -t "${
2860: 70 6b 67 64 61 74 65 7d 22 0a 09 09 09 3b 3b 0a  pkgdate}"....;;.
2870: 09 09 61 72 63 68 69 76 65 29 0a 09 09 09 61 72  ..archive)....ar
2880: 63 68 69 76 65 66 69 6c 65 3d 22 24 7b 73 63 72  chivefile="${scr
2890: 69 70 74 64 69 72 7d 2f 24 7b 70 6b 67 7d 2d 24  iptdir}/${pkg}-$
28a0: 7b 76 65 72 73 69 6f 6e 7d 2d 24 28 65 63 68 6f  {version}-$(echo
28b0: 20 22 24 7b 70 6b 67 64 61 74 65 7d 22 20 7c 20   "${pkgdate}" | 
28c0: 73 65 64 20 27 73 40 5c 2e 40 40 67 27 29 2d 24  sed 's@\.@@g')-$
28d0: 7b 6f 73 7d 2d 24 7b 61 72 63 68 7d 2d 24 7b 64  {os}-${arch}-${d
28e0: 6f 6d 61 69 6e 7d 2e 63 70 69 6f 22 0a 09 09 09  omain}.cpio"....
28f0: 63 64 20 22 24 7b 64 65 73 74 64 69 72 7d 2f 24  cd "${destdir}/$
2900: 7b 70 72 65 66 69 78 7d 2f 2e 2e 2f 2e 2e 2f 2e  {prefix}/../../.
2910: 2e 22 20 7c 7c 20 65 78 69 74 20 31 0a 09 09 09  ." || exit 1....
2920: 66 69 6e 64 20 22 24 7b 70 72 65 66 69 78 73 75  find "${prefixsu
2930: 66 66 69 78 7d 22 20 2d 70 72 69 6e 74 30 20 7c  ffix}" -print0 |
2940: 20 78 61 72 67 73 20 2d 30 20 74 6f 75 63 68 20   xargs -0 touch 
2950: 2d 74 20 22 24 7b 70 6b 67 64 61 74 65 7d 22 0a  -t "${pkgdate}".
2960: 09 09 09 66 69 6e 64 20 22 24 7b 70 72 65 66 69  ...find "${prefi
2970: 78 73 75 66 66 69 78 7d 22 20 2d 70 72 69 6e 74  xsuffix}" -print
2980: 30 20 7c 20 78 61 72 67 73 20 2d 30 20 74 6f 75  0 | xargs -0 tou
2990: 63 68 20 2d 6d 20 2d 74 20 22 24 7b 70 6b 67 64  ch -m -t "${pkgd
29a0: 61 74 65 7d 22 0a 09 09 09 66 69 6e 64 20 22 24  ate}"....find "$
29b0: 7b 70 72 65 66 69 78 73 75 66 66 69 78 7d 22 20  {prefixsuffix}" 
29c0: 2d 70 72 69 6e 74 30 20 7c 20 78 61 72 67 73 20  -print0 | xargs 
29d0: 2d 30 20 74 6f 75 63 68 20 2d 61 20 2d 74 20 22  -0 touch -a -t "
29e0: 24 7b 70 6b 67 64 61 74 65 7d 22 0a 09 09 09 66  ${pkgdate}"....f
29f0: 69 6e 64 20 22 24 7b 70 72 65 66 69 78 73 75 66  ind "${prefixsuf
2a00: 66 69 78 7d 22 20 7c 20 73 6f 72 74 20 7c 20 63  fix}" | sort | c
2a10: 70 69 6f 20 2d 2d 6f 77 6e 65 72 20 30 3a 30 20  pio --owner 0:0 
2a20: 2d 48 20 6e 65 77 63 20 2d 6f 20 3e 20 22 24 7b  -H newc -o > "${
2a30: 61 72 63 68 69 76 65 66 69 6c 65 7d 22 0a 09 09  archivefile}"...
2a40: 09 3b 3b 0a 09 65 73 61 63 0a 29 20 7c 7c 20 64  .;;..esac.) || d
2a50: 69 65 20 27 66 69 6e 61 6c 20 69 6e 73 74 61 6c  ie 'final instal
2a60: 6c 61 74 69 6f 6e 20 66 61 69 6c 65 64 27 0a 0a  lation failed'..
2a70: 63 6c 65 61 6e 75 70 0a 0a 65 78 69 74 20 30 0a  cleanup..exit 0.