#!/usr/bin/make -f # 2018 Luke Shumaker # Runtime/user options ######################################################### GITREV ?= systemd/master WORKDIR ?= workdir ################################################################################ # Main # ################################################################################ # Configure Make ############################################################### .ONESHELL: SHELL = bash .SHELLFLAGS = -veE -o pipefail -c .SILENT: .DELETE_ON_ERROR: .SECONDARY: .DEFAULT_GOAL = check ################################################################################ .PHONY: FORCE # git ########################################################################## ${WORKDIR}/systemd.git: FORCE mkdir -p -- '$(@D)' gitget bare https://git.parabola.nu/~lukeshu/systemd.git '$@' test -d '$@' touch '$@' ${WORKDIR}/.COMMIT.mk: ${WORKDIR}/systemd.git ( cd $< && git rev-parse --verify '${GITREV}' ) | sed 's/^/COMMIT=/' | ./write-ifchanged '$@' -include ${WORKDIR}/.COMMIT.mk check: ${WORKDIR}/build-232/pkgdest check: ${WORKDIR}/build-$(COMMIT)/pkgdest check: ${WORKDIR}/build-$(COMMIT)/integration-tests.log .PHONY: check # osi-mk base images ########################################################### ${WORKDIR}/base.raw: osi-mk.d/systemd-osi-shell.sh ${WORKDIR}/base.raw: rm -f -- '$@' '$@.tmp' mkdir -p -- '$(@D)' ./osi-mk \ --size=2G \ --package='base' \ $(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) \ '$@.tmp' mv -T -- '$@.tmp' '$@' ${WORKDIR}/build.raw: ${WORKDIR}/base.raw ${WORKDIR}/build.raw: osi-mk.d/libretools.sh ${WORKDIR}/build.raw: osi-mk.d/builddeps.sh ${WORKDIR}/build.raw: osi-mk.d/systemd-dhcpcd.sh ${WORKDIR}/build.raw: rm -f -- '$@' '$@.tmp' ./osi-mk \ --edit='$(filter %.raw,$^)' \ --size=3G \ $(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) \ '$@.tmp' ./osi-shell '$@.tmp' <<-'EOF' su testuser || exit set -e libreblacklist update sudo librechroot make EOF mv -T -- '$@.tmp' '$@' # build systemd ################################################################ # build systemd 232 ${WORKDIR}/build-232/build.raw: ${WORKDIR}/build.raw ${WORKDIR}/build-232/build.raw: osi-mk.d/testuser.sh ${WORKDIR}/build-232/build.raw: abs/systemd-232 $(wildcard abs/systemd-232/*) ${WORKDIR}/build-232/build.raw: | ${WORKDIR}/systemd.git ${WORKDIR}/build-232/build.raw: rm -f -- '$@' '$@.tmp' mkdir -p -- '$(@D)' ./osi-mk \ --edit='$(filter %.raw,$^)' \ --size=4G \ $(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) \ --directory='${WORKDIR}/systemd.git:/home/testuser/packages/srcdest/systemd' \ --directory='abs/systemd-232:/home/testuser/packages/abs/systemd' \ '$@.tmp' mv -T -- '$@.tmp' '$@' ${WORKDIR}/build-232/build.log: %/build.log: %/build.raw ./osi-shell '$<' <<-'EOF' |& tee '$@.tmp' su testuser || exit set -e cd ~/packages/abs/systemd sudo librechroot sync # on rebuild the downgrade in [repo] will confuse chcleanup sudo libremakepkg EOF mv -T -- '$@.tmp' '$@' touch -- '$@' # build the code under test ${WORKDIR}/build-$(COMMIT)/build.raw: ${WORKDIR}/build.raw ${WORKDIR}/build-$(COMMIT)/build.raw: osi-mk.d/testuser.sh ${WORKDIR}/build-$(COMMIT)/build.raw: abs/systemd $(wildcard abs/systemd/*) ${WORKDIR}/build-$(COMMIT)/build.raw: | ${WORKDIR}/systemd.git ${WORKDIR}/build-$(COMMIT)/build.raw: | ${WORKDIR}/.COMMIT.mk rm -f -- '$@' '$@.tmp' mkdir -p -- '$(@D)' ./osi-mk \ --edit='$(filter %.raw,$^)' \ --size=4G \ $(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) \ --directory='${WORKDIR}/systemd.git:/home/testuser/packages/srcdest/systemd' \ --directory='abs/systemd:/home/testuser/packages/abs/systemd' \ '$@.tmp' mv -T -- '$@.tmp' '$@' ${WORKDIR}/build-$(COMMIT)/build.log: %/build.log: %/build.raw ./osi-shell '$<' <<-'EOF' |& tee '$@.tmp' su testuser || exit set -e cd ~/packages/abs/systemd sed 's:@COMMIT@:${COMMIT}:' < PKGBUILD.in > PKGBUILD sudo libremakepkg EOF mv -T -- '$@.tmp' '$@' touch -- '$@' %/pkgdest: %/build.log rm -rf -- '$@' ./osi-extract '$*/build.raw' /home/testuser/packages/pkgdest '$@' test -d '$@' touch '$@' # tests ######################################################################## %/integration-tests.raw: %/build.raw %/build.log rm -f -- '$@' '$@.tmp' ./osi-mk \ --edit='$(filter %.raw,$^)' \ --size=10G \ --package=base-devel \ --package=qemu \ --package=net-tools \ --package=dhclient \ --package=strace \ '$@.tmp' ./osi-shell '$@.tmp' <<-'EOF' bsdtar xfO /home/testuser/packages/srcpkgdest/systemd-*.src.tar.gz systemd/.SRCINFO | sed -nE -e 's/^\s+(|make|check)depends(|_\S*) = //p' -e '/^\s*pkgname/q' | xargs pacman -S --needed --noconfirm -- EOF mv -T -- '$@.tmp' '$@' %/integration-tests.log: %/integration-tests.raw ./osi-shell '$<' <<-'EOF' |& tee '$@.tmp' set -e mkdir -p /build mount --bind /var/lib/archbuild/default/testuser/build /build export BUILD_DIR=/build/systemd/src/build export KERNEL_BIN=/boot/vmlinuz-linux-libre export INITRD=/boot/initramfs-linux-libre.img cd /build/systemd/src/systemd ./test/run-integration-tests.sh EOF mv -T -- '$@.tmp' '$@' touch -- '$@'