#!/usr/bin/make -f

export DEB_BUILD_MAINT_OPTIONS = hardening=+bindnow

built_binaries := $(shell dh_listpackages)

include /usr/share/dpkg/default.mk

export SDL_AUDIO_DRIVER=dummy
export SDL_VIDEO_DRIVER=dummy

# Upstream test timeouts assume a gaming-capable system.
# Keep the timeout reasonably short for architectures where interactive
# debugging is more likely, but extend it a lot on architectures that might
# be very slow or using qemu for buildds.
ifneq ($(filter amd64 i386,$(DEB_HOST_ARCH)),)
test_timeout_multiplier = 3
else
test_timeout_multiplier = 20
endif

confflags = \
	-DCMAKE_BUILD_RPATH_USE_ORIGIN=ON \
	-DSDL_ALSA_SHARED=OFF \
	-DSDL_DEPS_SHARED=OFF \
	-DSDL_EXAMPLES=ON \
	-DSDL_HIDAPI_LIBUSB_SHARED=OFF \
	-DSDL_JACK=OFF \
	-DSDL_JACK_SHARED=OFF \
	-DSDL_KMSDRM_SHARED=OFF \
	-DSDL_OSS=OFF \
	-DSDL_PULSEAUDIO_SHARED=OFF \
	-DSDL_RPATH=OFF \
	-DSDL_RPI=OFF \
	-DSDL_SHARED=ON \
	-DSDL_SNDIO_SHARED=ON \
	-DSDL_STATIC=ON \
	-DSDL_STATIC_PIC=ON \
	-DSDL_TESTS=ON \
	-DSDL_TESTS_TIMEOUT_MULTIPLIER=$(test_timeout_multiplier) \
	-DSDL_TEST_LIBRARY=ON \
	-DSDL_VENDOR_INFO="${DEB_VENDOR} ${DEB_VERSION}" \
	-DSDL_VIVANTE=OFF \
	-DSDL_X11=ON \
	-DSDL_X11_SHARED=OFF \
	-DSDLTEST_TIMEOUT_MULTIPLIER=$(test_timeout_multiplier) \
	$(NULL)

ifneq ($(filter %-tests,$(built_binaries)),)
  confflags += -DSDL_INSTALL_EXAMPLES=ON
  confflags += -DSDL_INSTALL_TESTS=ON
endif

ifeq ($(filter %-doc,$(built_binaries)),)
  confflags += -DSDL_INSTALL_DOCS=OFF
else
  confflags += -DSDL_INSTALL_DOCS=ON
endif

ifeq ($(DEB_HOST_ARCH_CPU),powerpc)
  confflags += -DSDL_ALTIVEC=OFF
endif

ifeq ($(DEB_HOST_ARCH_CPU),ppc64el)
  confflags += -DSDL_ALTIVEC=OFF
endif

ifeq ($(DEB_HOST_ARCH_OS),linux)
  confflags += -DSDL_PIPEWIRE_SHARED=ON
  confflags += -DSDL_WAYLAND=ON
  confflags += -DSDL_WAYLAND_LIBDECOR_SHARED=OFF
  confflags += -DSDL_WAYLAND_SHARED=OFF
else
  confflags += -DSDL_WAYLAND=OFF
endif

ifeq ($(DEB_VERSION_UPSTREAM),3.3~git20250930~fd4c2f8+ds)
  # git describe --tags <hash>
  confflags += -DSDL_REVISION=release-3.2.6-1342-gfd4c2f8cfd
endif

%:
	dh $@ -Scmake+ninja -Bbuild

override_dh_auto_configure:
	set -e; for bmp in test/icon.bmp test/gamepad_*.bmp test/glass.bmp; do \
		python3 cmake/xxd.py -i "$${bmp}" -o "$${bmp%.bmp}.h"; \
	done
	cd build-scripts && ./makecasefoldhashtable.pl > ../src/stdlib/SDL_casefolding.h
	debian/build-shaders.sh
	# This is intended as a Windows batch file, but at the time of writing
	# it's so simple that it's also a valid shell script
	cd src/render/vulkan && sh -ex ./compile_shaders.bat
	cd test/testgpu && OSTYPE=$(DEB_HOST_ARCH_OS) bash -ex ./build-shaders.sh
	cp debian/placeholders/testgpu_*.h test/testgpu/
	dh_auto_configure -- $(confflags)

execute_after_dh_auto_build:
ifneq ($(filter %-doc,$(built_binaries)),)
	sed -e 's/FULL_PATH_NAMES *=.*/FULL_PATH_NAMES = NO/' < docs/doxyfile > debian/Doxyfile
	cd docs && doxygen ../debian/Doxyfile
	# useless files
	find docs/output -name "*.md5" -delete
	find docs/output -type d -empty -delete
endif

# Only run testtimer as an autopkgtest on machines that we're reasonably
# sure are both fast and set up to be usable for interactive use
# (currently only x86 and 64-bit ARM).
# There is an assertion that requesting a 1ms delay does not result in
# a delay of more than 100ms, and that's not going to be reliably true
# on slow machines like riscv64 or batch-processing-oriented machines
# like s390x.
ifeq (,$(filter amd64 arm64 i386,$(DEB_HOST_ARCH)))
execute_after_dh_auto_install:
	rm -fv debian/tmp/usr/share/installed-tests/SDL3/testtimer.test
endif

execute_after_dh_auto_clean-indep:
	rm -f debian/Doxyfile
	rm -rf docs/output

# debhelper >= 13.4 makes all of /usr/libexec executable, which is not
# quite right for installed-tests
override_dh_fixperms:
	dh_fixperms -Xusr/libexec/installed-examples -Xusr/libexec/installed-tests
ifneq ($(filter %-tests,$(built_binaries)),)
	chmod --recursive --changes a+rX,u+w,og-w debian/libsdl3-tests/usr/libexec/installed-examples
	chmod --recursive --changes a+rX,u+w,og-w debian/libsdl3-tests/usr/libexec/installed-tests
endif

override_dh_installchangelogs:
	dh_installchangelogs -- WhatsNew.txt
