xref: /aosp_15_r20/external/toybox/mkroot/packages/plumbing (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/echo run this from "make root"
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker# Plumbing to download files
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker[ -z "$ROOT" ] && echo "no" && exit 1
6*cf5a6c84SAndroid Build Coastguard Workermkdir -p "${DOWNLOAD:=$PWD/root_download}" || exit 1
7*cf5a6c84SAndroid Build Coastguard Worker
8*cf5a6c84SAndroid Build Coastguard Worker### Functions to download, extract, and clean up after source packages.
9*cf5a6c84SAndroid Build Coastguard Worker
10*cf5a6c84SAndroid Build Coastguard Worker# Usage: download HASH URL
11*cf5a6c84SAndroid Build Coastguard Worker# Grabs source from URL confirming SHA1 hash (Basically "wget $2")
12*cf5a6c84SAndroid Build Coastguard Worker# If extracted source is in $DOWNLOAD (no version) build will use that instead
13*cf5a6c84SAndroid Build Coastguard Workerdownload() {
14*cf5a6c84SAndroid Build Coastguard Worker  local FILE="$(basename "$2")" WGET=wget
15*cf5a6c84SAndroid Build Coastguard Worker  [ -d "$DOWNLOAD/${FILE/-*/}" ] && echo "$FILE" local && return 0
16*cf5a6c84SAndroid Build Coastguard Worker  X=0; while true; do
17*cf5a6c84SAndroid Build Coastguard Worker    [ "$(sha1sum < "$DOWNLOAD/$FILE" 2>/dev/null)" == "$1  -" ] &&
18*cf5a6c84SAndroid Build Coastguard Worker      echo "$FILE" confirmed && break
19*cf5a6c84SAndroid Build Coastguard Worker    rm -f $DOWNLOAD/${FILE/-[0-9]*/}-[0-9]* || exit 1
20*cf5a6c84SAndroid Build Coastguard Worker    [ $X -eq 0 ] && X=1 || [ $X -eq 1 ] && X=2 WGET=/usr/bin/wget || exit 1
21*cf5a6c84SAndroid Build Coastguard Worker    $WGET "$2" -O "$DOWNLOAD/$FILE"
22*cf5a6c84SAndroid Build Coastguard Worker  done
23*cf5a6c84SAndroid Build Coastguard Worker}
24*cf5a6c84SAndroid Build Coastguard Worker
25*cf5a6c84SAndroid Build Coastguard Worker# Usage: setupfor PACKAGE
26*cf5a6c84SAndroid Build Coastguard Worker# Extracts source tarball (or snapshot a repo) to create disposable build dir.
27*cf5a6c84SAndroid Build Coastguard Worker# Basically "tar -xvz -C $TEMP -f $DOWNLOAD/$1.tar.gz && cd $NEWDIR"
28*cf5a6c84SAndroid Build Coastguard Workersetupfor() {
29*cf5a6c84SAndroid Build Coastguard Worker  PACKAGE="$(basename "$1")"
30*cf5a6c84SAndroid Build Coastguard Worker  announce "$PACKAGE" && cd "$TEMP" && rm -rf "$PACKAGE" || exit 1
31*cf5a6c84SAndroid Build Coastguard Worker  if [ -d "$DOWNLOAD/$PACKAGE" ]; then
32*cf5a6c84SAndroid Build Coastguard Worker    cp -la "$DOWNLOAD/$PACKAGE/." "$PACKAGE" && cd "$PACKAGE" || exit 1
33*cf5a6c84SAndroid Build Coastguard Worker  else
34*cf5a6c84SAndroid Build Coastguard Worker    local DIR=$(mktemp -dp.)
35*cf5a6c84SAndroid Build Coastguard Worker    tar xvafC "$DOWNLOAD/$PACKAGE"-*.t* "$DIR" &&
36*cf5a6c84SAndroid Build Coastguard Worker    mv "$DIR"/* "$PACKAGE" && rmdir "$DIR" && cd "$PACKAGE" || exit 1
37*cf5a6c84SAndroid Build Coastguard Worker  fi
38*cf5a6c84SAndroid Build Coastguard Worker}
39*cf5a6c84SAndroid Build Coastguard Worker
40*cf5a6c84SAndroid Build Coastguard Worker# Usage: cleanup
41*cf5a6c84SAndroid Build Coastguard Worker# Delete setupfor's dir, exiting if build failed (basically "rm -rf $PACKAGE")
42*cf5a6c84SAndroid Build Coastguard Workercleanup() {
43*cf5a6c84SAndroid Build Coastguard Worker  [ $? -ne 0 ] && exit 1
44*cf5a6c84SAndroid Build Coastguard Worker  [ -z "$PACKAGE" ] && exit 1
45*cf5a6c84SAndroid Build Coastguard Worker  [ ! -z "$NO_CLEANUP" ] && return
46*cf5a6c84SAndroid Build Coastguard Worker  cd .. && rm -rf "$PACKAGE"* || exit 1
47*cf5a6c84SAndroid Build Coastguard Worker}
48