Hi, here is an updated patch - it gets rid of filesystem and umask differences, 
which started cropping up. I think previously I was testing with an older 
version of reprotest, which didn't properly test these differences.

I also took the chance to refactor the rules file slightly, for readability.

X

-- 
GPG: ed25519/56034877E1F87C35
GPG: rsa4096/1318EFAC5FBBDBCE
https://github.com/infinity0/pubkeys.git
diff -Nru sensible-utils-0.0.9/debian/changelog sensible-utils-0.0.9.0~reproducible1/debian/changelog
--- sensible-utils-0.0.9/debian/changelog	2013-06-06 14:19:53.000000000 +0200
+++ sensible-utils-0.0.9.0~reproducible1/debian/changelog	2017-05-09 19:08:51.000000000 +0200
@@ -1,3 +1,18 @@
+sensible-utils (0.0.9.0~reproducible1) UNRELEASED; urgency=low
+
+  [ Jérémy Bobbio ]
+  * Make package build reproducibly:
+    - Stop recording current time when creating gzip files.
+    - Fix mtimes before creating binary packages.
+
+  [ Ximin Luo ]
+  * Make package build reproducible, pt 2:
+    - Sort file list, to avoid filesystem differences.
+    - Explicitly install every language man dir, to avoid umask differences.
+    - Slightly refactoring for readability.
+
+ -- Ximin Luo <infini...@debian.org>  Tue, 09 May 2017 19:08:51 +0200
+
 sensible-utils (0.0.9) unstable; urgency=low
 
   * Fix bashism in select-editor
diff -Nru sensible-utils-0.0.9/debian/rules sensible-utils-0.0.9.0~reproducible1/debian/rules
--- sensible-utils-0.0.9/debian/rules	2012-05-14 09:23:19.000000000 +0200
+++ sensible-utils-0.0.9.0~reproducible1/debian/rules	2017-05-09 19:05:54.000000000 +0200
@@ -9,6 +9,11 @@
 INSTALL_SCRIPT  = $(INSTALL) -p    -o root -g root  -m  755
 INSTALL_DIR     = $(INSTALL) -p -d -o root -g root  -m  755
 
+MAN_LANGS = de es fr it ja pl
+MAN_DIRS = $(MAN_LANGS:%=debian/sensible-utils/usr/share/man/%/man1)
+
+BUILD_DATE := $(shell dpkg-parsechangelog | sed -n -e 's/^Date: //p')
+
 DEB_BUILD_ARCH_OS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS)
 DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
 DEB_HOST_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
@@ -52,41 +57,30 @@
 	$(INSTALL_DIR) debian/sensible-utils/DEBIAN \
 		       debian/sensible-utils/usr/bin \
 		       debian/sensible-utils/usr/share/man/man1 \
+		       $(MAN_DIRS) \
 		       debian/sensible-utils/usr/lib/mime/packages \
 		       debian/sensible-utils/usr/share/doc/$(package)
 	$(MAKE) install DESTDIR=$(CURDIR)/debian/sensible-utils INSTALL_PROGRAM="$(INSTALL_PROGRAM)"
 
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/fr/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/fr/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/pl/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/pl/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/es/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/es/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/de/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/de/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/ja/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/ja/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/it/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/it/man1/sensible-browser.1.gz
+	set -e; for i in "" $(MAN_LANGS); do \
+		ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/$$i/man1/sensible-pager.1.gz; \
+		ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/$$i/man1/sensible-browser.1.gz; \
+	done
 	$(INSTALL_FILE) debian/changelog debian/sensible-utils/usr/share/doc/$(package)
 	find debian/sensible-utils/usr/share/man/man1 \
-	     debian/sensible-utils/usr/share/man/es/man1 \
-	     debian/sensible-utils/usr/share/man/fr/man1 \
-	     debian/sensible-utils/usr/share/man/pl/man1 \
-	     debian/sensible-utils/usr/share/man/de/man1 \
-	     debian/sensible-utils/usr/share/man/ja/man1 \
-	     debian/sensible-utils/usr/share/man/it/man1 \
-             debian/sensible-utils/usr/share/doc/$(package) -type f | xargs gzip -9
+	     $(MAN_DIRS) \
+	     debian/sensible-utils/usr/share/doc/$(package) -type f | xargs gzip -9n
 	$(INSTALL_FILE) debian/copyright debian/sensible-utils/usr/share/doc/$(package)
 	$(INSTALL_SCRIPT) debian/postinst debian/sensible-utils/DEBIAN/
 	$(INSTALL_SCRIPT) debian/postrm debian/sensible-utils/DEBIAN/
 	$(INSTALL_FILE) debian/mime debian/sensible-utils/usr/lib/mime/packages/sensible-utils
 
-	cd debian/sensible-utils && find * -type f ! -regex '^DEBIAN/.*' -print0 | xargs -r0 md5sum > DEBIAN/md5sums
+	cd debian/sensible-utils && find * -type f ! -regex '^DEBIAN/.*' -print0 | \
+	     LC_ALL=C.UTF-8 sort -z | xargs -r0 md5sum > DEBIAN/md5sums
 
 	dpkg-gencontrol -Pdebian/sensible-utils
+	find debian/sensible-utils -depth -newermt '$(BUILD_DATE)' -print0 | \
+		xargs -0r touch --no-dereference --date='$(BUILD_DATE)'
 	dpkg --build debian/sensible-utils ..
 
 define checkdir

Reply via email to