Re: [Reproducible-builds] [RFC PATCH] Makefile: search for GNU date

2015-08-29 Thread Andreas Bießmann
Hi Marek,

On 08/27/2015 10:28 AM, Marek Vasut wrote:
 On Thursday, August 27, 2015 at 10:13:49 AM, Andreas Bießmann wrote:
 The SOURCE_DATE_EPOCH mechanism for reproducible builds requires the GNU
 variant of date.
 
 Why does it require the GNU date ?

Cause of the -d switch. It is used in GNU date variants to set the time
to print the string from. On the other hand *BSD variants use it to set
the DST flag.

 Respect this and search it, error on missing GNU date.
 
 Wouldn't it make more sense to fix the code to NOT depend on GNU extensions ?

That would be great, but so we need to check for the tool and use the
right switches depending on that.
I think forcing the user to provide the right tool here is Ok.

Best regards

Andreas

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds


Re: [Reproducible-builds] [RFC PATCH] Makefile: search for GNU date

2015-08-29 Thread Marek Vasut
On Thursday, August 27, 2015 at 10:13:49 AM, Andreas Bießmann wrote:
 The SOURCE_DATE_EPOCH mechanism for reproducible builds requires the GNU
 variant of date.

Why does it require the GNU date ?

 Respect this and search it, error on missing GNU date.

Wouldn't it make more sense to fix the code to NOT depend on GNU extensions ?

 Signed-off-by: Andreas Bießmann andreas.de...@googlemail.com

[...]

Best regards,
Marek Vasut

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds


Re: [Reproducible-builds] [RFC PATCH] Makefile: search for GNU date

2015-08-29 Thread Paul Kocialkowski
Le jeudi 27 août 2015 à 10:13 +0200, Andreas Bießmann a écrit :
 The SOURCE_DATE_EPOCH mechanism for reproducible builds requires the GNU
 variant of date. Respect this and search it, error on missing GNU date.

Well, IMHO we shouldn't check for GNU date but for the extensions it
implements. Those could be included in other date implementations. For
instance, it looks like busybox's date implements the -u and -d options
too.

 Signed-off-by: Andreas Bießmann andreas.de...@googlemail.com
 ---
 This commit tries to figure out if we have a GNU date variant
 available. It errors on missing GNU date when it is required (for
 SOURCE_DATE_EPOCH set). The result is:

Also, I don't think it should be up to the Makefile to figure out which
date binary to use. It should be up to the user to put the right one as
date, e.g. with an alias. That is, unless the name for GNU date is
something really standardized on non-GNU systems.

 ---8---
 abiessmann@punisher % PATH=$ARMv5_PATH:$PATH 
 CROSS_COMPILE=arm-v5te-linux-gnueabi- make SOURCE_DATE_EPOCH=`date -R` 
 O=/tmp/picosam ARCH=arm include/generated/timestamp_autogenerated.h
 make[1]: Entering directory '/tmp/picosam'
 /home/abiessmann/src/u-boot/Makefile:1303: *** No GNU date found.  Stop.
 make[1]: Leaving directory '/tmp/picosam'
 Makefile:146: recipe for target 'sub-make' failed
 make: *** [sub-make] Error 2
 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'
 ---8---
 
 It applies on top of http://patchwork.ozlabs.org/patch/506856/ (Makefile: Use 
 correct timezone for U_BOOT_TZ).
 
  Makefile | 14 +++---
  1 file changed, 11 insertions(+), 3 deletions(-)
 
 diff --git a/Makefile b/Makefile
 index b9b2375..95eae64 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -346,6 +346,9 @@ PERL  = perl
  PYTHON   = python
  DTC  = dtc
  CHECK= sparse
 +GNUDATE := $(foreach date,gdate date.gnu date, \
 + $(shell _date=`which $(date)`; \
 +   $${_date} --version 2 /dev/null | $(AWK) /GNU 
 coreutils/ { print \$${_date}\; }))

I advise running date with the needed options (-u -d) and checked the
error code instead of this. And of course, the variable names shouldn't
mention GNU date.

  CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
 -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
 @@ -1281,9 +1284,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 $(GNUDATE) -u -d $${SOURCE_DATE} +'#define 
 U_BOOT_DATE %b %d %C%y'; \
 + LC_ALL=C $(GNUDATE) -u -d $${SOURCE_DATE} +'#define 
 U_BOOT_TIME %T'; \
 + LC_ALL=C $(GNUDATE) -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 +1298,11 @@ $(version_h): include/config/uboot.release FORCE
   $(call filechk,version.h)
  
  $(timestamp_h): $(srctree)/Makefile FORCE
 +ifneq ($(strip $(SOURCE_DATE_EPOCH)),)
 +ifeq ($(strip $(GNUDATE)),)
 + $(error No GNU date found)
 +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

Re: [Reproducible-builds] [RFC PATCH] Makefile: search for GNU date

2015-08-29 Thread Marek Vasut
On Thursday, August 27, 2015 at 11:01:19 AM, Andreas Bießmann wrote:
 Hi Marek,

Hi!

 On 08/27/2015 10:28 AM, Marek Vasut wrote:
  On Thursday, August 27, 2015 at 10:13:49 AM, Andreas Bießmann wrote:
  The SOURCE_DATE_EPOCH mechanism for reproducible builds requires the GNU
  variant of date.
  
  Why does it require the GNU date ?
 
 Cause of the -d switch. It is used in GNU date variants to set the time
 to print the string from. On the other hand *BSD variants use it to set
 the DST flag.

This sort of stuff should be in the commit message :)

  Respect this and search it, error on missing GNU date.
  
  Wouldn't it make more sense to fix the code to NOT depend on GNU
  extensions ?
 
 That would be great, but so we need to check for the tool and use the
 right switches depending on that.
 I think forcing the user to provide the right tool here is Ok.

I think we don't have a better option here anyway, right ? Maybe try
checking uname ? But you can have linux with bsd userspace ... and
probably BSD with GNU userspace, meh.

Best regards,
Marek Vasut

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds