Source: kannel
Version: 1.4.4-2
Severity: wishlist
Tags: patch
User: reproducible-bui...@lists.alioth.debian.org
Usertags: timestamps
X-Debbugs-Cc: reproducible-bui...@lists.alioth.debian.org

Dear Maintainer,

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

The attached patch makes sure that a fixed date timestamp is used in the
documentation (taken from the last d/changelog entry), so the build date
does not appear anywhere in the output. It also removes the build date
from the return value of version_report_string.

Note than timestamps also appear in postscript files built from FIG and
PNG files from the source tree (as CreationDate meta data). However,
once transfig and imagemagick (which are used for these conversions)
honour the SOURCE_DATE_EPOCH environment variable, these timestamps will
also be replaced by a fixed date.

Once applied, and once bugs #819911 and #819914 regarding transfig and
imagemagick will be resolved in the experimental toolchain, kannel can
be built reproducibly in our current experimental framework.

Regards,
Alexis Bienvenüe.

 [1]: https://wiki.debian.org/ReproducibleBuilds
diff -Nru kannel-1.4.4/debian/changelog kannel-1.4.4/debian/changelog
--- kannel-1.4.4/debian/changelog	2015-11-23 11:09:32.000000000 +0100
+++ kannel-1.4.4/debian/changelog	2016-04-02 14:46:03.000000000 +0200
@@ -1,3 +1,10 @@
+kannel (1.4.4-2.0~reproducible1) unstable; urgency=medium
+
+  * Reproducible build
+  * Uses dh-autoreconf, see https://wiki.debian.org/Autoreconf
+
+ -- Alexis Bienvenüe <p...@passoire.fr>  Sat, 02 Apr 2016 09:38:02 +0200
+
 kannel (1.4.4-2) unstable; urgency=medium
 
   * Fix Vcs-* field URLs. Closes: bug#793981.
diff -Nru kannel-1.4.4/debian/control kannel-1.4.4/debian/control
--- kannel-1.4.4/debian/control	2015-11-23 11:03:33.000000000 +0100
+++ kannel-1.4.4/debian/control	2016-04-02 14:46:24.000000000 +0200
@@ -6,6 +6,7 @@
  Paul Dwerryhouse <p...@dwerryhouse.com.au>
 Build-Depends: cdbs,
  debhelper,
+ dh-autoreconf,
  libxml2-dev,
  libssl-dev,
  openssl,
