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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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