The Modules/getbuildinfo.c allows the use of DATE and TIME macros to be defined via CFLAGS. These vars, control the build date & time when the interpreter is opened, and can be read via the `platform._sys_version()` function. So, a conversion from SOURCE_DATE_EPOCH to DATE & TIME is required at build-time. This is especially needed for `platform._sys_version()` to work. The installation of pip seems to rely on this. The logic has been adapted from: https://wiki.debian.org/ReproducibleBuilds/TimestampsProposal#Makefile Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>lilik-openwrt-22.03
@ -0,0 +1,28 @@ | |||||
--- a/Makefile.pre.in | |||||
+++ b/Makefile.pre.in | |||||
@@ -625,6 +625,16 @@ regen-all: regen-opcode-targets regen-gr | |||||
############################################################################ | |||||
# Special rules for object files | |||||
+DATE_FMT = %b %d %Y | |||||
+TIME_FMT = %H:%M:%S | |||||
+ifdef SOURCE_DATE_EPOCH | |||||
+ BUILD_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)") | |||||
+ BUILD_TIME ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "+$(TIME_FMT)" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "+$(TIME_FMT)" 2>/dev/null || date -u "+$(TIME_FMT)") | |||||
+else | |||||
+ BUILD_DATE ?= $(shell date "+$(DATE_FMT)") | |||||
+ BUILD_TIME ?= $(shell date "+$(TIME_FMT)") | |||||
+endif | |||||
+ | |||||
Modules/getbuildinfo.o: $(PARSER_OBJS) \ | |||||
$(OBJECT_OBJS) \ | |||||
$(PYTHON_OBJS) \ | |||||
@@ -633,6 +643,8 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ | |||||
$(MODOBJS) \ | |||||
$(srcdir)/Modules/getbuildinfo.c | |||||
$(CC) -c $(PY_CFLAGS) \ | |||||
+ -DDATE="\"$(BUILD_DATE)\"" \ | |||||
+ -DTIME="\"$(BUILD_TIME)\"" \ | |||||
-DGITVERSION="\"`LC_ALL=C $(GITVERSION)`\"" \ | |||||
-DGITTAG="\"`LC_ALL=C $(GITTAG)`\"" \ | |||||
-DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \ |
@ -0,0 +1,28 @@ | |||||
--- a/Makefile.pre.in | |||||
+++ b/Makefile.pre.in | |||||
@@ -725,6 +725,16 @@ regen-all: regen-opcode regen-opcode-tar | |||||
############################################################################ | |||||
# Special rules for object files | |||||
+DATE_FMT = %b %d %Y | |||||
+TIME_FMT = %H:%M:%S | |||||
+ifdef SOURCE_DATE_EPOCH | |||||
+ BUILD_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)") | |||||
+ BUILD_TIME ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "+$(TIME_FMT)" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "+$(TIME_FMT)" 2>/dev/null || date -u "+$(TIME_FMT)") | |||||
+else | |||||
+ BUILD_DATE ?= $(shell date "+$(DATE_FMT)") | |||||
+ BUILD_TIME ?= $(shell date "+$(TIME_FMT)") | |||||
+endif | |||||
+ | |||||
Modules/getbuildinfo.o: $(PARSER_OBJS) \ | |||||
$(OBJECT_OBJS) \ | |||||
$(PYTHON_OBJS) \ | |||||
@@ -732,6 +742,8 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ | |||||
$(MODOBJS) \ | |||||
$(srcdir)/Modules/getbuildinfo.c | |||||
$(CC) -c $(PY_CORE_CFLAGS) \ | |||||
+ -DDATE="\"$(BUILD_DATE)\"" \ | |||||
+ -DTIME="\"$(BUILD_TIME)\"" \ | |||||
-DGITVERSION="\"`LC_ALL=C $(GITVERSION)`\"" \ | |||||
-DGITTAG="\"`LC_ALL=C $(GITTAG)`\"" \ | |||||
-DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \ |