#!/usr/bin/make -f

include /usr/share/dpkg/default.mk

# Build-depends to exclude from built-using field
IGNORE_DEPENDS=debhelper-compat python3-apt dosfstools mtools

BUILD_DEPENDS=$(shell python3 -c 'import apt_pkg; print(" ".join([i[0][0] for i in apt_pkg.parse_src_depends(next(apt_pkg.TagFile("debian/control"))["Build-Depends"], architecture="$(DEB_HOST_ARCH)")]))')
BUILT_USING=$(shell dpkg-query -f '$${source:Package} (= $${source:Version}), \n' -W $(filter-out $(IGNORE_DEPENDS), $(BUILD_DEPENDS)) | sort -u)
override_dh_gencontrol:
	dh_gencontrol -- -VBuilt-Using="$(BUILT_USING)"

%:
	dh $@

override_dh_clean:
	rm -rf tree xorriso-cmd.txt
	dh_clean

# The below is basically encoding things, in a reproducible manner that
# grub-mkrescue --verbose -o foo.iso &>foo.log does
override_dh_auto_build:
	rm -rf tree

	# Copy font
	mkdir -p tree/boot/grub/fonts
	cp /usr/share/grub/unicode.pf2 tree/boot/grub/fonts/unicode.pf2

ifeq ($(DEB_HOST_ARCH), ppc64el)
	# this is a bootable iso
	mkdir -p tree/ppc
	cp -p /usr/lib/grub/powerpc-ieee1275/bootinfo.txt tree/ppc
	# this is what we boot
	mkdir -p tree/boot/grub/powerpc-ieee1275
	grub-mkimage --directory '/usr/lib/grub/powerpc-ieee1275' --prefix '()/boot/grub' --output 'tree/boot/grub/powerpc.elf' --format 'powerpc-ieee1275' --compression 'auto' linux minicmd normal reboot iso9660
	# Copy modules
	cp -r /usr/lib/grub/powerpc-ieee1275/*.mod tree/boot/grub/powerpc-ieee1275
	cp -r /usr/lib/grub/powerpc-ieee1275/*.lst tree/boot/grub/powerpc-ieee1275
	# And that's it
	echo 'xorriso -as mkisofs --protective-msdos-label -r tree' > xorriso-cmd.txt
endif
ifeq ($(DEB_HOST_ARCH), amd64)
	mkdir -p tree/efi/boot/
	# signed shim is our default bootx64.efi
	cp /usr/lib/shim/shimx64.efi.signed tree/efi/boot/bootx64.efi
	# mok-manager just in case
	cp /usr/lib/shim/mmx64.efi tree/efi/boot/mmx64.efi
	# signed grub build for CD-ROM is the grub envoked by shim
	cp /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed tree/efi/boot/grubx64.efi
	# Create partition with 1MB to spare, for README.txt / autoinstall.yaml, etc.
	mkfs.msdos -n ESP -C -v tree/efi.img $$(( $$(du -s --apparent-size --block-size=1024 tree/efi/ | cut -f 1 ) + 1024))
	mcopy -s -i tree/efi.img tree/efi ::/.
	rm -rf tree/efi

	# Copy bios modules
	mkdir -p tree/boot/grub/i386-pc
	cp -r /usr/lib/grub/i386-pc/*.mod tree/boot/grub/i386-pc
	cp -r /usr/lib/grub/i386-pc/*.lst tree/boot/grub/i386-pc
	cp -r /usr/lib/grub/i386-pc/*.o tree/boot/grub/i386-pc

	# All efi modules are built-in

	# Generate eltorito image
	grub-mkimage --verbose --directory '/usr/lib/grub/i386-pc' --prefix '/boot/grub' --output 'tree/boot/grub/i386-pc/eltorito.img' --format 'i386-pc-eltorito' --compression 'auto' biosdisk iso9660
	# Copy hybrid image (can be outside of the tree, but meh)
	cp /usr/lib/grub/i386-pc/boot_hybrid.img tree/boot/grub/i386-pc/boot_hybrid.img

	echo 'xorriso -as mkisofs -b boot/grub/i386-pc/eltorito.img -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info --grub2-mbr tree/boot/grub/i386-pc/boot_hybrid.img --efi-boot efi.img -efi-boot-part --efi-boot-image --protective-msdos-label -r tree' > xorriso-cmd.txt
endif
ifeq ($(DEB_HOST_ARCH), arm64)
	mkdir -p tree/efi/boot/
	# shim is broken, just use grub
	cp /usr/lib/grub/arm64-efi-signed/gcdaa64.efi.signed tree/efi/boot/bootaa64.efi

	# Create partition with 1MB to spare, for README.txt / autoinstall.yaml, etc.
	mkfs.msdos -n ESP -C -v tree/efi.img $$(( $$(du -s --apparent-size --block-size=1024 tree/efi/ | cut -f 1 ) + 1024))
	mcopy -s -i tree/efi.img tree/efi ::/.
	rm -rf tree/efi

	echo 'xorriso -as mkisofs --efi-boot efi.img -efi-boot-part --efi-boot-image --protective-msdos-label -r tree' > xorriso-cmd.txt
endif
