#!/usr/bin/make -f

DISABLE_UPDATE_UPLOADERS = 1
include /usr/share/gnome-pkg-tools/1/rules/uploaders.mk
include /usr/share/dpkg/default.mk
include /usr/share/dpkg/pkg-info.mk

built_binaries := $(shell dh_listpackages)
all_binaries := $(shell sed -ne 's/^Package: *//p' < debian/control)

# Ensure the build aborts when there are still references to undefined symbols
# currently fails at least in the im-multipress im module
#LDFLAGS += -Wl,-z,defs

# Make the linker work a bit harder so dynamic loading can be done faster
LDFLAGS += -Wl,-O1

APIVER := 4
# The library is packaged as though this is its SONAME version (which will
# be true for the GTK 4 stable release), to avoid going through the NEW
# queue a lot...
FAKE_SONAME := 0
# ... but while it's in development, the SONAME version is really this,
# changing with every upstream release
SONAME := 0.9600.0

LIBDIR := usr/lib/$(DEB_HOST_MULTIARCH)

# earliest version that this release has backwards binary compatibility for
GTK_BINARY_VERSION := 4.0.0

# Gtk binary version virtual Provide
GTK_BINVER_DEP := gtk$(APIVER)-binver-$(GTK_BINARY_VERSION), libgtk-$(APIVER)-$(SONAME)

# relative base directory for configuration
CONFDIR := etc/gtk-4.0

# relative base directory for all types of modules
MODULES_BASE_PATH := $(LIBDIR)/gtk-4.0/$(GTK_BINARY_VERSION)

# package names
SHARED_PKG := libgtk-$(APIVER)-$(FAKE_SONAME)
COMMON_PKG := libgtk-$(APIVER)-common
DEV_PKG := libgtk-$(APIVER)-dev
UDEB_PKG := $(SHARED_PKG)-udeb
DOC_PKG := libgtk-$(APIVER)-doc
BIN_PKG := libgtk-$(APIVER)-bin
EXAMPLES_PKG := gtk-$(APIVER)-examples

# files larger than 4k in size will be compressed by dh_compress
# so append a .gz suffix to avoid dangling symlinks
NEWS := NEWS$(shell find -maxdepth 1 -size +4k -name NEWS -exec echo ".gz" \;)
README.md := README.md$(shell find -maxdepth 1 -size +4k -name README.md -exec echo ".gz" \;)

# Avoid test failures on buildd environments
export HOME=$(CURDIR)/debian/build
export XDG_RUNTIME_DIR=$(HOME)
# So that gsettings can find the (uninstalled) gtk schemas
export XDG_DATA_DIRS=/usr/share:$(CURDIR)/debian/build
# Put these back to their defaults if we are not running with a clean
# environment, so that they are based on the temporary $HOME above
unexport XDG_CACHE_HOME
unexport XDG_CONFIG_DIRS
unexport XDG_CONFIG_HOME
unexport XDG_DATA_HOME
# Get failing tests' stdout/err so we have some information when a build fails
export VERBOSE=1

# macro computing the list of 'debian/<pkg>.*" files which have a
# corresponding ".in" file; pass the list of packages in $(1)
dh_subst_files = $(patsubst %.in,%,$(wildcard $(addprefix debian/, $(addsuffix *.in, $(1)))))

debian/%: debian/%.in
	dh_testdir
	sed \
		-e "s#@SONAME@#$(SONAME)#g" \
		-e "s#@APIVER@#$(APIVER)#g" \
		-e "s#@VERSION@#$(DEB_VERSION_UPSTREAM)#g" \
		-e "s#@GTK_BINVER_DEP@#$(GTK_BINVER_DEP)#g" \
		-e "s#@SHARED_PKG@#$(SHARED_PKG)#g" \
		-e "s#@COMMON_PKG@#$(COMMON_PKG)#g" \
		-e "s#@DEV_PKG@#$(DEV_PKG)#g" \
		-e "s#@UDEB_PKG@#$(UDEB_PKG)#g" \
		-e "s#@DOC_PKG@#$(DOC_PKG)#g" \
		-e "s#@BIN_PKG@#$(BIN_PKG)#g" \
		-e "s#@EXAMPLES_PKG@#$(EXAMPLES_PKG)#g" \
		-e "s#@GNOME_TEAM@#$(UPLOADERS)#g" \
		-e "s#@GTK_BINARY_VERSION@#$(GTK_BINARY_VERSION)#g" \
		-e "s#@LIBDIR@#$(LIBDIR)#g" \
		-e 's#@CONFDIR@#$(CONFDIR)#g' \
		-e "s#@MODULES_BASE_PATH@#$(MODULES_BASE_PATH)#g" \
		-e "s#@NEWS@#$(NEWS)#g" \
		-e "s#@README.md@#$(README.md)#g" \
		$@.in > $@

