
On 08/27/2015 03:03 PM, Paul Kocialkowski wrote:
Le jeudi 27 août 2015 à 11:30 +0200, Andreas Bießmann a écrit :
Changes in v2:
- check for '-u' and '-d "@0"' switch rather than for the GNU variant
Makefile | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile index b9b2375..b797e38 100644 --- a/Makefile +++ b/Makefile @@ -346,6 +346,10 @@ PERL = perl PYTHON = python DTC = dtc CHECK = sparse +DATE := $(foreach date,gdate date.gnu date, \
$(shell _date=`which $(date)`; \
$${_date} -u -d "@0" >/dev/null 2>&1; \
test $$? -eq 0 && echo $${_date}))
First, I don't understand why you need to call date with the full path: if which can find it, then calling the binary without its full path should do just as well, right?
You'r right.
Then, correct me if I'm wrong, but calling test and using && is overkill, you could simply do: $${_date} -u -d "@0" >/dev/null 2>&1 && echo $${_date}
Also true.
So in the end, the whole line would look like:
DATE := $(foreach date,gdate date.gnu date, \ $($${date} -u -d "@0" >/dev/null 2>&1 \ && echo $${date}))
Let me know what you think (and please test it as well).
That should work. I wonder however why we don't include this snippet in the filechk_timestamp.h script directly. In fact the $(DATE) (a date that support -d '@0' switch) is just used there, so why clobber the Makefile with it?
---8<--- define filechk_timestamp.h (if test -n "$${SOURCE_DATE_EPOCH}"; then \ 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 \ 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"'; \ 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"'; \ LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \ fi) endef --->8---
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF) @@ -1281,9 +1285,9 @@ endef 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"'; \
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"'; \
else \ LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \ LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \LC_ALL=C $(DATE) -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
@@ -1295,6 +1299,11 @@ $(version_h): include/config/uboot.release FORCE $(call filechk,version.h)
$(timestamp_h): $(srctree)/Makefile FORCE +ifneq ($(strip $(SOURCE_DATE_EPOCH)),) +ifeq ($(strip $(DATE)),)
- $(error "Your gdate/date.gnu/date does not support the '-u' and '-d' switches like GNU date does!")
+endif +endif $(call filechk,timestamp.h)
# ---------------------------------------------------------------------------