Package: setuptools Version: 80.9.0-2 Severity: normal Tags: patch User: [email protected] Usertags: origin-ubuntu resolute ubuntu-patch
Dear Maintainer, With the transition to python 3.14, builds of python extensions might fail on multi-core system because of a race condition in distutils (used by setuptools). This issue has been reported upstream and a fix is being proposed: https://github.com/pypa/distutils/pull/393 On affected python extension is libvirt-python package with following build error: --- aarch64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,--package-metadata={%22type%22:%22deb%22%2C%22os%22:%22ubuntu%22%2C%22name%22:%22python3.13%22%2C%22version%22:%223.13.11-1%22%2C%22architecture%22:%22arm64%22} -Wl,-z,relro -g -fwrapv -O2 -Wl,-Bsymbolic-functions -Wl,--package-metadata=%7B%22type%22:%22deb%22%2C%22os%22:%22ubuntu%22%2C%22name%22:%22libvirt-python%22%2C%22version%22:%2212.0.0-1%22%2C%22architecture%22:%22arm64%22%7D -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,-z,now -g -O2 -Werror=implicit-function-declaration -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fdebug-prefix-map=/<<PKGBUILDDIR>>=/usr/src/libvirt-python-12.0.0-1 -Wdate-time -D_FORTIFY_SOURCE=3 build/temp.linux-aarch64-cpython-313/build/libvirt-qemu.o build/temp.linux-aarch64-cpython-313/libvirt-qemu-override.o build/temp.linux-aarch64-cpython-313/libvirt-utils.o build/temp.linux-aarch64-cpython-313/typewrappers.o -L/usr/lib/aarch64-linux-gnu -lvirt-qemu -lvirt -o build/lib.linux-aarch64-cpython-313/libvirtmod_qemu.cpython-313-aarch64-linux-gnu.so aarch64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,--package-metadata={%22type%22:%22deb%22%2C%22os%22:%22ubuntu%22%2C%22name%22:%22python3.13%22%2C%22version%22:%223.13.11-1%22%2C%22architecture%22:%22arm64%22} -Wl,-z,relro -g -fwrapv -O2 -Wl,-Bsymbolic-functions -Wl,--package-metadata=%7B%22type%22:%22deb%22%2C%22os%22:%22ubuntu%22%2C%22name%22:%22libvirt-python%22%2C%22version%22:%2212.0.0-1%22%2C%22architecture%22:%22arm64%22%7D -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,-z,now -g -O2 -Werror=implicit-function-declaration -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fdebug-prefix-map=/<<PKGBUILDDIR>>=/usr/src/libvirt-python-12.0.0-1 -Wdate-time -D_FORTIFY_SOURCE=3 build/temp.linux-aarch64-cpython-313/build/libvirt-lxc.o build/temp.linux-aarch64-cpython-313/libvirt-lxc-override.o build/temp.linux-aarch64-cpython-313/libvirt-utils.o build/temp.linux-aarch64-cpython-313/typewrappers.o -L/usr/lib/aarch64-linux-gnu -lvirt-lxc -lvirt -o build/lib.linux-aarch64-cpython-313/libvirtmod_lxc.cpython-313-aarch64-linux-gnu.so lto1: internal compiler error: in read_cgraph_and_symbols, at lto/lto-common.cc:2855 0xf068af diagnostic_context::diagnostic_impl(rich_location*, diagnostic_metadata const*, diagnostic_option_id, char const*, std::__va_list*, diagnostic_t) ???:0 0xed7857 internal_error(char const*, ...) ???:0 0xed793b fancy_abort(char const*, int, char const*) ???:0 0xf762cb read_cgraph_and_symbols(unsigned int, char const**) ???:0 0x17ee567 lto_main() ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-15/README.Bugs> for instructions. lto-wrapper: fatal error: /usr/bin/aarch64-linux-gnu-gcc returned 1 exit status compilation terminated. /usr/bin/aarch64-linux-gnu-ld.bfd: error: lto-wrapper failed collect2: error: ld returned 1 exit status --- *** /tmp/tmprofof8dv/bug_body In Ubuntu, the attached patch was applied to achieve the following: * fix race condition for parallel extensions builds (LP: #2139083) Thanks for considering the patch. -- System Information: Debian Release: trixie/sid APT prefers noble-updates APT policy: (500, 'noble-updates'), (500, 'noble-security'), (500, 'noble'), (100, 'noble-backports') Architecture: amd64 (x86_64) Kernel: Linux 6.17.0-19-generic (SMP w/16 CPU threads; PREEMPT) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
diff -Nru setuptools-80.9.0/debian/patches/prevent-object-file-collisions-in-parallel-extension.patch setuptools-80.9.0/debian/patches/prevent-object-file-collisions-in-parallel-extension.patch --- setuptools-80.9.0/debian/patches/prevent-object-file-collisions-in-parallel-extension.patch 1970-01-01 01:00:00.000000000 +0100 +++ setuptools-80.9.0/debian/patches/prevent-object-file-collisions-in-parallel-extension.patch 2026-03-24 11:43:32.000000000 +0100 @@ -0,0 +1,57 @@ +Description: Prevent object file collisions in parallel extension builds + +Parallel builds of extensions that share source files may write to the same +object file paths under a common build directory, resulting in race conditions +and non-deterministic build outputs. + +Use a per-extension build directory to isolate object files and ensure +deterministic, parallel-safe builds. + +Author: Lukas Schmelting <[email protected]> +Bug-Ubuntu: https://bugs.launchpad.net/bugs/2139083 +Forwarded: https://github.com/pypa/distutils/pull/393 +Last-Update: 2026-02-13 + +--- + newsfragments/3942.bugfix.rst | 1 + + setuptools/_distutils/command/build_ext.py | 7 +++++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + create mode 100644 newsfragments/3942.bugfix.rst + +diff --git a/newsfragments/3942.bugfix.rst b/newsfragments/3942.bugfix.rst +new file mode 100644 +index 00000000..fac4bf79 +--- /dev/null ++++ b/newsfragments/3942.bugfix.rst +@@ -0,0 +1 @@ ++Fixed non-deterministic parallel builds of extensions that share source files. +diff --git a/setuptools/_distutils/command/build_ext.py b/setuptools/_distutils/command/build_ext.py +index ec45b440..daf30519 100644 +--- a/setuptools/_distutils/command/build_ext.py ++++ b/setuptools/_distutils/command/build_ext.py +@@ -562,9 +562,12 @@ class build_ext(Command): + for undef in ext.undef_macros: + macros.append((undef,)) + ++ # Per-extension build dir to avoid conflicts in parallel builds. ++ ext_build_temp = os.path.join(self.build_temp, ext.name) ++ + objects = self.compiler.compile( + sources, +- output_dir=self.build_temp, ++ output_dir=ext_build_temp, + macros=macros, + include_dirs=ext.include_dirs, + debug=self.debug, +@@ -595,7 +598,7 @@ class build_ext(Command): + extra_postargs=extra_args, + export_symbols=self.get_export_symbols(ext), + debug=self.debug, +- build_temp=self.build_temp, ++ build_temp=ext_build_temp, + target_lang=language, + ) + +-- +2.34.1 + diff -Nru setuptools-80.9.0/debian/patches/series setuptools-80.9.0/debian/patches/series --- setuptools-80.9.0/debian/patches/series 2025-06-12 11:36:56.000000000 +0200 +++ setuptools-80.9.0/debian/patches/series 2026-03-24 11:43:32.000000000 +0100 @@ -15,3 +15,4 @@ #sphinx-theme.diff dont-require-vendored-modules.diff revert-shebang-change.diff +prevent-object-file-collisions-in-parallel-extension.patch

