[PATCH] use SOURCE_DATE_EPOCH for timestamp if available
Denys Vlasenko
vda.linux at googlemail.com
Sat Jun 5 16:15:29 UTC 2021
Applied, thank you
On Fri, May 14, 2021 at 12:15 AM Paul Spooren <mail at aparcar.org> wrote:
>
> 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 at aparcar.org>
> ---
> scripts/kconfig/confdata.c | 17 ++++++++++++++---
> 1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
> index b05b96e45..73c25e3a8 100644
> --- a/scripts/kconfig/confdata.c
> +++ b/scripts/kconfig/confdata.c
> @@ -342,6 +342,8 @@ int conf_write(const char *name)
> time_t now;
> int use_timestamp = 1;
> char *env;
> + char *source_date_epoch;
> + struct tm *build_time;
>
> dirname[0] = 0;
> if (name && name[0]) {
> @@ -378,7 +380,16 @@ int conf_write(const char *name)
> }
> sym = sym_lookup("KERNELVERSION", 0);
> sym_calc_value(sym);
> - time(&now);
> +
> + source_date_epoch = getenv("SOURCE_DATE_EPOCH");
> + if (source_date_epoch && *source_date_epoch) {
> + now = strtoull(source_date_epoch, NULL, 10);
> + build_time = gmtime(&now);
> + } else {
> + time(&now);
> + build_time = localtime(&now);
> + }
> +
> env = getenv("KCONFIG_NOTIMESTAMP");
> if (env && *env)
> use_timestamp = 0;
> @@ -398,14 +409,14 @@ int conf_write(const char *name)
> if (use_timestamp) {
> size_t ret = \
> strftime(buf, sizeof(buf), "#define AUTOCONF_TIMESTAMP "
> - "\"%Y-%m-%d %H:%M:%S %Z\"\n", localtime(&now));
> + "\"%Y-%m-%d %H:%M:%S %Z\"\n", build_time);
> /* if user has Factory timezone or some other odd install, the
> * %Z above will overflow the string leaving us with undefined
> * results ... so let's try again without the timezone.
> */
> if (ret == 0)
> strftime(buf, sizeof(buf), "#define AUTOCONF_TIMESTAMP "
> - "\"%Y-%m-%d %H:%M:%S\"\n", localtime(&now));
> + "\"%Y-%m-%d %H:%M:%S\"\n", build_time);
> } else { /* bbox */
> strcpy(buf, "#define AUTOCONF_TIMESTAMP \"\"\n");
> }
> --
> 2.30.2
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list