The attached version fixes the spacing issue in tests with a more readable trick, splits the changes inside tests into small chunks, replaces - with _ in Make variable names, avoids non portable -r -E sed options.
Without -r, sed in {buildflags,pkg-info}.mk should cause no regression. It has been present in pkg-info.mk since 2011.
>From 5b3d75fb604dae497406f19073d03ea094da8d07 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:41:42 +0200 Subject: [PATCH 01/10] scripts/t/mk/buildflags.mk: fix test of _MAINT_APPEND when TEST_ is empty When TEST_CPPFLAGS is empty, the right hand side of the comparison starts with a space character. --- scripts/t/mk/buildflags.mk | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/t/mk/buildflags.mk b/scripts/t/mk/buildflags.mk index 94d85a7e0..7cf798f73 100644 --- a/scripts/t/mk/buildflags.mk +++ b/scripts/t/mk/buildflags.mk @@ -1,5 +1,8 @@ DEB_CPPFLAGS_MAINT_APPEND = -DTEST_MK=test-host +TEST_CPPFLAGS += -DTEST_MK=test-host + DEB_CPPFLAGS_FOR_BUILD_MAINT_APPEND = -DTEST_MK=test-build +TEST_CPPFLAGS_FOR_BUILD += -DTEST_MK=test-build include $(srcdir)/mk/buildflags.mk @@ -8,8 +11,8 @@ test: test "$(ASFLAGS_FOR_BUILD)" = "$(TEST_ASFLAGS_FOR_BUILD)" test "$(CFLAGS)" = "$(TEST_CFLAGS)" test "$(CFLAGS_FOR_BUILD)" = "$(TEST_CFLAGS_FOR_BUILD)" - test "$(CPPFLAGS)" = "$(TEST_CPPFLAGS) -DTEST_MK=test-host" - test "$(CPPFLAGS_FOR_BUILD)" = "$(TEST_CPPFLAGS_FOR_BUILD)-DTEST_MK=test-build" + test "$(CPPFLAGS)" = "$(TEST_CPPFLAGS)" + test "$(CPPFLAGS_FOR_BUILD)" = "$(TEST_CXXFLAGS_FOR_BUILD)" test "$(CXXFLAGS)" = "$(TEST_CXXFLAGS)" test "$(CXXFLAGS_FOR_BUILD)" = "$(TEST_CXXFLAGS_FOR_BUILD)" test "$(DFLAGS)" = "$(TEST_DFLAGS)" -- 2.39.2
>From 53aeebafeb2af84369df3b7d81ff1cbcc1e13a9d Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:09:43 +0200 Subject: [PATCH 02/10] scripts/t/mk: use loops instead of repetitions --- scripts/t/mk/architecture.mk | 54 +++++++++++++----------------------- scripts/t/mk/buildflags.mk | 39 ++++++++++++-------------- scripts/t/mk/buildtools.mk | 54 +++++++++++++++--------------------- 3 files changed, 61 insertions(+), 86 deletions(-) diff --git a/scripts/t/mk/architecture.mk b/scripts/t/mk/architecture.mk index 2ac0222ca..b146f34b7 100644 --- a/scripts/t/mk/architecture.mk +++ b/scripts/t/mk/architecture.mk @@ -1,36 +1,22 @@ include $(srcdir)/mk/architecture.mk -test: - test "$(DEB_BUILD_ARCH)" = "$(TEST_DEB_BUILD_ARCH)" - test "$(DEB_BUILD_ARCH_ABI)" = "$(TEST_DEB_BUILD_ARCH_ABI)" - test "$(DEB_BUILD_ARCH_BITS)" = "$(TEST_DEB_BUILD_ARCH_BITS)" - test "$(DEB_BUILD_ARCH_CPU)" = "$(TEST_DEB_BUILD_ARCH_CPU)" - test "$(DEB_BUILD_ARCH_ENDIAN)" = "$(TEST_DEB_BUILD_ARCH_ENDIAN)" - test "$(DEB_BUILD_ARCH_LIBC)" = "$(TEST_DEB_BUILD_ARCH_LIBC)" - test "$(DEB_BUILD_ARCH_OS)" = "$(TEST_DEB_BUILD_ARCH_OS)" - test "$(DEB_BUILD_GNU_CPU)" = "$(TEST_DEB_BUILD_GNU_CPU)" - test "$(DEB_BUILD_GNU_SYSTEM)" = "$(TEST_DEB_BUILD_GNU_SYSTEM)" - test "$(DEB_BUILD_GNU_TYPE)" = "$(TEST_DEB_BUILD_GNU_TYPE)" - test "$(DEB_BUILD_MULTIARCH)" = "$(TEST_DEB_BUILD_MULTIARCH)" - test "$(DEB_HOST_ARCH)" = "$(TEST_DEB_HOST_ARCH)" - test "$(DEB_HOST_ARCH_ABI)" = "$(TEST_DEB_HOST_ARCH_ABI)" - test "$(DEB_HOST_ARCH_BITS)" = "$(TEST_DEB_HOST_ARCH_BITS)" - test "$(DEB_HOST_ARCH_CPU)" = "$(TEST_DEB_HOST_ARCH_CPU)" - test "$(DEB_HOST_ARCH_ENDIAN)" = "$(TEST_DEB_HOST_ARCH_ENDIAN)" - test "$(DEB_HOST_ARCH_LIBC)" = "$(TEST_DEB_HOST_ARCH_LIBC)" - test "$(DEB_HOST_ARCH_OS)" = "$(TEST_DEB_HOST_ARCH_OS)" - test "$(DEB_HOST_GNU_CPU)" = "$(TEST_DEB_HOST_GNU_CPU)" - test "$(DEB_HOST_GNU_SYSTEM)" = "$(TEST_DEB_HOST_GNU_SYSTEM)" - test "$(DEB_HOST_GNU_TYPE)" = "$(TEST_DEB_HOST_GNU_TYPE)" - test "$(DEB_HOST_MULTIARCH)" = "$(TEST_DEB_HOST_MULTIARCH)" - test "$(DEB_TARGET_ARCH)" = "$(TEST_DEB_TARGET_ARCH)" - test "$(DEB_TARGET_ARCH_ABI)" = "$(TEST_DEB_TARGET_ARCH_ABI)" - test "$(DEB_TARGET_ARCH_BITS)" = "$(TEST_DEB_TARGET_ARCH_BITS)" - test "$(DEB_TARGET_ARCH_CPU)" = "$(TEST_DEB_TARGET_ARCH_CPU)" - test "$(DEB_TARGET_ARCH_ENDIAN)" = "$(TEST_DEB_TARGET_ARCH_ENDIAN)" - test "$(DEB_TARGET_ARCH_LIBC)" = "$(TEST_DEB_TARGET_ARCH_LIBC)" - test "$(DEB_TARGET_ARCH_OS)" = "$(TEST_DEB_TARGET_ARCH_OS)" - test "$(DEB_TARGET_GNU_CPU)" = "$(TEST_DEB_TARGET_GNU_CPU)" - test "$(DEB_TARGET_GNU_SYSTEM)" = "$(TEST_DEB_TARGET_GNU_SYSTEM)" - test "$(DEB_TARGET_GNU_TYPE)" = "$(TEST_DEB_TARGET_GNU_TYPE)" - test "$(DEB_TARGET_MULTIARCH)" = "$(TEST_DEB_TARGET_MULTIARCH)" +vars := \ + ARCH \ + ARCH_ABI \ + ARCH_BITS \ + ARCH_CPU \ + ARCH_ENDIAN \ + ARCH_LIBC \ + ARCH_OS \ + GNU_CPU \ + GNU_SYSTEM \ + GNU_TYPE \ + MULTIARCH \ + # EOL +loop_targets := $(foreach machine,BUILD HOST TARGET,$(foreach var,$(vars),\ + DEB_$(machine)_$(var))) + +test: $(loop_targets) + +$(loop_targets): + test "$($@)" = "$(TEST_$@)" diff --git a/scripts/t/mk/buildflags.mk b/scripts/t/mk/buildflags.mk index 7cf798f73..3289a7557 100644 --- a/scripts/t/mk/buildflags.mk +++ b/scripts/t/mk/buildflags.mk @@ -6,24 +6,21 @@ TEST_CPPFLAGS_FOR_BUILD += -DTEST_MK=test-build include $(srcdir)/mk/buildflags.mk -test: - test "$(ASFLAGS)" = "$(TEST_ASFLAGS)" - test "$(ASFLAGS_FOR_BUILD)" = "$(TEST_ASFLAGS_FOR_BUILD)" - test "$(CFLAGS)" = "$(TEST_CFLAGS)" - test "$(CFLAGS_FOR_BUILD)" = "$(TEST_CFLAGS_FOR_BUILD)" - test "$(CPPFLAGS)" = "$(TEST_CPPFLAGS)" - test "$(CPPFLAGS_FOR_BUILD)" = "$(TEST_CXXFLAGS_FOR_BUILD)" - test "$(CXXFLAGS)" = "$(TEST_CXXFLAGS)" - test "$(CXXFLAGS_FOR_BUILD)" = "$(TEST_CXXFLAGS_FOR_BUILD)" - test "$(DFLAGS)" = "$(TEST_DFLAGS)" - test "$(DFLAGS_FOR_BUILD)" = "$(TEST_DFLAGS_FOR_BUILD)" - test "$(FCFLAGS)" = "$(TEST_FCFLAGS)" - test "$(FCFLAGS_FOR_BUILD)" = "$(TEST_FCFLAGS_FOR_BUILD)" - test "$(FFLAGS)" = "$(TEST_FFLAGS)" - test "$(FFLAGS_FOR_BUILD)" = "$(TEST_FFLAGS_FOR_BUILD)" - test "$(LDFLAGS)" = "$(TEST_LDFLAGS)" - test "$(LDFLAGS_FOR_BUILD)" = "$(TEST_LDFLAGS_FOR_BUILD)" - test "$(OBJCFLAGS)" = "$(TEST_OBJCFLAGS)" - test "$(OBJCFLAGS_FOR_BUILD)" = "$(TEST_OBJCFLAGS_FOR_BUILD)" - test "$(OBJCXXFLAGS)" = "$(TEST_OBJCXXFLAGS)" - test "$(OBJCXXFLAGS_FOR_BUILD)" = "$(TEST_OBJCXXFLAGS_FOR_BUILD)" +vars := \ + ASFLAGS \ + CFLAGS \ + CPPFLAGS \ + CXXFLAGS \ + DFLAGS \ + FCFLAGS \ + FFLAGS \ + LDFLAGS \ + OBJCFLAGS \ + OBJCXXFLAGS \ + # EOL +loop_targets := $(vars) $(vars:=_FOR_BUILD) + +test: $(loop_targets) + +$(loop_targets): + test "$($@)" = "$(TEST_$@)" diff --git a/scripts/t/mk/buildtools.mk b/scripts/t/mk/buildtools.mk index 6c27c5cf2..c104ef62e 100644 --- a/scripts/t/mk/buildtools.mk +++ b/scripts/t/mk/buildtools.mk @@ -1,33 +1,25 @@ include $(srcdir)/mk/buildtools.mk -test: - test "$(AS)" = "$(TEST_AS)" - test "$(AS_FOR_BUILD)" = "$(TEST_AS_FOR_BUILD)" - test "$(CC)" = "$(TEST_CC)" - test "$(CC_FOR_BUILD)" = "$(TEST_CC_FOR_BUILD)" - test "$(CXX)" = "$(TEST_CXX)" - test "$(CXX_FOR_BUILD)" = "$(TEST_CXX_FOR_BUILD)" - test "$(OBJC)" = "$(TEST_OBJC)" - test "$(OBJC_FOR_BUILD)" = "$(TEST_OBJC_FOR_BUILD)" - test "$(OBJCXX)" = "$(TEST_OBJCXX)" - test "$(OBJCXX_FOR_BUILD)" = "$(TEST_OBJCXX_FOR_BUILD)" - test "$(F77)" = "$(TEST_F77)" - test "$(F77_FOR_BUILD)" = "$(TEST_F77_FOR_BUILD)" - test "$(FC)" = "$(TEST_FC)" - test "$(FC_FOR_BUILD)" = "$(TEST_FC_FOR_BUILD)" - test "$(LD)" = "$(TEST_LD)" - test "$(LD_FOR_BUILD)" = "$(TEST_LD_FOR_BUILD)" - test "$(STRIP)" = "$(TEST_STRIP)" - test "$(STRIP_FOR_BUILD)" = "$(TEST_STRIP_FOR_BUILD)" - test "$(OBJCOPY)" = "$(TEST_OBJCOPY)" - test "$(OBJCOPY_FOR_BUILD)" = "$(TEST_OBJCOPY_FOR_BUILD)" - test "$(OBJDUMP)" = "$(TEST_OBJDUMP)" - test "$(OBJDUMP_FOR_BUILD)" = "$(TEST_OBJDUMP_FOR_BUILD)" - test "$(NM)" = "$(TEST_NM)" - test "$(NM_FOR_BUILD)" = "$(TEST_NM_FOR_BUILD)" - test "$(AR)" = "$(TEST_AR)" - test "$(AR_FOR_BUILD)" = "$(TEST_AR_FOR_BUILD)" - test "$(RANLIB)" = "$(TEST_RANLIB)" - test "$(RANLIB_FOR_BUILD)" = "$(TEST_RANLIB_FOR_BUILD)" - test "$(PKG_CONFIG)" = "$(TEST_PKG_CONFIG)" - test "$(PKG_CONFIG_FOR_BUILD)" = "$(TEST_PKG_CONFIG_FOR_BUILD)" +tools := \ + AR \ + AS \ + CC \ + CXX \ + F77 \ + FC \ + LD \ + NM \ + OBJC \ + OBJCOPY \ + OBJCXX \ + OBJDUMP \ + PKG_CONFIG \ + RANLIB \ + STRIP \ + # EOL +loop_targets := $(tools) $(tools:=_FOR_BUILD) + +test: $(loop_targets) + +$(loop_targets): + test "$($@)" = "$(TEST_$@)" -- 2.39.2
>From 13e165388b6f9fe70252adbb4a2ee0cf5ccdbb86 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:27:16 +0200 Subject: [PATCH 03/10] scripts/t/mk: replace double quotes with single quote in shell recipes This escapes more characters for the shell, and makes the intent of the dollar character more explicit. --- scripts/t/mk/architecture.mk | 2 +- scripts/t/mk/buildflags.mk | 2 +- scripts/t/mk/buildtools.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/t/mk/architecture.mk b/scripts/t/mk/architecture.mk index b146f34b7..b181d3426 100644 --- a/scripts/t/mk/architecture.mk +++ b/scripts/t/mk/architecture.mk @@ -19,4 +19,4 @@ loop_targets := $(foreach machine,BUILD HOST TARGET,$(foreach var,$(vars),\ test: $(loop_targets) $(loop_targets): - test "$($@)" = "$(TEST_$@)" + test '$($@)' = '$(TEST_$@)' diff --git a/scripts/t/mk/buildflags.mk b/scripts/t/mk/buildflags.mk index 3289a7557..042ba816f 100644 --- a/scripts/t/mk/buildflags.mk +++ b/scripts/t/mk/buildflags.mk @@ -23,4 +23,4 @@ loop_targets := $(vars) $(vars:=_FOR_BUILD) test: $(loop_targets) $(loop_targets): - test "$($@)" = "$(TEST_$@)" + test '$($@)' = '$(TEST_$@)' diff --git a/scripts/t/mk/buildtools.mk b/scripts/t/mk/buildtools.mk index c104ef62e..2b935ebb1 100644 --- a/scripts/t/mk/buildtools.mk +++ b/scripts/t/mk/buildtools.mk @@ -22,4 +22,4 @@ loop_targets := $(tools) $(tools:=_FOR_BUILD) test: $(loop_targets) $(loop_targets): - test "$($@)" = "$(TEST_$@)" + test '$($@)' = '$(TEST_$@)' -- 2.39.2
>From e78ba6e05c1ca6dda8f003328f051c6726923c8a Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:14:27 +0200 Subject: [PATCH 04/10] scripts/t/mk: test exported variables in addition to Make variables --- scripts/t/mk/architecture.mk | 3 +++ scripts/t/mk/buildflags.mk | 5 +++++ scripts/t/mk/buildtools.mk | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/scripts/t/mk/architecture.mk b/scripts/t/mk/architecture.mk index b181d3426..538f80b48 100644 --- a/scripts/t/mk/architecture.mk +++ b/scripts/t/mk/architecture.mk @@ -19,4 +19,7 @@ loop_targets := $(foreach machine,BUILD HOST TARGET,$(foreach var,$(vars),\ test: $(loop_targets) $(loop_targets): + # Test the Make variable. test '$($@)' = '$(TEST_$@)' + # Test the exported variable. + test "$${$@}" = '$(TEST_$@)' diff --git a/scripts/t/mk/buildflags.mk b/scripts/t/mk/buildflags.mk index 042ba816f..b43a7dbcf 100644 --- a/scripts/t/mk/buildflags.mk +++ b/scripts/t/mk/buildflags.mk @@ -4,6 +4,8 @@ TEST_CPPFLAGS += -DTEST_MK=test-host DEB_CPPFLAGS_FOR_BUILD_MAINT_APPEND = -DTEST_MK=test-build TEST_CPPFLAGS_FOR_BUILD += -DTEST_MK=test-build +DPKG_EXPORT_BUILDFLAGS := 1 + include $(srcdir)/mk/buildflags.mk vars := \ @@ -23,4 +25,7 @@ loop_targets := $(vars) $(vars:=_FOR_BUILD) test: $(loop_targets) $(loop_targets): + # Test the Make variable. test '$($@)' = '$(TEST_$@)' + # Test the exported variable. + test "$${$@}" = '$(TEST_$@)' diff --git a/scripts/t/mk/buildtools.mk b/scripts/t/mk/buildtools.mk index 2b935ebb1..de2b52b59 100644 --- a/scripts/t/mk/buildtools.mk +++ b/scripts/t/mk/buildtools.mk @@ -1,3 +1,5 @@ +DPKG_EXPORT_BUILDTOOLS := 1 + include $(srcdir)/mk/buildtools.mk tools := \ @@ -22,4 +24,7 @@ loop_targets := $(tools) $(tools:=_FOR_BUILD) test: $(loop_targets) $(loop_targets): + # Test the Make variable. test '$($@)' = '$(TEST_$@)' + # Test the exported variable. + test "$${$@}" = '$(TEST_$@)' -- 2.39.2
>From 4306db0c0e39f5c11e2dbe93d522c5effcfeb4b2 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:16:20 +0200 Subject: [PATCH 05/10] scripts/t/mk/architecture.mk: test variable override --- scripts/t/mk/architecture.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/t/mk/architecture.mk b/scripts/t/mk/architecture.mk index 538f80b48..56963ff1d 100644 --- a/scripts/t/mk/architecture.mk +++ b/scripts/t/mk/architecture.mk @@ -1,3 +1,6 @@ +DEB_BUILD_ARCH := overridden +TEST_DEB_BUILD_ARCH := overridden + include $(srcdir)/mk/architecture.mk vars := \ -- 2.39.2
>From 9ce23dac430c250b557b928ce741fb638d5ce045 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:20:42 +0200 Subject: [PATCH 06/10] scripts/t/mk/buildflags.mk: test DEB_CXXFLAGS_MAINT_SET --- scripts/t/mk/buildflags.mk | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/t/mk/buildflags.mk b/scripts/t/mk/buildflags.mk index b43a7dbcf..168fdd6bc 100644 --- a/scripts/t/mk/buildflags.mk +++ b/scripts/t/mk/buildflags.mk @@ -4,6 +4,12 @@ TEST_CPPFLAGS += -DTEST_MK=test-host DEB_CPPFLAGS_FOR_BUILD_MAINT_APPEND = -DTEST_MK=test-build TEST_CPPFLAGS_FOR_BUILD += -DTEST_MK=test-build +DEB_CXXFLAGS_MAINT_SET := set-host +TEST_CXXFLAGS := set-host + +DEB_CXXFLAGS_FOR_BUILD_MAINT_SET := set-build +TEST_CXXFLAGS_FOR_BUILD := set-build + DPKG_EXPORT_BUILDFLAGS := 1 include $(srcdir)/mk/buildflags.mk -- 2.39.2
>From b734bd99b2467170a9b7a99f002eba6d8d9ba521 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:21:58 +0200 Subject: [PATCH 07/10] scripts/t/mk/buildtools.mk: add missing test for CPP --- scripts/t/mk/buildtools.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/t/mk/buildtools.mk b/scripts/t/mk/buildtools.mk index de2b52b59..3b758f8ba 100644 --- a/scripts/t/mk/buildtools.mk +++ b/scripts/t/mk/buildtools.mk @@ -6,6 +6,7 @@ tools := \ AR \ AS \ CC \ + CPP \ CXX \ F77 \ FC \ -- 2.39.2
>From d68d0e338febb0c54fdb90313b222a46345127f5 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Wed, 10 Apr 2024 00:23:19 +0200 Subject: [PATCH 08/10] scripts/t/mk/buildtools.mk: test override of a tool --- scripts/t/mk/buildtools.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/t/mk/buildtools.mk b/scripts/t/mk/buildtools.mk index 3b758f8ba..321e948ec 100644 --- a/scripts/t/mk/buildtools.mk +++ b/scripts/t/mk/buildtools.mk @@ -1,3 +1,7 @@ +AR := overridden +TEST_AR := overridden +TEST_AR_FOR_BUILD := overridden + DPKG_EXPORT_BUILDTOOLS := 1 include $(srcdir)/mk/buildtools.mk -- 2.39.2
>From a5e4df5a095f9de1cb09f8185923c51e764fd9e0 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Mon, 4 Mar 2024 11:58:53 +0100 Subject: [PATCH 09/10] scripts/mk: stop hard-coding dpkg_datadir This path differ during tests and after installation. Instead of rewriting the file with a hardcoded path, compute it within Make. --- build-aux/subst.am | 6 ------ scripts/mk/Makefile.am | 21 --------------------- scripts/mk/buildtools.mk | 5 ++++- scripts/mk/default.mk | 3 ++- scripts/mk/vendor.mk | 5 ++++- 5 files changed, 10 insertions(+), 30 deletions(-) diff --git a/build-aux/subst.am b/build-aux/subst.am index 5515930d0..167a71257 100644 --- a/build-aux/subst.am +++ b/build-aux/subst.am @@ -39,9 +39,3 @@ SUFFIXES += .pl @test -d `dirname $@` || $(MKDIR_P) `dirname $@` $(do_perl_subst) <$< >$@ $(AM_V_at) chmod +x $@ - -# Makefile support. - -do_make_subst = $(AM_V_GEN) $(SED) \ - -e "s:dpkg_datadir[[:space:]]*=[[:space:]]*[^[:space:]]*:dpkg_datadir = $(pkgdatadir):" \ - # EOL diff --git a/scripts/mk/Makefile.am b/scripts/mk/Makefile.am index 257ba5252..6e85e17b9 100644 --- a/scripts/mk/Makefile.am +++ b/scripts/mk/Makefile.am @@ -10,24 +10,3 @@ dist_pkgdata_DATA = \ pkg-info.mk \ vendor.mk \ # EOL - -SUFFIXES = - -include $(top_srcdir)/build-aux/subst.am - -# Ideally we'd use '$(SED) -i', but unfortunately that's not portable. -install-data-hook: - $(do_make_subst) <$(DESTDIR)$(pkgdatadir)/default.mk \ - >$(DESTDIR)$(pkgdatadir)/default.mk.new - mv $(DESTDIR)$(pkgdatadir)/default.mk.new \ - $(DESTDIR)$(pkgdatadir)/default.mk - - $(do_make_subst) <$(DESTDIR)$(pkgdatadir)/buildtools.mk \ - >$(DESTDIR)$(pkgdatadir)/buildtools.mk.new - mv $(DESTDIR)$(pkgdatadir)/buildtools.mk.new \ - $(DESTDIR)$(pkgdatadir)/buildtools.mk - - $(do_make_subst) <$(DESTDIR)$(pkgdatadir)/vendor.mk \ - >$(DESTDIR)$(pkgdatadir)/vendor.mk.new - mv $(DESTDIR)$(pkgdatadir)/vendor.mk.new \ - $(DESTDIR)$(pkgdatadir)/vendor.mk diff --git a/scripts/mk/buildtools.mk b/scripts/mk/buildtools.mk index 6ce9642cd..502b30b8d 100644 --- a/scripts/mk/buildtools.mk +++ b/scripts/mk/buildtools.mk @@ -28,7 +28,10 @@ ifndef dpkg_buildtools_mk_included dpkg_buildtools_mk_included = yes -dpkg_datadir = $(srcdir)/mk +# Default.mk computes dpkg_datadir, other .mk files may use it again. +ifndef dpkg_datadir + dpkg_datadir := $(patsubst %/buildtools.mk,%,$(lastword $(MAKEFILE_LIST))) +endif include $(dpkg_datadir)/architecture.mk # We set the TOOL_FOR_BUILD variables to the specified value, and the TOOL diff --git a/scripts/mk/default.mk b/scripts/mk/default.mk index c4e408b01..0e8e4f4d4 100644 --- a/scripts/mk/default.mk +++ b/scripts/mk/default.mk @@ -4,7 +4,8 @@ ifndef dpkg_default_mk_included dpkg_default_mk_included = yes -dpkg_datadir = $(srcdir)/mk +dpkg_datadir := $(patsubst %/default.mk,%,$(lastword $(MAKEFILE_LIST))) + include $(dpkg_datadir)/architecture.mk include $(dpkg_datadir)/buildapi.mk ifeq ($(call dpkg_build_api_ge,1),yes) diff --git a/scripts/mk/vendor.mk b/scripts/mk/vendor.mk index 2bce9322c..faa195e03 100644 --- a/scripts/mk/vendor.mk +++ b/scripts/mk/vendor.mk @@ -36,7 +36,10 @@ ifndef dpkg_vendor_mk_included dpkg_vendor_mk_included = yes -dpkg_datadir = $(srcdir)/mk +# Default.mk computes dpkg_datadir, other .mk files may use it again. +ifndef dpkg_datadir + dpkg_datadir := $(patsubst %/vendor.mk,%,$(lastword $(MAKEFILE_LIST))) +endif include $(dpkg_datadir)/buildapi.mk dpkg_late_eval ?= $(or $(value DPKG_CACHE_$(1)),$(eval DPKG_CACHE_$(1) := $(shell $(2)))$(value DPKG_CACHE_$(1))) -- 2.39.2
>From 2c54d622923327a4f523146805c605f6771ee7e9 Mon Sep 17 00:00:00 2001 From: Nicolas Boulenguez <nico...@debian.org> Date: Sun, 10 Mar 2024 20:18:52 +0100 Subject: [PATCH 10/10] scripts/mk: reduce the number of subprocesses In architecture.mk, each unset variable was spawning a shell. In buildapi.mk, each expansion was spawning a shell. Default.mk and vendor.mk both expand DPKG_BUILD_API. In buildflags.mk, each first expansion of an unset variable was spawning a shell. DPKG_EXPORT_BUILDFLAGS expands all variables. In pkg-info.mk, each variable was spawning its own shell. Vendors.mk was correct but use the same mechanism for consistency. --- scripts/mk/architecture.mk | 15 ++++++++++----- scripts/mk/buildapi.mk | 6 +++++- scripts/mk/buildflags.mk | 36 +++++++++++++++++------------------- scripts/mk/pkg-info.mk | 33 +++++++++++++++++++++++---------- scripts/mk/vendor.mk | 8 ++++---- 5 files changed, 59 insertions(+), 39 deletions(-) diff --git a/scripts/mk/architecture.mk b/scripts/mk/architecture.mk index ab42f8788..6963d2ea7 100644 --- a/scripts/mk/architecture.mk +++ b/scripts/mk/architecture.mk @@ -1,16 +1,21 @@ # This Makefile fragment (since dpkg 1.16.1) defines all the DEB_HOST_* and # DEB_BUILD_* variables that dpkg-architecture can return. Existing values # of those variables are preserved as per policy. +# All variables are exported. ifndef dpkg_architecture_mk_included dpkg_architecture_mk_included = yes -dpkg_lazy_eval ?= $$(or $$(value DPKG_CACHE_$(1)),$$(eval DPKG_CACHE_$(1) := $$(shell $(2)))$$(value DPKG_CACHE_$(1))) - -dpkg_architecture_setvar = export $(1) ?= $(call dpkg_lazy_eval,$(1),dpkg-architecture -q$(1)) - +dpkg_architecture_vars = \ $(foreach machine,BUILD HOST TARGET,\ $(foreach var,ARCH ARCH_ABI ARCH_LIBC ARCH_OS ARCH_CPU ARCH_BITS ARCH_ENDIAN GNU_CPU GNU_SYSTEM GNU_TYPE MULTIARCH,\ - $(eval $(call dpkg_architecture_setvar,DEB_$(machine)_$(var))))) + DEB_$(machine)_$(var))) + +# Dpkg-buildpackage sets all variables. Optimize this frequent case. +ifneq (,$(strip $(foreach v,$(dpkg_architecture_vars),$(if $(value $(v)),,1)))) + $(foreach line,$(subst =,?=,$(shell dpkg-architecture)),$(eval $(line))) +endif + +export $(dpkg_architecture_vars) endif # dpkg_architecture_mk_included diff --git a/scripts/mk/buildapi.mk b/scripts/mk/buildapi.mk index 3a1f16405..0f29be954 100644 --- a/scripts/mk/buildapi.mk +++ b/scripts/mk/buildapi.mk @@ -4,7 +4,11 @@ ifndef dpkg_buildapi_mk_included dpkg_buildapi_mk_included = yes # Default API level when not set. -DPKG_BUILD_API ?= $(shell dpkg-buildapi) +ifndef DPKG_BUILD_API + dpkg_lazy ?= $(eval $(1) = $(2)$$($(1))) + dpkg_lazy_set ?= $(call dpkg_lazy,$(1),$$(eval $(1) := $(2))) + $(call dpkg_lazy_set,DPKG_BUILD_API,$$(shell dpkg-buildapi)) +endif # We could use only built-in GNU make functions, but that seems too much # complexity given no integer operators, given that we currently have to diff --git a/scripts/mk/buildflags.mk b/scripts/mk/buildflags.mk index 11597002d..8e6b83211 100644 --- a/scripts/mk/buildflags.mk +++ b/scripts/mk/buildflags.mk @@ -35,8 +35,6 @@ dpkg_buildflags_mk_included = yes # This list is kept in sync with the default set of flags returned # by dpkg-buildflags. -dpkg_lazy_eval ?= $$(or $$(value DPKG_CACHE_$(1)),$$(eval DPKG_CACHE_$(1) := $$(shell $(2)))$$(value DPKG_CACHE_$(1))) - DPKG_BUILDFLAGS_LIST := $(foreach var,\ ASFLAGS \ CFLAGS \ @@ -50,26 +48,26 @@ DPKG_BUILDFLAGS_LIST := $(foreach var,\ LDFLAGS \ ,$(var) $(var)_FOR_BUILD) -define dpkg_buildflags_export_envvar - ifdef $(1) - DPKG_BUILDFLAGS_EXPORT_ENVVAR += $(1)="$$(value $(1))" - endif -endef - -$(eval $(call dpkg_buildflags_export_envvar,DEB_BUILD_OPTIONS)) -$(eval $(call dpkg_buildflags_export_envvar,DEB_BUILD_MAINT_OPTIONS)) -$(eval $(call dpkg_buildflags_export_envvar,DEB_BUILD_PATH)) -$(foreach flag,$(DPKG_BUILDFLAGS_LIST),\ - $(foreach operation,SET STRIP APPEND PREPEND,\ - $(eval $(call dpkg_buildflags_export_envvar,DEB_$(flag)_MAINT_$(operation))))) - -dpkg_buildflags_setvar = $(1) = $(call dpkg_lazy_eval,$(1),$(DPKG_BUILDFLAGS_EXPORT_ENVVAR) dpkg-buildflags --get $(1)) - -$(foreach flag,$(DPKG_BUILDFLAGS_LIST),\ - $(eval $(call dpkg_buildflags_setvar,$(flag)))) +dpkg_buildflags_run = $(eval $(shell \ + $(foreach exported,\ + DEB_BUILD_OPTIONS\ + DEB_BUILD_MAINT_OPTIONS\ + DEB_BUILD_PATH\ + $(foreach flag,$(DPKG_BUILDFLAGS_LIST),\ + $(foreach operation,SET STRIP APPEND PREPEND,\ + DEB_$(flag)_MAINT_$(operation)))\ + ,$(if $(value $(exported))\ + ,$(exported)="$(value $(exported))"))\ + dpkg-buildflags | sed 's/\([^=]*\)\(.*\)/$$(eval \1:\2)/')) ifdef DPKG_EXPORT_BUILDFLAGS + # We need to compute the values right now. + $(dpkg_buildflags_run) export $(DPKG_BUILDFLAGS_LIST) +else + dpkg_lazy ?= $(eval $(1) = $(2)$$($(1))) + $(foreach v,$(DPKG_BUILDFLAGS_LIST),\ + $(call dpkg_lazy,$(v),$$(dpkg_buildflags_run))) endif endif # dpkg_buildflags_mk_included diff --git a/scripts/mk/pkg-info.mk b/scripts/mk/pkg-info.mk index b65a8d1a4..4ba40eb97 100644 --- a/scripts/mk/pkg-info.mk +++ b/scripts/mk/pkg-info.mk @@ -12,21 +12,34 @@ # SOURCE_DATE_EPOCH: source release date as seconds since the epoch, as # specified by <https://reproducible-builds.org/specs/source-date-epoch/> # (since dpkg 1.18.8). +# If it is undefined, the date of the latest changelog entry is used. +# In both cases, the value is exported. ifndef dpkg_pkg_info_mk_included dpkg_pkg_info_mk_included = yes -dpkg_late_eval ?= $(or $(value DPKG_CACHE_$(1)),$(eval DPKG_CACHE_$(1) := $(shell $(2)))$(value DPKG_CACHE_$(1))) - -DEB_SOURCE = $(call dpkg_late_eval,DEB_SOURCE,dpkg-parsechangelog -SSource) -DEB_VERSION = $(call dpkg_late_eval,DEB_VERSION,dpkg-parsechangelog -SVersion) -DEB_VERSION_EPOCH_UPSTREAM = $(call dpkg_late_eval,DEB_VERSION_EPOCH_UPSTREAM,echo '$(DEB_VERSION)' | sed -e 's/-[^-]*$$//') -DEB_VERSION_UPSTREAM_REVISION = $(call dpkg_late_eval,DEB_VERSION_UPSTREAM_REVISION,echo '$(DEB_VERSION)' | sed -e 's/^[0-9]*://') -DEB_VERSION_UPSTREAM = $(call dpkg_late_eval,DEB_VERSION_UPSTREAM,echo '$(DEB_VERSION_EPOCH_UPSTREAM)' | sed -e 's/^[0-9]*://') -DEB_DISTRIBUTION = $(call dpkg_late_eval,DEB_DISTRIBUTION,dpkg-parsechangelog -SDistribution) - -SOURCE_DATE_EPOCH ?= $(call dpkg_late_eval,SOURCE_DATE_EPOCH,dpkg-parsechangelog -STimestamp) +dpkg_parsechangelog_run = $(eval $(shell dpkg-parsechangelog | sed -n '\ + s/^Distribution: \(.*\)/$$(eval DEB_DISTRIBUTION:=\1)/p;\ + s/^Source: \(.*\)/$$(eval DEB_SOURCE:=\1)/p;\ + s/^Version: \([0-9]*:\)\?\([^-]*\)\(\(.*\)-[^-]*\)\?$$/\ + $$(eval DEB_VERSION:=\1\2\3)\ + $$(eval DEB_VERSION_EPOCH_UPSTREAM:=\1\2\4)\ + $$(eval DEB_VERSION_UPSTREAM_REVISION:=\2\3)\ + $$(eval DEB_VERSION_UPSTREAM:=\2\4)/p;\ + s/^Timestamp: \(.*\)/$$(eval SOURCE_DATE_EPOCH?=\1)/p')) +ifdef SOURCE_DATE_EPOCH + dpkg_lazy ?= $(eval $(1) = $(2)$$($(1))) + $(call dpkg_lazy,DEB_DISTRIBUTION,$$(dpkg_parsechangelog_run)) + $(call dpkg_lazy,DEB_SOURCE,$$(dpkg_parsechangelog_run)) + $(call dpkg_lazy,DEB_VERSION,$$(dpkg_parsechangelog_run)) + $(call dpkg_lazy,DEB_VERSION_EPOCH_UPSTREAM,$$(dpkg_parsechangelog_run)) + $(call dpkg_lazy,DEB_VERSION_UPSTREAM,$$(dpkg_parsechangelog_run)) + $(call dpkg_lazy,DEB_UPSTREAM_REVISION,$$(dpkg_parsechangelog_run)) +else + # We need to compute the values right now. + $(dpkg_parsechangelog_run) +endif export SOURCE_DATE_EPOCH endif # dpkg_pkg_info_mk_included diff --git a/scripts/mk/vendor.mk b/scripts/mk/vendor.mk index faa195e03..c1e2e4643 100644 --- a/scripts/mk/vendor.mk +++ b/scripts/mk/vendor.mk @@ -42,10 +42,10 @@ ifndef dpkg_datadir endif include $(dpkg_datadir)/buildapi.mk -dpkg_late_eval ?= $(or $(value DPKG_CACHE_$(1)),$(eval DPKG_CACHE_$(1) := $(shell $(2)))$(value DPKG_CACHE_$(1))) - -DEB_VENDOR = $(call dpkg_late_eval,DEB_VENDOR,dpkg-vendor --query Vendor) -DEB_PARENT_VENDOR = $(call dpkg_late_eval,DEB_PARENT_VENDOR,dpkg-vendor --query Parent) +dpkg_lazy ?= $(eval $(1) = $(2)$$($(1))) +dpkg_lazy_set ?= $(call dpkg_lazy,$(1),$$(eval $(1) := $(2))) +$(call dpkg_lazy_set,DEB_VENDOR,$$(shell dpkg-vendor --query Vendor)) +$(call dpkg_lazy_set,DEB_PARENT_VENDOR,$$(shell dpkg-vendor --query Parent)) dpkg_vendor_derives_from_v0 = dpkg-vendor --derives-from $(1) && echo yes || echo no dpkg_vendor_derives_from_v1 = $(shell $(dpkg_vendor_derives_from_v0)) -- 2.39.2