Source: freefem++ Version: 3.45-1 Severity: wishlist Tags: patch upstream User: reproducible-bui...@lists.alioth.debian.org Usertags: fileordering timestamps X-Debbugs-Cc: reproducible-bui...@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