diff -Nru kannel-1.4.4/debian/patches/35_use_changelog_date_in_doc.patch kannel-1.4.4/debian/patches/35_use_changelog_date_in_doc.patch
--- kannel-1.4.4/debian/patches/35_use_changelog_date_in_doc.patch	1970-01-01 01:00:00.000000000 +0100
+++ kannel-1.4.4/debian/patches/35_use_changelog_date_in_doc.patch	2016-04-02 15:05:46.000000000 +0200
@@ -0,0 +1,139 @@
+Description: Use debian changelog date in doc
+ Uses the date from SOURCE_DATE_EPOCH in documentation,
+ instead of current date.
+Author: Alexis Bienvenüe <p...@passoire.fr>
+
+--- kannel-1.4.4.orig/Makefile.in
++++ kannel-1.4.4/Makefile.in
+@@ -60,6 +60,7 @@ PACKAGE = @PACKAGE@
+ RANLIB = @RANLIB@
+ SHELL = @SHELL@
+ VERSION = @VERSION@
++BUILD_DATE = @BUILD_DATE@
+ SUFFIX = @SUFFIX@
+ LEX = @LEX@
+ PERL = @PERL@
+@@ -179,17 +180,17 @@ figs = $(figsrcs:.fig=.png)  $(figsrcs:.
+ .SUFFIXES: $(SUFFIXES) .xml .html .rtf .ps .fig .png .y .c .i .o .pdf
+ 
+ .xml.html:
+-	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	${JADE} -V nochunks -t sgml -d $(HTML_DSL) $(XML_DCL) $*.tmp > $@
+ 	rm -f $*.tmp
+ 
+ .xml.rtf:
+-	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	cd `dirname $<` && $(JADE) -o `basename $*`.rtf -t rtf -d $(TEX_DSL) $(XML_DCL) `basename $*`.tmp
+ 	rm -f $*.tmp
+ 
+ .xml.ps:
+-	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	$(JADE) -o $*.tex -t tex -d $(TEX_DSL) $(XML_DCL) $*.tmp
+ 	rm -f $*.tmp
+ 	cd `dirname $<` && $(JADETEX) `basename $*`.tex >/dev/null || true
+@@ -201,7 +202,7 @@ figs = $(figsrcs:.fig=.png)  $(figsrcs:.
+ 	rm -f $*.dvi $*.tex $*.aux 
+ 
+ .xml.pdf:
+-	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	$(JADE) -o $*.tex -t tex -d $(TEX_DSL) $(XML_DCL) $*.tmp
+ 	rm -f $*.tmp
+ 	cd `dirname $<` && $(JADETEX) `basename $*`.tex >/dev/null || true
+--- kannel-1.4.4.orig/addons/opensmppbox/Makefile.am
++++ kannel-1.4.4/addons/opensmppbox/Makefile.am
+@@ -6,6 +6,7 @@ rpmtemp = /tmp/opensmppbox-rpm
+ DOCSTARGET=@DOCSTARGET@
+ DOCDRAFTS=@DOCDRAFTS@
+ RPMPKG=opensmppbox-@PACKAGE_VERSION@
++BUILD_DATE=@BUILD_DATE@
+ 
+ pssrcs = $(wildcard doc/*.png)
+ ps = $(pssrcs:.png=.ps)  
+@@ -14,17 +15,17 @@ figsrcs = $(wildcard doc/*.fig)
+ figs = $(figsrcs:.fig=.png)  $(figsrcs:.fig=.ps)
+ 
+ .xml.html:
+-	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	${JADE} -V nochunks -t sgml -d $(HTML_DSL) $(XML_DCL) $*.tmp > $@
+ 	rm -f $*.tmp
+ 
+ .xml.rtf:
+-	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	cd `dirname $<` && $(JADE) -o `basename $*`.rtf -t rtf -d $(TEX_DSL) $(XML_DCL) `basename $*`.tmp
+ 	rm -f $*.tmp
+ 
+ .xml.ps:
+-	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	$(JADE) -o $*.tex -t tex -d $(TEX_DSL) $(XML_DCL) $*.tmp
+ 	rm -f $*.tmp
+ 	cd `dirname $<` && $(JADETEX) `basename $*`.tex >/dev/null || true
+@@ -36,7 +37,7 @@ figs = $(figsrcs:.fig=.png)  $(figsrcs:.
+ 	rm -f $*.dvi $*.tex $*.aux 
+ 
+ .xml.pdf:
+-	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	$(JADE) -o $*.tex -t tex -d $(TEX_DSL) $(XML_DCL) $*.tmp
+ 	rm -f $*.tmp
+ 	cd `dirname $<` && $(JADETEX) `basename $*`.tex >/dev/null || true
+--- kannel-1.4.4.orig/addons/sqlbox/Makefile.am
++++ kannel-1.4.4/addons/sqlbox/Makefile.am
+@@ -6,6 +6,7 @@ rpmtemp = /tmp/sqlbox-rpm
+ DOCSTARGET=@DOCSTARGET@
+ DOCDRAFTS=@DOCDRAFTS@
+ RPMPKG=sqlbox-@PACKAGE_VERSION@
++BUILD_DATE=@BUILD_DATE@
+ 
+ pssrcs = $(wildcard doc/*.png)
+ ps = $(pssrcs:.png=.ps)  
+@@ -14,17 +15,17 @@ figsrcs = $(wildcard doc/*.fig)
+ figs = $(figsrcs:.fig=.png)  $(figsrcs:.fig=.ps)
+ 
+ .xml.html:
+-	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	${JADE} -V nochunks -t sgml -d $(HTML_DSL) $(XML_DCL) $*.tmp > $@
+ 	rm -f $*.tmp
+ 
+ .xml.rtf:
+-	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	cd `dirname $<` && $(JADE) -o `basename $*`.rtf -t rtf -d $(TEX_DSL) $(XML_DCL) `basename $*`.tmp
+ 	rm -f $*.tmp
+ 
+ .xml.ps:
+-	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.ps/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	$(JADE) -o $*.tex -t tex -d $(TEX_DSL) $(XML_DCL) $*.tmp
+ 	rm -f $*.tmp
+ 	cd `dirname $<` && $(JADETEX) `basename $*`.tex >/dev/null || true
+@@ -36,7 +37,7 @@ figs = $(figsrcs:.fig=.png)  $(figsrcs:.
+ 	rm -f $*.dvi $*.tex $*.aux 
+ 
+ .xml.pdf:
+-	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/`date +%Y.%m.%d`/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
++	sed "s/#FIGTYPE#/.png/;s/#VERSION#/${VERSION}/;s/#DATE#/${BUILD_DATE}/;s/#DRAFTS#/${DOCDRAFTS}/" $< > $*.tmp
+ 	$(JADE) -o $*.tex -t tex -d $(TEX_DSL) $(XML_DCL) $*.tmp
+ 	rm -f $*.tmp
+ 	cd `dirname $<` && $(JADETEX) `basename $*`.tex >/dev/null || true
+--- kannel-1.4.4.orig/configure.in
++++ kannel-1.4.4/configure.in
+@@ -71,6 +71,11 @@ AC_CONFIG_AUX_DIR(.)
+ AC_SET_TERMINAL_SEQUENCES()
+ AC_CONFIG_NICE(config.nice)
+ 
++dnl Set build date from SOURCE_DATE_EPOCH or current date
++SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}"
++BUILD_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(BUILD_DATE)
++
+ dnl Check gateway version number.
+ VERSION=`head -n 1 VERSION`
+ if test "x$VERSION" = "xsvn"; then
diff -Nru kannel-1.4.4/debian/patches/36_strip_date_from_version_report_string.patch kannel-1.4.4/debian/patches/36_strip_date_from_version_report_string.patch
--- kannel-1.4.4/debian/patches/36_strip_date_from_version_report_string.patch	1970-01-01 01:00:00.000000000 +0100
+++ kannel-1.4.4/debian/patches/36_strip_date_from_version_report_string.patch	2016-04-02 14:45:27.000000000 +0200
@@ -0,0 +1,28 @@
+Description: Strip build date from version_report_string
+ Strip the build date from the version_report_string return value,
+ for reproducibility reasons.
+Author: Alexis Bienvenüe <p...@passoire.fr>
+
+--- kannel-1.4.4.orig/gwlib/utils.c
++++ kannel-1.4.4/gwlib/utils.c
+@@ -553,7 +553,7 @@ Octstr *version_report_string(const char
+     struct utsname u;
+ 
+     uname(&u);
+-    return octstr_format(GW_NAME " %s version `%s'.\nBuild `%s', compiler `%s'.\n"
++    return octstr_format(GW_NAME " %s version `%s'.\nCompiler `%s'.\n"
+                          "System %s, release %s, version %s, machine %s.\n"
+              "Hostname %s, IP %s.\n"
+              "Libxml version %s.\n"
+@@ -589,10 +589,9 @@ Octstr *version_report_string(const char
+              "Using %s malloc.\n",
+              boxname, GW_VERSION,
+ #ifdef __GNUC__ 
+-             (__DATE__ " " __TIME__) ,
+              __VERSION__,
+ #else 
+-             "unknown" , "unknown",
++             "unknown",
+ #endif 
+              u.sysname, u.release, u.version, u.machine,
+              octstr_get_cstr(get_official_name()),
diff -Nru kannel-1.4.4/debian/patches/series kannel-1.4.4/debian/patches/series
--- kannel-1.4.4/debian/patches/series	2015-08-02 10:52:45.000000000 +0200
+++ kannel-1.4.4/debian/patches/series	2016-04-02 14:45:27.000000000 +0200
@@ -1,2 +1,4 @@
 33_docpatch.patch
 34_sqlite3_libversion.patch
+35_use_changelog_date_in_doc.patch
+36_strip_date_from_version_report_string.patch
diff -Nru kannel-1.4.4/debian/rules kannel-1.4.4/debian/rules
--- kannel-1.4.4/debian/rules	2015-11-22 20:43:35.000000000 +0100
+++ kannel-1.4.4/debian/rules	2016-04-02 14:46:14.000000000 +0200
@@ -1,8 +1,11 @@
 #!/usr/bin/make -f
 
+export AUTOHEADER = true
+
 include /usr/share/cdbs/1/rules/upstream-tarball.mk
 include /usr/share/cdbs/1/class/autotools.mk
 include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/rules/autoreconf.mk
 
 DEB_UPSTREAM_PACKAGE = gateway
 DEB_UPSTREAM_URL = http://www.kannel.org/download/$(DEB_UPSTREAM_VERSION)

Reply via email to