[Reproducible-builds] [PATCH] kbuild: Add support for SOURCE_DATE_EPOCH environment variable

Ben Hutchings ben at decadent.org.uk
Thu Oct 1 23:15:32 UTC 2015


As part of the reproducible builds project, the SOURCE_DATE_EPOCH
environment variable has been specified as a project- and
distribution-independent means to specify a timestamp at build
time: https://reproducible-builds.org/specs/source-date-epoch/

Add support for this by converting it to KBUILD_BUILD_TIMESTAMP
if they aren't both set.

Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
---
 Documentation/kbuild/kbuild.txt | 15 +++++++++------
 Makefile                        | 10 ++++++++++
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/Documentation/kbuild/kbuild.txt b/Documentation/kbuild/kbuild.txt
index 0ff6a46..9f95228 100644
--- a/Documentation/kbuild/kbuild.txt
+++ b/Documentation/kbuild/kbuild.txt
@@ -211,12 +211,15 @@ KBUILD_ENABLE_EXTRA_GCC_CHECKS
 If enabled over the make command line with "W=1", it turns on additional
 gcc -W... options for more extensive build-time checking.
 
-KBUILD_BUILD_TIMESTAMP
---------------------------------------------------
-Setting this to a date string overrides the timestamp used in the
-UTS_VERSION definition (uname -v in the running kernel). The value has to
-be a string that can be passed to date -d. The default value
-is the output of the date command at one point during build.
+KBUILD_BUILD_TIMESTAMP, SOURCE_DATE_EPOCH
+--------------------------------------------------
+Setting KBUILD_BUILD_TIMESTAMP to a date string overrides the
+timestamp used in the UTS_VERSION definition (uname -v in the running
+kernel). The value has to be a string that can be passed to date -d.
+The default value is the output of the date command at one point
+during build. Alternately, the timestamp may be specified in
+SOURCE_DATE_EPOCH as the number of whole non-leap seconds since the
+epoch.
 
 KBUILD_BUILD_USER, KBUILD_BUILD_HOST
 --------------------------------------------------
diff --git a/Makefile b/Makefile
index 1d341eb..bfb0243 100644
--- a/Makefile
+++ b/Makefile
@@ -417,6 +417,16 @@ export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
 export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
 export KBUILD_ARFLAGS
 
+ifndef KBUILD_BUILD_TIMESTAMP
+  # If SOURCE_DATE_EPOCH is set in the environment (only), then
+  # generate a timestamp string based on that, independent of the
+  # current time zone and locale.
+  ifeq ("$(origin SOURCE_DATE_EPOCH)", "environment")
+    KBUILD_BUILD_TIMESTAMP := $(shell LC_TIME=C date -u -d@$(SOURCE_DATE_EPOCH))
+    export KBUILD_BUILD_TIMESTAMP
+  endif
+endif
+
 # When compiling out-of-tree modules, put MODVERDIR in the module
 # tree rather than in the kernel tree. The kernel tree might
 # even be read-only.
-- 
Ben Hutchings
When in doubt, use brute force. - Ken Thompson
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 811 bytes
Desc: This is a digitally signed message part
URL: <http://lists.alioth.debian.org/pipermail/reproducible-builds/attachments/20151002/d6f7a99d/attachment.sig>


More information about the Reproducible-builds mailing list