>From 0d0a1fb9a20631f3f4475f54ada2420034c77324 Mon Sep 17 00:00:00 2001
From: Nicolas Boulenguez <nicolas@debian.org>
Date: Tue, 24 Feb 2026 14:11:54 +0100
Subject: [PATCH 7/9] Simplify debian/rules

Instal mk_modmap with a debhelper configuration file.

When debian/rules install files by itself, select the right place
directly instead of moving some later.

Export build flags and tools instead of setting them manually for the
compilations not using ./configure.

Build out of the source tree.  This simplifies the clean target, but
also makes it possible to build twice in a row (for deb and udeb).

I assume '-Os -g' was intending '-Os $(filter-out -O%,$(CFLAGS))'.
Set this during configuration instead of duplicating the setting for
each Make.

Delegate as much as possible to dh_install.
---
 debian/kbd.install |  1 +
 debian/rules       | 97 ++++++++++++++++++++--------------------------
 2 files changed, 44 insertions(+), 54 deletions(-)
 create mode 100644 debian/kbd.install

diff --git a/debian/kbd.install b/debian/kbd.install
new file mode 100644
index 0000000..19789ae
--- /dev/null
+++ b/debian/kbd.install
@@ -0,0 +1 @@
+data/keymaps/i386/mk_modmap             usr/bin
diff --git a/debian/rules b/debian/rules
index 684a0b0..768319d 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,85 +1,74 @@
 #!/usr/bin/make -f
 
-TOPDIR = $(shell pwd)
-KBD = $(TOPDIR)/debian/kbd
-KBD_DOC = $(KBD)/usr/share/doc/kbd
-KBD_UDEB = $(TOPDIR)/debian/kbd-udeb
+KBD = '$(CURDIR)'/debian/kbd
 
 # build these twice, once optimized for size (for kbd-udeb)
 UDEB_BINARIES = loadkeys kbd_mode setfont
 
 # non-standard binaries to build
-EXTRA_BINARIES = screendump setlogcons setvesablank
-CONTRIB_BINARIES = codepage splitfont vcstime
+EXTRA_BINARIES_bin = screendump setlogcons
+EXTRA_BINARIES_sbin = setvesablank
+EXTRA_BINARIES = $(EXTRA_BINARIES_bin) $(EXTRA_BINARIES_sbin)
+CONTRIB_BINARIES_bin = codepage splitfont
+CONTRIB_BINARIES_sbin = vcstime
+CONTRIB_BINARIES = $(CONTRIB_BINARIES_bin) $(CONTRIB_BINARIES_sbin)
 
 # we don’t want these in /usr/bin
-MOVE_TO_USR_SBIN = vcstime setvesablank kbdrate
+MOVE_TO_USR_SBIN = kbdrate
 
-include /usr/share/dpkg/architecture.mk
-
-ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
-	CROSS := CC=$(DEB_HOST_GNU_TYPE)-gcc
-endif
+# Export because contrib/ has no autoconf stuff.
+DPKG_EXPORT_BUILDFLAGS := 1
+DPKG_EXPORT_BUILDTOOLS := 1
+include /usr/share/dpkg/buildflags.mk
+include /usr/share/dpkg/buildtools.mk
 
 %:
 	dh $@
 
 override_dh_auto_clean:
-	dh_auto_clean
-	[ ! -f Makefile ] || $(MAKE) clean
-	cd src/ && rm -f $(EXTRA_BINARIES) *-udeb
-	cd contrib/ && rm -f $(CONTRIB_BINARIES)
-	rm -f po/gr.po			# replaced by el.po
-	# cleanup modified or leftover files from previous build
-	! test -p tests/testsuite.dir/at-job-fifo || rm -f tests/testsuite.dir/at-job-fifo
-	rm -f po/*.gmo po/stamp-po
-	# force rebuilding of generated code
-	rm -f src/libkeymap/analyze.h src/libkeymap/analyze.c
+	rm -fr bld/
 
+conf_args := --enable-nls --disable-libkeymap --disable-vlock
 override_dh_auto_configure:
-	dh_auto_configure -- \
-		--enable-nls \
-		--disable-libkeymap \
-		--disable-vlock
+ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
+	CFLAGS='-Os $(filter-out -O%,$(CFLAGS))' \
+	dh_auto_configure -Bbld/udeb -- $(conf_args)
+endif
+	dh_auto_configure -Bbld/deb -- $(conf_args)
 
 override_dh_auto_build:
 ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
-	$(MAKE) -C src/libkeymap CFLAGS="-Os -g" analyze.h
-	$(MAKE) -C src/libcommon CFLAGS="-Os -g"
-	$(MAKE) -C src/libkbdfile CFLAGS="-Os -g"
-	$(MAKE) -C src/libkeymap CFLAGS="-Os -g"
-	$(MAKE) -C src/libkfont CFLAGS="-Os -g"
-	$(MAKE) -C src/ CFLAGS="-Os -g" $(UDEB_BINARIES)
-	cd src/ && for ITEM in $(UDEB_BINARIES); do mv $$ITEM $$ITEM-udeb; done
-	$(MAKE) -C src/libkeymap clean
-	$(MAKE) -C src/libcommon clean
-	$(MAKE) -C src/libkbdfile clean
-	$(MAKE) -C src/libkfont clean
-	$(MAKE) -C src/ clean
+	$(MAKE) -Cbld/udeb/src/libkeymap analyze.h
+	$(MAKE) -Cbld/udeb/src/libcommon
+	$(MAKE) -Cbld/udeb/src/libkbdfile
+	$(MAKE) -Cbld/udeb/src/libkeymap
+	$(MAKE) -Cbld/udeb/src/libkfont
+	$(MAKE) -Cbld/udeb/src $(UDEB_BINARIES)
 endif
-	$(MAKE)
-	$(MAKE) -C src/ $(EXTRA_BINARIES)
-	$(MAKE) $(CROSS) CFLAGS="-O2 -g" -C contrib/ $(CONTRIB_BINARIES)
+	$(MAKE) -Cbld/deb
+	$(MAKE) -Cbld/deb/src $(EXTRA_BINARIES)
+# No Makefile, but flags and tools are in the environment.
+	$(MAKE) -Cbld VPATH=../contrib $(CONTRIB_BINARIES)
+
+override_dh_auto_test:
+	dh_auto_test -Bbld/deb
 
 override_dh_auto_install:
 # the kbd “core”
-	$(MAKE) DESTDIR=$(KBD) install-exec
-	$(MAKE) DESTDIR=$(KBD) -C po/ install
-	$(MAKE) DESTDIR=$(KBD) -C docs/man/ install
+	$(MAKE) DESTDIR=$(KBD) -C bld/deb/ install-exec
+	$(MAKE) DESTDIR=$(KBD) -C bld/deb/po/ install
+	$(MAKE) DESTDIR=$(KBD) -C bld/deb/docs/man/ install
 # some additional utilities
-	install -m755 $(addprefix src/,$(EXTRA_BINARIES)) $(KBD)/usr/bin/
-	install -m755 $(addprefix contrib/,$(CONTRIB_BINARIES)) $(KBD)/usr/bin/
-	install -m755 data/keymaps/i386/mk_modmap $(KBD)/usr/bin
+	dh_install -pkbd $(EXTRA_BINARIES_bin:%=bld/deb/src/%) \
+	  $(CONTRIB_BINARIES_bin:%=bld/%) usr/bin
+	dh_install -pkbd $(EXTRA_BINARIES_sbin:%=bld/deb/src/%) \
+	  $(CONTRIB_BINARIES_sbin:%=bld/%) usr/sbin
 # move everything where it belongs
 	mv $(addprefix debian/kbd/usr/bin/,$(MOVE_TO_USR_SBIN)) $(KBD)/usr/sbin/
 # prepare udeb
-ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
-	for ITEM in $(UDEB_BINARIES); do install -D -m755 src/$$ITEM-udeb $(KBD_UDEB)/usr/bin/$$ITEM; done
-endif
+	dh_install -pkbd-udeb $(UDEB_BINARIES:%=bld/udeb/src/%) usr/bin
 # drop libtool files
 	find $(KBD) -name '*.la' -delete
 
-override_dh_installdocs:
-	dh_installdocs
-	install -d $(KBD_DOC)/charsets
-	cp docs/doc/iso8859.info docs/doc/iso*.txt docs/doc/cp*.txt $(KBD_DOC)/charsets
+	dh_install -pkbd docs/doc/iso8859.info docs/doc/iso*.txt \
+	  docs/doc/cp*.txt usr/share/doc/kbd/charsets
-- 
2.47.3

