From b621a313e0bc67803abfba18e1ae15e7a8b9b59f Mon Sep 17 00:00:00 2001
|
From: Oleksiy Obitotskyy <oobitots@cisco.com>
|
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 <oobitots@cisco.com>
|
---
|
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 <franke@computer.org>
|
+
|
+ 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 <franke@computer.org>
|
|
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
|