Source: pyqt5
Version: 5.4.1+dfsg-2
Severity: wishlist
Tags: patch
User: reproducible-builds@lists.alioth.debian.org
Usertags: randomness toolchain
X-Debbugs-CC: reproducible-builds@lists.alioth.debian.org

Hi!

While working on Debian's “reproducible builds” effort [1], we have
noticed that pyuic doesn't sort the order of imported modules in
generated UI files.
The attached patch fixes this.

Regards,
 Reiner

[1]: https://wiki.debian.org/ReproducibleBuilds

diff --git a/debian/patches/series b/debian/patches/series
index 556cb6c..e32acdc 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 uiparser_setzorder_fix.diff
+sort_imports.diff
diff --git a/debian/patches/sort_imports.diff b/debian/patches/sort_imports.diff
new file mode 100644
index 0000000..88a53dd
--- /dev/null
+++ b/debian/patches/sort_imports.diff
@@ -0,0 +1,31 @@
+Author: Reiner Herrmann <rei...@reiner-h.de>
+Description: sort imported modules to get reproducible output
+
+Index: pyqt5-5.4.1+dfsg/pyuic/uic/Compiler/compiler.py
+===================================================================
+--- pyqt5-5.4.1+dfsg.orig/pyuic/uic/Compiler/compiler.py
++++ pyqt5-5.4.1+dfsg/pyuic/uic/Compiler/compiler.py
+@@ -114,7 +114,7 @@ class UICompiler(UIParser):
+ 
+         self.factory._cpolicy._writeOutImports()
+ 
+-        for res in self._resources:
++        for res in sorted(self._resources):
+             write_import(res, from_imports)
+ 
+         return {"widgetname": str(w),
+Index: pyqt5-5.4.1+dfsg/pyuic/uic/Compiler/qobjectcreator.py
+===================================================================
+--- pyqt5-5.4.1+dfsg.orig/pyuic/uic/Compiler/qobjectcreator.py
++++ pyqt5-5.4.1+dfsg/pyuic/uic/Compiler/qobjectcreator.py
+@@ -132,8 +132,8 @@ class _CustomWidgetLoader(object):
+             _, module = self._widgets[widget]
+             imports.setdefault(module, []).append(widget)
+ 
+-        for module, classes in imports.items():
+-            write_code("from %s import %s" % (module, ", ".join(classes)))
++        for module, classes in sorted(imports.items()):
++            write_code("from %s import %s" % (module, ", ".join(sorted(classes))))
+ 
+ 
+ class CompilerCreatorPolicy(object):

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
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