From b621a313e0bc67803abfba18e1ae15e7a8b9b59f Mon Sep 17 00:00:00 2001 From: Oleksiy Obitotskyy Date: Mon, 22 Feb 2021 17:21:33 +0200 Subject: [PATCH] smartmontools: Improve reproducibility Backport changes added to master smartmontools. https://github.com/smartmontools/smartmontools/commit/24838916b4c0e91f5c897d44fcdeedb22848f684 Upstream-Status: Backported Signed-off-by: Oleksiy Obitotskyy --- ChangeLog | 8 ++++++++ configure.ac | 12 ++++++++++++ utility.cpp | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/ChangeLog b/ChangeLog index 39eac2d..6a3b4ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ $Id: ChangeLog 5155 2020-12-30 16:49:18Z chrfranke $ +2021-02-07 Christian Franke + + Improve reproducibility if SOURCE_DATE_EPOCH if set (GH pull/89). + configure.ac: Define SOURCE_DATE_EPOCH in CPPFLAGS. + utility.cpp: Print SOURCE_DATE_EPOCH value if specified. + Don't include configure arguments then. + cppcheck.sh: Silence related 'ConfigurationNotChecked' message. + 2020-12-30 Christian Franke smartmontools 7.2 diff --git a/configure.ac b/configure.ac index ee6f0e5..c37c9bc 100644 --- a/configure.ac +++ b/configure.ac @@ -61,6 +61,18 @@ case "${host}" in ;; esac +AC_MSG_CHECKING([whether reproducible build is selected (SOURCE_DATE_EPOCH)]) +res=no +if test -n "$SOURCE_DATE_EPOCH"; then + res=yes + test -z "`echo "$SOURCE_DATE_EPOCH" | sed 's,[[0-9]]*,,'`" || res=error +fi +AC_MSG_RESULT([$res]) +case $res in + error) AC_MSG_ERROR([Malformed SOURCE_DATE_EPOCH]) ;; + yes) CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-DSOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH" ;; +esac + # Check for SVN. AC_MSG_CHECKING([whether this is a build from SVN]) is_svn_build=no diff --git a/utility.cpp b/utility.cpp index 0483c6f..8ab38c9 100644 --- a/utility.cpp +++ b/utility.cpp @@ -134,9 +134,19 @@ std::string format_version_info(const char * prog_name, bool full /*= false*/) #endif "\n" "smartmontools configure arguments:" +#ifdef SOURCE_DATE_EPOCH + " [hidden in reproducible builds]\n" + "reproducible build SOURCE_DATE_EPOCH: " +#endif ; +#ifdef SOURCE_DATE_EPOCH + char ts[32]; struct tm tmbuf; + strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", time_to_tm_local(&tmbuf, SOURCE_DATE_EPOCH)); + info += strprintf("%u (%s)", (unsigned)SOURCE_DATE_EPOCH, ts); +#else info += (sizeof(SMARTMONTOOLS_CONFIGURE_ARGS) > 1 ? SMARTMONTOOLS_CONFIGURE_ARGS : " [no arguments given]"); +#endif info += '\n'; return info; -- 2.25.1