Skip to contentSkip to conversation

kbuild: Add support for SOURCE_DATE_EPOCH environment variable

PATCH In review Ben Hutchings 3 participants 4 messages Oct 1, 2015 – Oct 27, 2015

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 kbuild: Add support for SOURCE_DATE_EPOCH environment variable

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.

---
 Documentation/kbuild/kbuild.txt | 15 +++++++++------
 Makefile                        | 10 ++++++++++
 2 files changed, 19 insertions(+), 6 deletions(-)
Documentation/kbuild/kbuild.txt +9 -6
index 0ff6a46..9f95228 100644
@@ -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
 --------------------------------------------------
Makefile +10 -0
index 1d341eb..bfb0243 100644
@@ -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.
Signature · 2 lines
Ben Hutchings
When in doubt, use brute force. - Ken Thompson
#1 lore raw

Dne 2.10.2015 v 01:15 Ben Hutchings napsal(a):

Quoted 7 lines

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.

At which projects besides the kernel is this aimed? If there are multiple projects willing to support this, I'll happily apply it. But if it's just a synonym for KBUILD_BUILD_TIMESTAMP that nobody else is going to support, then it looks a bit redundant.

Michal

#2 lore raw
Quoted 6 lines · Michal Marek

Dne 2.10.2015 v 01:15 Ben Hutchings napsal(a):

Quoted 5 lines

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/

Quoted 7 lines
Quoted 2 lines

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

At which projects besides the kernel is this aimed? If there are multiple projects willing to support this, I'll happily apply it. But if it's just a synonym for KBUILD_BUILD_TIMESTAMP that nobody else is going to support, then it looks a bit redundant.

It's aimed at all build tools. For examples, see:

https://codesearch.debian.net/results/%5C%24SOURCE_DATE_EPOCH%20-path%3Adebian%2F/page_0
https://codesearch.debian.net/results/getenv%5C%28%22SOURCE_DATE_EPOCH%22%5C%29%20-path%3Adebian%2F/page_0

Ben.

Signature · 2 lines
Ben Hutchings
Never attribute to conspiracy what can adequately be explained by stupidity.
#3 lore raw

Hi,

Quoted 6 lines · Ben Hutchings

It's aimed at all build tools. For examples, see:

https://codesearch.debian.net/results/%5C%24SOURCE_DATE_EPOCH%20-path%3Adeb
ian%2F/page_0
https://codesearch.debian.net/results/getenv%5C%28%22SOURCE_DATE_EPOCH%22%
5C%29%20-path%3Adebian%2F/page_0

https://reproducible-builds.org/specs/source-date-epoch/ has a spec for SOURCE_DATE_EPOCH.

According to
https://wiki.debian.org/ReproducibleBuilds/TimestampsProposal#Reading_the_variable
the following Debian packages support it already:

debhelper (>= 9.20151004)
epydoc (>= 3.0.1+dfsg-8)
ghostscript (>= 9.16~dfsg-1)
help2man (>= 1.47.1)
sphinx (>= 1.3.1-3)
texi2html (>= 1.82+dfsg1-4)

plus we have patches for doxygen, docbook-utils, gcc, gettext, libxslt, ocamldoc, qt4-x11, texlive-bin and txt2man.

(We are only tracking adoption in Debian packages but of course we aim for upstream inclusion of this.)

cheers,
Holger