On 30/12/2024 9:00 pm, Maximilian Engelhardt wrote:
> Use the solution described in [1] to replace the call to the 'date'
> command with a version that uses SOURCE_DATE_EPOCH if available. This
> is needed for reproducible builds.
>
> The -d "@..." syntax was introduced in GNU date about 2005 (but only
> added to the docuemntation in 2011), so I assume a version supporting
> this syntax is available, if SOURCE_DATE_EPOCH is defined. If
> SOURCE_DATE_EPOCH is not defined, nothing changes with respect to the
> current behavior.
>
> [1] https://reproducible-builds.org/docs/source-date-epoch/
>
> Signed-off-by: Maximilian Engelhardt <m...@daemonizer.de>
> ---
>  docs/Makefile | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/docs/Makefile b/docs/Makefile
> index b30cc619f8..beba02a94f 100644
> --- a/docs/Makefile
> +++ b/docs/Makefile
> @@ -3,7 +3,13 @@ include $(XEN_ROOT)/Config.mk
>  -include $(XEN_ROOT)/config/Docs.mk
>  
>  VERSION              := $(shell $(MAKE) -C $(XEN_ROOT)/xen 
> --no-print-directory xenversion)
> -DATE         := $(shell date +%Y-%m-%d)
> +
> +DATE_FMT     := +%Y-%m-%d
> +ifdef SOURCE_DATE_EPOCH
> +DATE         := $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 
> 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null || 
> date -u "$(DATE_FMT)")
> +else
> +DATE         := $(shell date "$(DATE_FMT)")
> +endif
>  
>  DOC_ARCHES      := arm x86_32 x86_64
>  MAN_SECTIONS    := 1 5 7 8

While this looks fine for docs, there's another (identical) use of date
in tools/firmware/hvmloader/Makefile, as well as some differing uses to
construct XEN_BUILD_{DATE,TIME}.  INSTALL talks about VGABIOS_REL_DATE too.

Does something like this work for you?  It seems to DTRT for SMBIOS.  It
needs adapting a bit more for vgabios and Xen, but I think having one
common $(date) is going to be better than ad-hoc ones over the tree.

~Andrew
diff --git a/Config.mk b/Config.mk
index fa0414055b93..0931e702b025 100644
--- a/Config.mk
+++ b/Config.mk
@@ -141,6 +141,14 @@ export XEN_HAS_BUILD_ID=y
 build_id_linker := --build-id=sha1
 endif
 
+# Wrap date(1) to use SOURCE_DATE_EPOCH if set the environment.
+# See https://reproducible-builds.org/docs/source-date-epoch/
+ifdef SOURCE_DATE_EPOCH
+date = $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "$(1)" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "$(1)" 2>/dev/null || date -u "$(1)")
+else
+date = $(shell date "$(1)")
+endif
+
 define buildmakevars2shellvars
     export PREFIX="$(prefix)";                                            \
     export XEN_SCRIPT_DIR="$(XEN_SCRIPT_DIR)";                            \
diff --git a/docs/Makefile b/docs/Makefile
index b30cc619f8dd..95dc83ff9c59 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -3,7 +3,7 @@ include $(XEN_ROOT)/Config.mk
 -include $(XEN_ROOT)/config/Docs.mk
 
 VERSION		:= $(shell $(MAKE) -C $(XEN_ROOT)/xen --no-print-directory xenversion)
-DATE		:= $(shell date +%Y-%m-%d)
+DATE		:= $(call date,+%Y-%m-%d)
 
 DOC_ARCHES      := arm x86_32 x86_64
 MAN_SECTIONS    := 1 5 7 8
diff --git a/tools/firmware/hvmloader/Makefile b/tools/firmware/hvmloader/Makefile
index c7bc4006578a..1e77b014f614 100644
--- a/tools/firmware/hvmloader/Makefile
+++ b/tools/firmware/hvmloader/Makefile
@@ -23,7 +23,7 @@ include $(XEN_ROOT)/tools/firmware/Rules.mk
 ld-option = $(shell if $(LD) -v $(1) >/dev/null 2>&1; then echo y; else echo n; fi)
 
 # SMBIOS spec requires format mm/dd/yyyy
-SMBIOS_REL_DATE ?= $(shell date +%m/%d/%Y)
+SMBIOS_REL_DATE ?= $(call date,+%m/%d/%Y)
 
 CFLAGS += $(CFLAGS_xeninclude) -fno-pic -mregparm=3
 

Reply via email to