blob: 87c0e1458efc434919c3ef282dee6879f1c09d0a [file] [log] [blame]
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