diff options
author | Paul Spooren <mail@aparcar.org> | 2021-05-13 23:39:05 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-06-05 18:13:00 +0200 |
commit | 947a22b33262c93e5c50286b723b9086a33a4c1f (patch) | |
tree | a386baf9c281da44d705a0f6ec5c2263051016bc | |
parent | 1b30c63dfdd4f31faa6deda69345bf07f23aa334 (diff) | |
download | busybox-w32-947a22b33262c93e5c50286b723b9086a33a4c1f.tar.gz busybox-w32-947a22b33262c93e5c50286b723b9086a33a4c1f.tar.bz2 busybox-w32-947a22b33262c93e5c50286b723b9086a33a4c1f.zip |
build system: use SOURCE_DATE_EPOCH for timestamp if available
The SOURCE_DATE_EPOCH is an effort of the Reproducible Builds
organization to make timestamps/build dates in compiled tools
deterministic over several repetitive builds.
Busybox shows by default the build date timestamp which changes whenever
compiled. To have a reasonable accurate build date while staying
reproducible, it's possible to use the *date of last source
modification* rather than the current time and date.
Further information on SOURCE_DATE_EPOCH are available online [1].
This patch modifies `confdata.c` so that the content of the
SOURCE_DATE_EPOCH env variable is used as timestamp.
To be independent of different timezones between builds, whenever
SOURCE_DATE_EPOCH is defined the GMT time is used.
[1]: https://reproducible-builds.org/docs/source-date-epoch/
Signed-off-by: Paul Spooren <mail@aparcar.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | scripts/kconfig/confdata.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 9976011a9..249a3195e 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -342,6 +342,8 @@ int conf_write(const char *name) | |||
342 | time_t now; | 342 | time_t now; |
343 | int use_timestamp = 1; | 343 | int use_timestamp = 1; |
344 | char *env; | 344 | char *env; |
345 | char *source_date_epoch; | ||
346 | struct tm *build_time; | ||
345 | 347 | ||
346 | dirname[0] = 0; | 348 | dirname[0] = 0; |
347 | if (name && name[0]) { | 349 | if (name && name[0]) { |
@@ -378,7 +380,16 @@ int conf_write(const char *name) | |||
378 | } | 380 | } |
379 | sym = sym_lookup("KERNELVERSION", 0); | 381 | sym = sym_lookup("KERNELVERSION", 0); |
380 | sym_calc_value(sym); | 382 | sym_calc_value(sym); |
381 | time(&now); | 383 | |
384 | source_date_epoch = getenv("SOURCE_DATE_EPOCH"); | ||
385 | if (source_date_epoch && *source_date_epoch) { | ||
386 | now = strtoull(source_date_epoch, NULL, 10); | ||
387 | build_time = gmtime(&now); | ||
388 | } else { | ||
389 | time(&now); | ||
390 | build_time = localtime(&now); | ||
391 | } | ||
392 | |||
382 | env = getenv("KCONFIG_NOTIMESTAMP"); | 393 | env = getenv("KCONFIG_NOTIMESTAMP"); |
383 | if (env && *env) | 394 | if (env && *env) |
384 | use_timestamp = 0; | 395 | use_timestamp = 0; |
@@ -398,14 +409,14 @@ int conf_write(const char *name) | |||
398 | if (use_timestamp) { | 409 | if (use_timestamp) { |
399 | size_t ret = \ | 410 | size_t ret = \ |
400 | strftime(buf, sizeof(buf), "#define AUTOCONF_TIMESTAMP " | 411 | strftime(buf, sizeof(buf), "#define AUTOCONF_TIMESTAMP " |
401 | "\"%Y-%m-%d %H:%M:%S %Z\"\n", localtime(&now)); | 412 | "\"%Y-%m-%d %H:%M:%S %Z\"\n", build_time); |
402 | /* if user has Factory timezone or some other odd install, the | 413 | /* if user has Factory timezone or some other odd install, the |
403 | * %Z above will overflow the string leaving us with undefined | 414 | * %Z above will overflow the string leaving us with undefined |
404 | * results ... so let's try again without the timezone. | 415 | * results ... so let's try again without the timezone. |
405 | */ | 416 | */ |
406 | if (ret == 0) | 417 | if (ret == 0) |
407 | strftime(buf, sizeof(buf), "#define AUTOCONF_TIMESTAMP " | 418 | strftime(buf, sizeof(buf), "#define AUTOCONF_TIMESTAMP " |
408 | "\"%Y-%m-%d %H:%M:%S\"\n", localtime(&now)); | 419 | "\"%Y-%m-%d %H:%M:%S\"\n", build_time); |
409 | } else { /* bbox */ | 420 | } else { /* bbox */ |
410 | strcpy(buf, "#define AUTOCONF_TIMESTAMP \"\"\n"); | 421 | strcpy(buf, "#define AUTOCONF_TIMESTAMP \"\"\n"); |
411 | } | 422 | } |