configure_flags_common = \
	--libdir=/$(LIBDIR) \
	${NULL}

configure_flags_deb = \
	-Dbroadway-backend=true \
	-Dx11-backend=true \
	-Ddocumentation=true \
	-Dman-pages=true \
	-Dintrospection=true \
	-Dinstall-tests=true \
	-Dprint-backends=all \
	-Dmedia=none

ifeq (,$(filter stage1,$(DEB_BUILD_PROFILES)))
configure_flags_deb += -Dcolord=yes
else
configure_flags_deb += -Dcolord=no
endif

ifeq (linux,$(DEB_HOST_ARCH_OS))
configure_flags_deb += -Dwayland-backend=true
else
configure_flags_deb += -Dwayland-backend=false
endif

configure_flags_udeb = \
	-Dbroadway-backend=false \
	-Dwayland-backend=false \
	-Dx11-backend=true \
	-Dintrospection=true \
	-Dprint-backends=none \
	-Dcolord=no \
	-Dmedia=none

%:
	dh $@ --with gir --buildsystem=meson

override_dh_clean: debian/control
	# gross kludge to force control generation with the %.in target
	touch debian/control.in
	rm -f $(call dh_subst_files,$(all_binaries))
	rm -rf debian/build debian/install
	dh_clean

# Add dependencies to generate files from the debian/*.in ones
override_dh_auto_build: $(call dh_subst_files,$(all_binaries))

override_dh_auto_configure: debian/control
	dh_auto_configure \
		--builddirectory=debian/build/deb \
		-- \
		$(configure_flags_common) \
		$(configure_flags_deb) \
		$(NULL)
ifneq ($(filter %-udeb,$(built_binaries)),)
	dh_auto_configure \
		--builddirectory=debian/build/udeb \
		-- \
		$(configure_flags_common) \
		$(configure_flags_udeb) \
		$(NULL)
endif

override_dh_auto_build:
	dh_auto_build --builddirectory=debian/build/deb
ifneq ($(filter %-udeb,$(built_binaries)),)
	dh_auto_build --builddirectory=debian/build/udeb
endif

override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	# Mark reftests with known failures as non-fatal
	#touch testsuite/reftests/nonresizable-size.ui.known_fail
	#touch testsuite/reftests/window-show-contents-on-map.ui.known_fail
	#touch testsuite/reftests/inherit-and-initial.ui.known_fail
	#touch testsuite/reftests/textview-margins.ui.known_fail
	# So that gsettings can find the (uninstalled) gtk schemas
	mkdir -p debian/build/glib-2.0/schemas/
	cp gtk/org.gtk.* debian/build/glib-2.0/schemas/
	glib-compile-schemas debian/build/glib-2.0/schemas/
	# Remove LD_PRELOAD so we don't run with fakeroot, which makes dbus-related tests fail
	env -u LD_PRELOAD \
	xvfb-run -a -s "-screen 0 1024x768x24" \
	dh_auto_test --builddirectory=debian/build/deb -- -k 0 -j 1 || true
endif

override_dh_auto_install:
	dh_auto_install --builddirectory=debian/build/deb --destdir=debian/install/deb
ifneq ($(filter %-udeb,$(built_binaries)),)
	dh_auto_install --builddirectory=debian/build/udeb --destdir=debian/install/udeb
endif

override_dh_install:
	rm -fv debian/install/udeb/usr/bin/gtk4-update-icon-cache
	rm -frv debian/install/udeb/usr/share/metainfo
	dh_install -p$(UDEB_PKG) --sourcedir=debian/install/udeb
	dh_install --remaining-packages --sourcedir=debian/install/deb

override_dh_missing:
ifneq ($(filter %-udeb,$(built_binaries)),)
	dh_missing --sourcedir=debian/install/udeb --list-missing -X.la
endif
	dh_missing --sourcedir=debian/install/deb --fail-missing -X.la

override_dh_installdocs:
	dh_installdocs -p$(COMMON_PKG) AUTHORS README.md NEWS
	dh_installdocs -p$(DOC_PKG) AUTHORS -X.in
	dh_installdocs --remaining-packages

override_dh_makeshlibs:
	dh_makeshlibs -p$(SHARED_PKG) -V --add-udeb=$(UDEB_PKG) -X$(MODULES_BASE_PATH) -- -c4
	dh_makeshlibs --remaining-packages -X$(MODULES_BASE_PATH)
