kbuild: Add support for SOURCE_DATE_EPOCH environment variable
Subsystems (2)
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
@@ -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
@@ -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
Dne 2.10.2015 v 01:15 Ben Hutchings napsal(a):
Quoted 7 lines
As part of the reproducible builds project, the
SOURCE_DATE_EPOCHenvironment 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_TIMESTAMPif 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
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_EPOCHenvironment 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_TIMESTAMPif 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_TIMESTAMPthat 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.
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