aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Spooren <mail@aparcar.org>2021-05-13 23:39:05 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-06-05 18:13:00 +0200
commit947a22b33262c93e5c50286b723b9086a33a4c1f (patch)
treea386baf9c281da44d705a0f6ec5c2263051016bc
parent1b30c63dfdd4f31faa6deda69345bf07f23aa334 (diff)
downloadbusybox-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.c17
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 }