Le jeudi 27 août 2015 à 11:30 +0200, Andreas Bießmann a écrit : > The SOURCE_DATE_EPOCH mechanism for reproducible builds require some date > with -u and -d switch to print the date string of another time. In other > words it requires some date that behaves like the GNU date. > > Respect this and search a working date, error on no working version.
Looks good to me, except one nitpick, see below. > Signed-off-by: Andreas Bießmann <andreas.de...@googlemail.com> > --- > This commit tries to figure out if we have a date variant > available that supports the '-u' and '-d "@0"' switches. > It errors on non-working variants of date. > > To respect *BSD host systems search for gdate and date.gnu. Those pre- and > suffixes are widespread used for the GNU variant of a tool also avialable on > *BSD systems. Fair enough then, that's fine with me. > The result is: > > ---8<--- > abiessmann@punisher % PATH=$ARMv5_PATH:$PATH > CROSS_COMPILE=arm-v5te-linux-gnueabi- make O=/tmp/picosam ARCH=arm > include/generated/timestamp_autogenerated.h > make[1]: Entering directory '/tmp/picosam' > CHK include/generated/timestamp_autogenerated.h > UPD include/generated/timestamp_autogenerated.h > make[1]: Leaving directory '/tmp/picosam' > abiessmann@punisher % PATH=$ARMv5_PATH:$PATH > CROSS_COMPILE=arm-v5te-linux-gnueabi- make O=/tmp/picosam > SOURCE_DATE_EPOCH="0" ARCH=arm include/generated/timestamp_autogenerated.h > make[1]: Entering directory '/tmp/picosam' > /home/abiessmann/src/u-boot/Makefile:1304: *** "Your gdate/date.gnu/date does > not support the '-u' and '-d' switches like GNU date does!". Stop. > make[1]: Leaving directory '/tmp/picosam' > Makefile:146: recipe for target 'sub-make' failed > make: *** [sub-make] Error 2 > --->8--- > > It applies on top of http://patchwork.ozlabs.org/patch/506856/ (Makefile: Use > correct timezone for U_BOOT_TZ). > > 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? 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} 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). > 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"'; \ > + LC_ALL=C $(DATE) -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ > "%z"'; \ > else \ > LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \ > LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \ > @@ -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) > > # ---------------------------------------------------------------------------
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Reproducible-builds mailing list Reproducible-builds@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds