This adds the ability to patch setuptools (and pip), and adds 3 reproducibility patches from Debian[1]. (003-PKG-INFO-output-reproducible.patch addresses the issue identified in #9039.) The patching is not perfect, in that the patches are applied to setuptools and pip after they have been installed, since they are installed from wheels which are already "precompiled". Also, patching for the host install cannot be updated in place, for example if a patch is added or removed. [1]: https://sources.debian.org/patches/python-setuptools/40.8.0-1/ Signed-off-by: Jeffery To <jeffery.to@gmail.com>lilik-openwrt-22.03
@ -0,0 +1,16 @@ | |||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=848136 | |||||
https://sources.debian.org/patches/python-setuptools/40.8.0-1/reproducible.diff/ | |||||
Index: b/setuptools/command/easy_install.py | |||||
=================================================================== | |||||
--- a/setuptools/command/easy_install.py | |||||
+++ b/setuptools/command/easy_install.py | |||||
@@ -436,7 +436,7 @@ consider to install to another location, | |||||
for spec in self.args: | |||||
self.easy_install(spec, not self.no_deps) | |||||
if self.record: | |||||
- outputs = self.outputs | |||||
+ outputs = list(sorted(self.outputs)) | |||||
if self.root: # strip any package prefix | |||||
root_len = len(self.root) | |||||
for counter in range(len(outputs)): |
@ -0,0 +1,16 @@ | |||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=804249 | |||||
https://sources.debian.org/patches/python-setuptools/40.8.0-1/sorted-requires.diff/ | |||||
Index: b/setuptools/command/egg_info.py | |||||
=================================================================== | |||||
--- a/setuptools/command/egg_info.py | |||||
+++ b/setuptools/command/egg_info.py | |||||
@@ -621,7 +621,7 @@ def warn_depends_obsolete(cmd, basename, | |||||
def _write_requirements(stream, reqs): | |||||
lines = yield_lines(reqs or ()) | |||||
append_cr = lambda line: line + '\n' | |||||
- lines = map(append_cr, lines) | |||||
+ lines = map(append_cr, sorted(lines)) | |||||
stream.writelines(lines) | |||||
@ -0,0 +1,14 @@ | |||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=894215 | |||||
https://sources.debian.org/patches/python-setuptools/40.8.0-1/PKG-INFO-output-reproducible.diff/ | |||||
--- a/setuptools/dist.py | |||||
+++ b/setuptools/dist.py | |||||
@@ -191,7 +191,7 @@ def write_pkg_file(self, file): | |||||
self.long_description_content_type | |||||
) | |||||
if self.provides_extras: | |||||
- for extra in self.provides_extras: | |||||
+ for extra in sorted(self.provides_extras): | |||||
write_field('Provides-Extra', extra) | |||||
@ -0,0 +1,16 @@ | |||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=848136 | |||||
https://sources.debian.org/patches/python-setuptools/40.8.0-1/reproducible.diff/ | |||||
Index: b/setuptools/command/easy_install.py | |||||
=================================================================== | |||||
--- a/setuptools/command/easy_install.py | |||||
+++ b/setuptools/command/easy_install.py | |||||
@@ -436,7 +436,7 @@ consider to install to another location, | |||||
for spec in self.args: | |||||
self.easy_install(spec, not self.no_deps) | |||||
if self.record: | |||||
- outputs = self.outputs | |||||
+ outputs = list(sorted(self.outputs)) | |||||
if self.root: # strip any package prefix | |||||
root_len = len(self.root) | |||||
for counter in range(len(outputs)): |
@ -0,0 +1,16 @@ | |||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=804249 | |||||
https://sources.debian.org/patches/python-setuptools/40.8.0-1/sorted-requires.diff/ | |||||
Index: b/setuptools/command/egg_info.py | |||||
=================================================================== | |||||
--- a/setuptools/command/egg_info.py | |||||
+++ b/setuptools/command/egg_info.py | |||||
@@ -621,7 +621,7 @@ def warn_depends_obsolete(cmd, basename, | |||||
def _write_requirements(stream, reqs): | |||||
lines = yield_lines(reqs or ()) | |||||
append_cr = lambda line: line + '\n' | |||||
- lines = map(append_cr, lines) | |||||
+ lines = map(append_cr, sorted(lines)) | |||||
stream.writelines(lines) | |||||
@ -0,0 +1,14 @@ | |||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=894215 | |||||
https://sources.debian.org/patches/python-setuptools/40.8.0-1/PKG-INFO-output-reproducible.diff/ | |||||
--- a/setuptools/dist.py | |||||
+++ b/setuptools/dist.py | |||||
@@ -191,7 +191,7 @@ def write_pkg_file(self, file): | |||||
self.long_description_content_type | |||||
) | |||||
if self.provides_extras: | |||||
- for extra in self.provides_extras: | |||||
+ for extra in sorted(self.provides_extras): | |||||
write_field('Provides-Extra', extra) | |||||