commit: 54234a56837c4cd6bde2f610eac7b78b409d4cf1
parent f5b914bb9f5fe04c0453103659c6bf5ff26ee431
Author: fosslinux <fosslinux@aussies.space>
Date: Mon, 5 Apr 2021 08:41:42 +1000
Add multiple tarball support, named args in rootfs.sh
1. Add named args to make this more clear and avoid unnessecarily
setting default values for certain values ot set others positioned
later.
2. Add support for multiple tarballs in rootfs.sh.
3. Add support for extracting multiple tarballs (name dosen't matter
anymore) in helpers.sh.
4. Add comment for 4th arg to build.
Diffstat:
M | rootfs.sh | 97 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------- |
M | sysa/helpers.sh | 28 | +++++++++++++++++----------- |
2 files changed, 91 insertions(+), 34 deletions(-)
diff --git a/rootfs.sh b/rootfs.sh
@@ -111,50 +111,101 @@ if [ ! -f "$(basename $url)" ]; then
fi
popd
tar -C tmp/after/tar-1.12/src -xf "tmp/after/tar-1.12/src/$(basename $url)" --strip-components=1
+unset url
-get_file() {
- url=$1
- make_build=${2:-0}
- output_filename=$3
- ext="${url##*.}"
+_get_file() {
+ local url="$1"
+ local output="$2"
+ local target="$3"
+ # Get the actual file
+ pushd "${target}/src"
+ if [ ! -f "$(basename "$url")" ]; then
+ _wget "$url" "${output:-${url##*/}}"
+ fi
+ popd
+}
+
+_get_target() {
+ local url="$1"
+ local output="$2"
+ local ext="${url##*.}"
if [ "$ext" = "tar" ]; then
- bname=$(basename "${output_filename:-${url}}" ".tar")
+ bname=$(basename "${output:-${url}}" ".tar")
else
- bname=$(basename "${output_filename:-${url}}" ".tar.${ext}")
+ bname=$(basename "${output:-${url}}" ".tar.${ext}")
fi
- cp -r "${bname}" tmp/after/
- target="tmp/after/${bname}"
+ # this is the target
+ echo "tmp/after/${bname}"
+}
+
+_get_main() {
+ local url="$1"
+ local output="$2"
+ local make_build="$3"
+ local target="$4"
+ # Copy main files
+ cp -r "$(basename "${target}")" tmp/after/
+ # Make directories
mkdir -p "${target}/src"
- if [ "${make_build}" -ne 0 ]; then
- mkdir "${target}/build"
+ if [ "${make_build}" -eq 1 ]; then
+ mkdir -p "${target}/build"
fi
- pushd "tmp/after/${bname}/src"
- if [ ! -f "$(basename "$url")" ]; then
- _wget "$url" "${output_filename:-${url##*/}}"
+ # Also get this file
+ _get_file "${url}" "${output}" "${target}"
+}
+
+get_file() {
+ # A mapping of URL to output filenames based on index (position-dependent)
+ local outputs=()
+ local urls=()
+ # Argument parsing
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ --mkbuild=*) local make_build="${1#*=}" ;;
+ --output=*) outputs+=("${1#*=}") ;;
+ # It's just another URL to download
+ *) urls+=("$1") ;;
+ esac
+ shift
+ done
+ if [ -z "${make_build}" ]; then
+ make_build=0
+ fi
+ # Actual work
+ # Loop over urls
+ local url_length="${#urls[@]}"
+ local target
+ target="$(_get_target "${urls[0]}" "${outputs[0]}")"
+ _get_main "${urls[0]}" "${outputs[0]}" "${make_build}" "${target}"
+ if [ "${url_length}" -gt 1 ]; then
+ url_length="$((url_length-1))"
+ echo "${url_length}"
+ for i in $(seq 1 "${url_length}"); do
+ _get_file "${urls[${i}]}" "${outputs[${i}]}" "${target}"
+ done
fi
- popd
}
# gzip 1.2.4
-get_file https://ftp.gnu.org/gnu/gzip/gzip-1.2.4.tar 1
+get_file https://ftp.gnu.org/gnu/gzip/gzip-1.2.4.tar --mkbuild=1
# sed 4.0.9
-get_file https://ftp.gnu.org/gnu/sed/sed-4.0.9.tar.gz 1
+get_file https://ftp.gnu.org/gnu/sed/sed-4.0.9.tar.gz --mkbuild=1
# patch 2.5.9
-get_file https://ftp.gnu.org/pub/gnu/patch/patch-2.5.9.tar.gz 1
+get_file https://ftp.gnu.org/pub/gnu/patch/patch-2.5.9.tar.gz --mkbuild=1
# sha-2 61555d
-get_file https://github.com/amosnier/sha-2/archive/61555d.tar.gz 1 sha-2-61555d.tar.gz
+get_file https://github.com/amosnier/sha-2/archive/61555d.tar.gz --mkbuild=1 --output=sha-2-61555d.tar.gz
# make 3.80
-get_file https://ftp.gnu.org/gnu/make/make-3.80.tar.gz 1
+get_file https://ftp.gnu.org/gnu/make/make-3.80.tar.gz --mkbuild=1
# bzip2 1.0.8
-get_file ftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz 1
+get_file ftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz --mkbuild=1
# coreutils 5.0
-get_file https://ftp.gnu.org/gnu/coreutils/coreutils-5.0.tar.bz2 1
+get_file https://ftp.gnu.org/gnu/coreutils/coreutils-5.0.tar.bz2 --mkbuild=1
# heirloom-devtools
get_file http://downloads.sourceforge.net/project/heirloom/heirloom-devtools/070527/heirloom-devtools-070527.tar.bz2
@@ -271,7 +322,7 @@ get_file https://ftp.gnu.org/gnu/automake/automake-1.10.3.tar.bz2
get_file https://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.bz2
# gcc 4.0.4
-get_file https://ftp.gnu.org/gnu/gcc/gcc-4.0.4/gcc-core-4.0.4.tar.bz2 0 gcc-4.0.4.tar.bz2
+get_file https://ftp.gnu.org/gnu/gcc/gcc-4.0.4/gcc-core-4.0.4.tar.bz2 --output=gcc-4.0.4.tar.bz2
# musl 1.2.2
get_file https://musl.libc.org/releases/musl-1.2.2.tar.gz
diff --git a/sysa/helpers.sh b/sysa/helpers.sh
@@ -15,6 +15,7 @@ export PATH=/after/bin
# 1) name-version of the package
# 2) optionally specify build script. Default is name-version.sh
# 3) optionally specify name of checksum file. Default is checksums
+# 4) directory of patches. Default is patches
build () {
pkg=$1
script_name=${2:-${pkg}.sh}
@@ -66,20 +67,25 @@ build () {
unset -f src_unpack src_prepare src_configure src_compile src_install
}
-# Default unpacking function that unpacks a single source tarball.
+# Default unpacking function that unpacks all source tarballs.
default_src_unpack() {
src_dir="${base_dir}/src"
- for suf in .gz .bz2 .xz ""; do
- source="${src_dir}/${pkg}.tar${suf}"
- if test -e "${source}"; then
- case "${suf}" in
- .gz) tar -xzf "${source}" ;;
- .bz2) tar -xf "${source}" --use-compress-program=bzip2 ;;
- .xz) tar -xf "${source}" --use-compress-program=xz ;;
- "") tar -xf "${source}" ;;
- esac
- fi
+ for i in "${src_dir}"/*.tar.gz; do
+ [ -e "${i}" ] || continue
+ tar -xzf "${i}"
+ done
+ for i in "${src_dir}"/*.tar.bz2; do
+ [ -e "${i}" ] || continue
+ tar -xf "${i}" --use-compress-program=bzip2
+ done
+ for i in "${src_dir}"/*.tar.xz; do
+ [ -e "${i}" ] || continue
+ tar -xf "${i}" --use-compress-program=xz
+ done
+ for i in "${src_dir}"/*.tar; do
+ [ -e "${i}" ] || continue
+ tar -xf "${i}"
done
}