commit: 9f86b664a1dedc792c5cdbe5d11d96ea513b4b2f
parent 6d51641b061d301e06c86e6de007d907fb04999a
Author: fosslinux <fosslinux@aussies.space>
Date: Sun, 31 Jan 2021 08:34:11 +1100
Merge pull request #23 from stikonas/bash_script
Build harness in bash
Diffstat:
8 files changed, 142 insertions(+), 34 deletions(-)
diff --git a/.cirrus.yml b/.cirrus.yml
@@ -11,7 +11,7 @@ lint_task:
- apt-get -y install shellcheck
- apt-get -y clean
check_script:
- - shellcheck rootfs.sh
+ - shellcheck rootfs.sh sysa/run.sh sysa/helpers.sh
run_task:
# Required background services
diff --git a/rootfs.sh b/rootfs.sh
@@ -41,6 +41,7 @@ mkdir -p tmp/after/include/linux/{x86,x86_64}
mkdir -p tmp/tmp
cp after.kaem tmp/
cp after.kaem.run tmp/after/kaem.run
+cp helpers.sh run.sh tmp/after/
# mescc-tools-extra
cp -r mescc-tools-extra tmp/after/
diff --git a/sysa/after.kaem.run b/sysa/after.kaem.run
@@ -147,10 +147,4 @@ cd ${pkg}
kaem --file ${pkg}.kaem
cd ..
-# Part 21: m4
-pkg="m4-1.4"
-cd ${pkg}
-kaem --file ${pkg}.kaem
-cd ..
-
-echo "Bootstrapping completed."
+bash run.sh
diff --git a/sysa/bash-2.05b/bash-2.05b.kaem b/sysa/bash-2.05b/bash-2.05b.kaem
@@ -35,5 +35,7 @@ make
# Install
install bash /after/bin/
+ln -s /after/bin/bash /bin/bash
+ln -s /after/bin/bash /bin/sh
cd ../..
diff --git a/sysa/helpers.sh b/sysa/helpers.sh
@@ -0,0 +1,119 @@
+#!/bin/bash -e
+
+# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+export PATH=/after/bin
+
+# Common build steps
+# Build function provides a few common stages with default implementation
+# that can be overridden on per package basis in the build script.
+# build takes two arguments:
+# 1) name-version of the package
+# 2) optionally specify build script. Default is name-version.sh
+build () {
+ pkg=$1
+ script_name=${2:-${pkg}.sh}
+
+ cd "$pkg" || (echo "Cannot cd into ${pkg}!"; kill $$)
+ echo "${pkg}: beginning build"
+ base_dir="${PWD}"
+ patch_dir="${base_dir}/patches"
+ mk_dir="${base_dir}/mk"
+
+ rm -rf "build"
+ mkdir -p "build"
+
+ cd "build"
+
+ echo "${pkg}: unpacking source."
+ call src_unpack
+
+ build_script="${base_dir}/${script_name}"
+ if test -e "${build_script}"; then
+ # shellcheck source=/dev/null
+ . "${build_script}"
+ fi
+ cd "${pkg}" || (echo "Cannot cd into build/${pkg}!"; kill $$)
+
+ echo "${pkg}: preparing source."
+ call src_prepare
+
+ echo "${pkg}: configuring source."
+ call src_configure
+
+ echo "${pkg}: compiling source."
+ call src_compile
+
+ echo "${pkg}: installing."
+ call src_install
+
+ cd ../..
+
+ echo "${pkg}: build successful"
+ cd ..
+}
+
+# Default unpacking function that unpacks a single source tarball.
+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) xtr="z" ;;
+ bz2) xtr="j" ;;
+ xz) xtr="J" ;;
+ esac
+ tar "-${xtr}" -xf "${source}"
+ break
+ fi
+ done
+}
+
+# Default function to prepare source code.
+# It applies all patches from patch_dir (at the moment only -p0 patches are supported).
+# Then it copies our custom makefile.
+default_src_prepare() {
+ if test -d "${patch_dir}"; then
+ for p in "${patch_dir}"/*.patch; do
+ patch -Np0 < "${p}"
+ done
+ fi
+
+ makefile="${mk_dir}/main.mk"
+ if test -e "${makefile}"; then
+ cp "${makefile}" Makefile
+ fi
+}
+
+# Default function for configuring source.
+default_src_configure() {
+ :
+}
+
+# Default function for compiling source. It simply runs make without any parameters.
+default_src_compile() {
+ make
+}
+
+# Default installing function. PREFIX should be set by run.sh script.
+# Note that upstream makefiles might ignore PREFIX and have to be configured in configure stage.
+default_src_install() {
+ make install PREFIX="${PREFIX}"
+}
+
+# Check if bash function exists
+fn_exists() {
+ test "$(type -t "$1")" == 'function'
+}
+
+# Call package specific function or default implementation.
+call() {
+ if fn_exists "$1"; then
+ $1
+ else
+ default_"${1}"
+ fi
+}
diff --git a/sysa/m4-1.4/m4-1.4.kaem b/sysa/m4-1.4/m4-1.4.kaem
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-set -ex
-
-mkdir build
-cd build
-
-# Extract
-gunzip ../src/${pkg}.tar.gz
-tar xf ../src/${pkg}.tar
-cd ${pkg}
-cp ../../mk/main.mk Makefile
-
-# Patch and prepare
-patch -Np0 -i ../../patches/signal-include.patch
-
-# Build
-make
-
-# Install
-install m4 /after/bin/
-
-# Test
-m4 --version
-
-cd ../..
diff --git a/sysa/m4-1.4/mk/main.mk b/sysa/m4-1.4/mk/main.mk
@@ -26,3 +26,6 @@ m4: libm4.a $(M4_OBJ)
libm4.a: $(LIB_OBJECTS)
$(AR) cr $@ $^
+
+install: all
+ install m4 $(PREFIX)/bin
diff --git a/sysa/run.sh b/sysa/run.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+set -e
+# shellcheck source=sysa/helpers.sh
+. helpers.sh
+
+export PREFIX=/after
+
+# Part 21
+build m4-1.4
+
+echo "Bootstrapping completed."