summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Bießmann <andreas.devel@googlemail.com>2015-08-28 10:29:55 +0200
committerTom Rini <trini@konsulko.com>2015-08-28 12:33:19 -0400
commit2d9efa1227262249d381ed5d9d341cbdba76e62d (patch)
tree14517434daab739b28e47fca4ca3b9671d525d9c
parent9316412f46fbdeec81a3f5a40bae383a405b9a4a (diff)
Makefile: fix SOURCE_DATE_EPOCH for *BSD host
The SOURCE_DATE_EPOCH mechanism for reproducible builds require some date(1) with -d switch to print the relevant date and time strings of another point of time. In other words it requires some date(1) that behaves like the GNU date(1) [1]. The BSD date(1) [2] on the other hand has the same switch but with a different meaning. Respect this and check the date(1) abilities before usage, error on non working version. Use the well known pre- and suffixes for the GNU variant of a tool on *BSD hosts to search for a working date(1) version. [1] http://man7.org/linux/man-pages/man1/date.1.html [2] http://www.freebsd.org/cgi/man.cgi?query=date Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
-rw-r--r--Makefile18
1 files changed, 15 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index 797394a955..4fe1d88589 100644
--- a/Makefile
+++ b/Makefile
@@ -1263,12 +1263,24 @@ define filechk_version.h
echo \#define LD_VERSION_STRING \"$$($(LD) --version | head -n 1)\"; )
endef
+# The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.
+# The BSD date on the other hand behaves different and would produce errors
+# with the misused '-d' switch. Respect that and search a working date with
+# well known pre- and suffixes for the GNU variant of date.
define filechk_timestamp.h
(if test -n "$${SOURCE_DATE_EPOCH}"; then \
SOURCE_DATE="@$${SOURCE_DATE_EPOCH}"; \
- LC_ALL=C date -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
- LC_ALL=C date -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
- LC_ALL=C date -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
+ DATE=""; \
+ for date in gdate date.gnu date; do \
+ $${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \
+ done; \
+ if test -n "$${DATE}"; then \
+ LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
+ LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
+ LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
+ else \
+ return 42; \
+ fi; \
else \
LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \