169 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Makefile
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Makefile
		
	
	
		
			Executable File
		
	
	
#!/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 -- '$<' -m 1024 <<-'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-fallback.img
 | 
						|
		cd /build/systemd/src/systemd
 | 
						|
		./test/run-integration-tests.sh </dev/null
 | 
						|
		EOF
 | 
						|
	mv -T -- '$@.tmp' '$@'
 | 
						|
	touch -- '$@'
 |