Source: azure-uamqp-python
Version: 1.2.6-1
Severity: wishlist
Tags: patch
User: reproducible-bui...@lists.alioth.debian.org
Usertags: filesystem buildpath
X-Debbugs-Cc: reproducible-b...@lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0] we noticed that
azure-uamqp-python could not be built reproducibly.

This is because it generated a .pyx file with the "#include"
directives in a nondeterminstic order as well as included metadata in
a ".c" file that embeded the absolute buildpath. However, it still
embeds the current build path in the binary via assert-like logging
messages ("LogError" IIRC).

Patch attached for the former two issues.


 [0] https://reproducible-builds.org/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      la...@debian.org / chris-lamb.co.uk
       `-
--- a/debian/patches/reproducible-build.patch   1969-12-31 16:00:00.000000000 
-0800
--- b/debian/patches/reproducible-build.patch   2020-02-25 08:40:37.020019063 
-0800
@@ -0,0 +1,24 @@
+Description: Make the build reproducible
+Author: Chris Lamb <la...@debian.org>
+Last-Update: 2020-02-25
+
+--- azure-uamqp-python-1.2.6.orig/setup.py
++++ azure-uamqp-python-1.2.6/setup.py
+@@ -45,7 +45,7 @@ cwd = os.path.abspath('.')
+ 
+ # Headers
+ 
+-pxd_inc_dir = os.path.join(cwd, "src", "vendor", "inc")
++pxd_inc_dir = os.path.join(".", "src", "vendor", "inc")
+ sys.path.insert(0, pxd_inc_dir)
+ 
+ include_dirs = [
+@@ -68,7 +68,7 @@ else:
+ 
+ def create_cython_file():
+     content_includes = ""
+-    for f in os.listdir("./src"):
++    for f in sorted(os.listdir("./src")):
+         if f.endswith(".pyx"):
+             print("Adding {}".format(f))
+             content_includes += "include \"src/" + f + "\"\n"
--- a/debian/patches/series     1969-12-31 16:00:00.000000000 -0800
--- b/debian/patches/series     2020-02-25 08:29:13.434683576 -0800
@@ -0,0 +1 @@
+reproducible-build.patch
--- a/setup.py  2020-02-25 08:08:37.986925148 -0800
--- b/setup.py  2020-02-25 08:47:27.151166104 -0800
@@ -45,7 +45,7 @@
 
 # Headers
 
-pxd_inc_dir = os.path.join(cwd, "src", "vendor", "inc")
+pxd_inc_dir = os.path.join(".", "src", "vendor", "inc")
 sys.path.insert(0, pxd_inc_dir)
 
 include_dirs = [
@@ -68,7 +68,7 @@
 
 def create_cython_file():
     content_includes = ""
-    for f in os.listdir("./src"):
+    for f in sorted(os.listdir("./src")):
         if f.endswith(".pyx"):
             print("Adding {}".format(f))
             content_includes += "include \"src/" + f + "\"\n"

Reply via email to