This is an automated email from the git hooks/post-receive script.

guillem pushed a commit to branch main
in repository dpkg.

View the commit online:
https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=e146a68a375453db89bc3b5e816d9405e5fd5634

commit e146a68a375453db89bc3b5e816d9405e5fd5634
Author: Nicolas Boulenguez <nico...@debian.org>
AuthorDate: Sun Mar 10 20:18:52 2024 +0100

    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. Where
    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.
    
    In vendors.mk the usage was correct but we switch to use the same
    mechanism for consistency.
    
    [guil...@debian.org:
     - Rename dpkg_lazy to dpkg_lazy_eval.
     - Reword commit message.
     - Fix indentation. ]
    
    Closes: #872381
    Signed-off-by: Guillem Jover <guil...@debian.org>
---
 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..4f0559ce9 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..6b665f3b0 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 ?= $(eval $(1) = $(2)$$($(1)))
+  dpkg_lazy_set ?= $(call dpkg_lazy_eval,$(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..a8eac9e54 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 ?= $(eval $(1) = $(2)$$($(1)))
+  $(foreach v,$(DPKG_BUILDFLAGS_LIST),\
+    $(call dpkg_lazy_eval,$(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..cfd456af1 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 ?= $(eval $(1) = $(2)$$($(1)))
+  $(call dpkg_lazy_eval,DEB_DISTRIBUTION,$$(dpkg_parsechangelog_run))
+  $(call dpkg_lazy_eval,DEB_SOURCE,$$(dpkg_parsechangelog_run))
+  $(call dpkg_lazy_eval,DEB_VERSION,$$(dpkg_parsechangelog_run))
+  $(call dpkg_lazy_eval,DEB_VERSION_EPOCH_UPSTREAM,$$(dpkg_parsechangelog_run))
+  $(call dpkg_lazy_eval,DEB_VERSION_UPSTREAM,$$(dpkg_parsechangelog_run))
+  $(call dpkg_lazy_eval,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 2bce9322c..746503a33 100644
--- a/scripts/mk/vendor.mk
+++ b/scripts/mk/vendor.mk
@@ -39,10 +39,10 @@ dpkg_vendor_mk_included = yes
 dpkg_datadir = $(srcdir)/mk
 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 ?= $(eval $(1) = $(2)$$($(1)))
+dpkg_lazy_set ?= $(call dpkg_lazy_eval,$(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))

-- 
Dpkg.Org's dpkg

Reply via email to