Source: freefem++
Version: 3.45-1
Severity: wishlist
Tags: patch upstream
User: reproducible-builds@lists.alioth.debian.org
Usertags: fileordering timestamps
X-Debbugs-Cc: reproducible-builds@lists.alioth.debian.org

Dear Maintainer,

While working on the “reproducible builds” effort [1], we have noticed
that 'freefem++' could not be built reproducibly.

The attached patch fixes the order in which files are included in the
edp files, and honours SOURCE_DATE_EPOCH [2] when using the build date.
Once applied, freefem++ can be built reproducibly in our current
experimental framework.

Regards,
Alexis Bienvenüe.

 [1]: https://wiki.debian.org/ReproducibleBuilds
 [2]: https://reproducible-builds.org/specs/source-date-epoch/





diff -Nru freefem++-3.45/debian/changelog freefem++-3.45/debian/changelog
--- freefem++-3.45/debian/changelog	2016-03-19 23:24:48.000000000 +0100
+++ freefem++-3.45/debian/changelog	2016-04-12 19:10:09.000000000 +0200
@@ -1,3 +1,10 @@
+freefem++ (3.45-1.0~reproducible1) unstable; urgency=medium
+
+  * Set ls locale in Makefiles, for reproducible order.
+  * Honours SOURCE_DATE_EPOCH to date the build.
+
+ -- Alexis Bienvenüe <p...@passoire.fr>  Tue, 12 Apr 2016 19:10:09 +0200
+
 freefem++ (3.45-1) unstable; urgency=medium
 
   * Imported Upstream version 3.45
diff -Nru freefem++-3.45/debian/patches/build_date_from_SOURCE_DATE_EPOCH.patch freefem++-3.45/debian/patches/build_date_from_SOURCE_DATE_EPOCH.patch
--- freefem++-3.45/debian/patches/build_date_from_SOURCE_DATE_EPOCH.patch	1970-01-01 01:00:00.000000000 +0100
+++ freefem++-3.45/debian/patches/build_date_from_SOURCE_DATE_EPOCH.patch	2016-04-12 18:49:38.000000000 +0200
@@ -0,0 +1,55 @@
+Description: Get build date from SOURCE_DATE_EPOCH
+ Get build date from SOURCE_DATE_EPOCH (if set), to make the build
+ reproducible.
+Author: Alexis Bienvenüe <p...@passoire.fr>
+
+Index: freefem++-3.45/configure.ac
+===================================================================
+--- freefem++-3.45.orig/configure.ac
++++ freefem++-3.45/configure.ac
+@@ -128,8 +128,12 @@ m4_define([TOOL_DISABLE],
+     TOOL_PARAMETERS($1,$2,$3)
+ ])
+ 
++SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}"
++FF_DATE=$(date -u -d "@$SOURCE_DATE_EPOCH" "+%Y-%m-%d" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "+%Y-%m-%d" 2>/dev/null || date -u "+%Y-%m-%d")
++AC_SUBST(FF_DATE,$FF_DATE)
++
+ ff_HOSTARCH_pastix=
+-echo "#  Build with freefem++ with ./configure " `date`  >$ff_where_lib_conf
++echo "#  Build with freefem++ with ./configure $FF_DATE"  >$ff_where_lib_conf
+ # To allow anonymous CVS version to contain a "./configure" and
+ # Makefiles
+ 
+@@ -600,7 +604,6 @@ ff_prefix_dir="${prefix}/lib/ff++/$VERSI
+ AC_MSG_CHECKING(prefix dir freefem++  )
+ AC_MSG_RESULT($ff_prefix_dir)
+ 
+-FF_DATE=`date`
+ AC_DEFINE_UNQUOTED(VersionFreeFemDate,"$FF_DATE",FreeFem++ build date)
+ AC_DEFINE_UNQUOTED(FF_PREFIX_DIR,"${ff_prefix_dir}",FreeFem prefix  dir)
+ AC_SUBST(ff_prefix_dir,$ff_prefix_dir)
+Index: freefem++-3.45/src/fflib/Makefile.am
+===================================================================
+--- freefem++-3.45.orig/src/fflib/Makefile.am
++++ freefem++-3.45/src/fflib/Makefile.am
+@@ -64,5 +64,5 @@ AM_CPPFLAGS=-I$(srcdir)/../lglib -I$(src
+ EXTRA_DIST=strversionnumber.m4
+ BUILT_SOURCES=strversionnumber.cpp
+ strversionnumber.cpp: $(libff_a_SOURCES2) ../../configure
+-	m4 -DVersionFreeFemDate="`date`" strversionnumber.m4 > $@
++	m4 -DVersionFreeFemDate="@FF_DATE@" strversionnumber.m4 > $@
+ FORCE:
+Index: freefem++-3.45/src/medit/Makefile.am
+===================================================================
+--- freefem++-3.45.orig/src/medit/Makefile.am
++++ freefem++-3.45/src/medit/Makefile.am
+@@ -17,7 +17,7 @@ LDADD=picking.$(OBJEXT) ../libMesh/libMe
+ AM_CPPFLAGS=-I$(srcdir)/../libMesh
+ BUILT_SOURCES=compil.date
+ compil.date: $(ffmedit_SOURCES)
+-	echo "#define COMPIL " '"' `date` '(with ff++ $(VERSION))''"' > compil.date
++	echo "#define COMPIL " '" @FF_DATE@ (with ff++ $(VERSION))"' > compil.date
+ #.PHONY: compil.date
+ 
+ # ALH - during a parallel make, we should make sure that picking.o is not used before being made by a different
diff -Nru freefem++-3.45/debian/patches/ls-locale.patch freefem++-3.45/debian/patches/ls-locale.patch
--- freefem++-3.45/debian/patches/ls-locale.patch	1970-01-01 01:00:00.000000000 +0100
+++ freefem++-3.45/debian/patches/ls-locale.patch	2016-04-12 17:57:07.000000000 +0200
@@ -0,0 +1,85 @@
+Description: Set ls locale to C
+ Set ls locale to C, so that the order is always the same, whatever the
+ current locale is. This makes the build reproducible.
+Author: Alexis Bienvenüe <p...@passoire.fr>
+
+--- freefem++-3.45.orig/examples++-3d/Makefile.am
++++ freefem++-3.45/examples++-3d/Makefile.am
+@@ -16,7 +16,7 @@ EXTRA_DIST=*.edp  all.edp regtests.edp r
+ 
+ all.edp:  Makefile
+ 	(echo "NoGraphicWindow=true;NoUseOfWait=true;int verbosityy=verbosity;int MEM1234=storageused();"; \
+-	for i in *`ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
++	for i in `LC_ALL=C ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
+ 		echo ' cout << "--------- file : '$$i' --------------------------------------------------------" << endl;' ;\
+ 		echo "verbosity=verbosityy;searchMethod=0;" ; \
+ 		echo \{ include \"$$i\"\;\}\; ;\
+--- freefem++-3.45.orig/examples++-chapt3/Makefile.am
++++ freefem++-3.45/examples++-chapt3/Makefile.am
+@@ -11,7 +11,7 @@ TESTS_ENVIRONMENT=TEST_FFPP=$(TEST_FFPP)
+ 
+ all.edp:
+ 	(echo "NoUseOfWait=true;int verbosityy=verbosity;"; \
+-	for i in *`ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
++	for i in `LC_ALL=C ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
+ 		echo ' cout << "--------- file : '$$i' --------------------------------------------------------" << endl;' ;\
+ 		echo "verbosity=verbosityy;" ; \
+ 		echo \{ include \"$$i\"\;\}\; ;\
+@@ -32,4 +32,4 @@ freefem++.pref:
+ 	echo loadpath = \"../examples++-load/\" >freefem++.pref
+ 	echo loadpath += \"./\" >>freefem++.pref
+ 
+-FORCE:
+\ No newline at end of file
++FORCE:
+--- freefem++-3.45.orig/examples++-eigen/Makefile.am
++++ freefem++-3.45/examples++-eigen/Makefile.am
+@@ -11,7 +11,7 @@ EXTRA_DIST=*.edp all.edp
+ 
+ all.edp:
+ 	(echo "NoUseOfWait=true;int verbosityy=verbosity;"; \
+-	for i in *`ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
++	for i in `LC_ALL=C ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
+ 		echo ' cout << "--------- file : '$$i' --------------------------------------------------------" << endl;' ;\
+ 		echo "verbosity=verbosityy;" ; \
+ 		echo \{ include \"$$i\"\;\}\; ;\
+--- freefem++-3.45.orig/examples++-load/Makefile.am
++++ freefem++-3.45/examples++-load/Makefile.am
+@@ -163,7 +163,7 @@ all-local: all.edp regtests.edp load_com
+ 
+ all.edp:
+ 	@(echo "NoGraphicWindow=true;NoUseOfWait=true;int verbosityy=verbosity;"; \
+-	for i in *`ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
++	for i in `LC_ALL=C ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
+ 	    if ../src/nw/FreeFem++ -ns -jc -v 0 $$i  1>/dev/null 2>/dev/null ; then \
+ 		echo ' cout << "--------- file : '$$i' --------------------------------------------------------" << endl;' ;\
+ 		echo "verbosity=verbosityy;" ; \
+--- freefem++-3.45.orig/examples++-tutorial/Makefile.am
++++ freefem++-3.45/examples++-tutorial/Makefile.am
+@@ -12,7 +12,7 @@ EXTRA_DIST=*.edp *.idp aile.msh xyf all.
+ 
+ all.edp:
+ 	(echo "NoUseOfWait=true;int verbosityy=verbosity;"; \
+-	for i in *`ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
++	for i in `LC_ALL=C ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
+ 		echo ' cout << "--------- file : '$$i' --------------------------------------------------------" << endl;' ;\
+ 		echo "verbosity=verbosityy;" ; \
+ 		echo \{ include \"$$i\"\;\}\; ;\
+@@ -44,4 +44,4 @@ Laplace_SOURCES=Laplace.cpp
+ # To check the scripts against their reference values
+ regtests.edp: regtests.m4 ../regtests.m4
+ 	m4 -DASSERT regtests.m4 > regtests.edp
+-FORCE:
+\ No newline at end of file
++FORCE:
+--- freefem++-3.45.orig/examples++/Makefile.am
++++ freefem++-3.45/examples++/Makefile.am
+@@ -10,7 +10,7 @@ EXTRA_DIST=*.edp all.edp regtests.edp re
+ 
+ all.edp:
+ 	(echo "NoUseOfWait=true;int verbosityy=verbosity;"; \
+-	for i in *`ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
++	for i in `LC_ALL=C ls *.edp|grep -v -E '^(all|regtests|makeref|ref)\.edp$$'` ; do  \
+ 		echo ' cout << "--------- file : '$$i' --------------------------------------------------------" << endl;' ;\
+ 		echo "verbosity=verbosityy;" ; \
+ 		echo \{ include \"$$i\"\;\}\; ;\
diff -Nru freefem++-3.45/debian/patches/series freefem++-3.45/debian/patches/series
--- freefem++-3.45/debian/patches/series	2016-02-27 14:33:35.000000000 +0100
+++ freefem++-3.45/debian/patches/series	2016-04-12 18:48:47.000000000 +0200
@@ -1,3 +1,5 @@
 examples++-load.patch
 examples-bamg.patch
 Makefile.patch
+ls-locale.patch
+build_date_from_SOURCE_DATE_EPOCH.patch
_______________________________________________
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Reply via email to