Bug#1086731: z3 FTCBFS: python3 dependency not installable

Helmut Grohne helmut at subdivi.de
Mon Nov 4 21:03:10 GMT 2024


Source: z3
Version: 4.8.12-3.1
Tags: patch
User: debian-cross at lists.debian.org
Usertags: cross-satisfiability

z3 cannot be cross built from source, because its python3 dependency
fails to install. A host architecture Python fails postinst, but it also
is not what z3 needs for building as it wants to run Python during
build.

In a divide and conquer approach, I first looked into adding support for
a nopython build profile such that the separate bindings could be
approached separately. Doing so, I recommend using dh-sequence-*
build-dependencies as they can be conditionalized using build profiles.
Likewise, I recommend installing the documentation symlink using
dh_installdocs --linkdoc, because it also handles build profiles at no
extra effort. While at it, I noticed that the libz3-java -> libz3-dev
dependency is not tight enough for using --linkdoc. Completely removing
Python dependencies happens to break the build, because even with
-DZ3_BUILD_PYTHON_BINDINGS=OFF Python and setuptools are being used, so
we need to depend on those without a profile.

It turns out that a nojava+nopython cross build just works. The z3
Python module is based on ctypes. From a packaging point of view, this
mostly means we can handle it as if it was a pure Python module. Hence,
annotating the python3 dependency with :any or :native is reasonable.
Once doing so, a nojava cross build also succeeds.

Cross building with java is a more distant topic not solved here. The
javahelper package is Arch:all and implicitly M-A:no. Any package
depending on it currently cannot satisfy its cross Build-Depends. This
is a problem that should be solved at the javahelper side rather than
here.

Given all of this, I am attaching a patch fixing all mentioned issues
but the javahelper one. Please let me know if this change is acceptable
or whether I should split it into smaller pieces for the individual
problems.

Helmut
-------------- next part --------------
diff --minimal -Nru z3-4.8.12/debian/changelog z3-4.8.12/debian/changelog
--- z3-4.8.12/debian/changelog	2023-02-01 13:06:03.000000000 +0100
+++ z3-4.8.12/debian/changelog	2024-11-04 16:15:47.000000000 +0100
@@ -1,3 +1,16 @@
+z3 (4.8.12-3.2) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Improve cross building. (Closes: #-1)
+    + Multiarchify python3 dependency.
+  * Add nopython build profile.
+    + Conditionalize debhelper addons via Build-Depends.
+    + Let debhelper conditionalize --link-doc based on profiles.
+    + Unconditional python3-setuptools dependency needed even with <!nopython>.
+  * Tighten libz3-java -> libz3-dev dependency for doc linking.
+
+ -- Helmut Grohne <helmut at subdivi.de>  Mon, 04 Nov 2024 16:15:47 +0100
+
 z3 (4.8.12-3.1) unstable; urgency=medium
 
   * Non-maintainer upload.
diff --minimal -Nru z3-4.8.12/debian/control z3-4.8.12/debian/control
--- z3-4.8.12/debian/control	2023-02-01 13:01:38.000000000 +0100
+++ z3-4.8.12/debian/control	2024-11-04 16:15:47.000000000 +0100
@@ -4,8 +4,9 @@
 Maintainer: LLVM Packaging Team <pkg-llvm-team at lists.alioth.debian.org>
 Uploaders: Fabian Wolff <fabi.wolff at arcor.de>
 Build-Depends: debhelper-compat (= 13),
-               dh-python, python3, cmake, libsimde-dev,
-               javahelper [!hppa !hurd-i386 !m68k !sh4] <!nojava>,
+               cmake, libsimde-dev, python3:any, python3-setuptools,
+               dh-sequence-python3 <!nopython>,
+               dh-sequence-javahelper [!hppa !hurd-i386 !m68k !sh4] <!nojava>,
                default-jdk [!hppa !hurd-i386 !m68k !sh4] <!nojava>
 Standards-Version: 4.6.0
 Homepage: https://github.com/Z3Prover/z3
@@ -60,6 +61,7 @@
 Package: python3-z3
 Section: python
 Architecture: any
+Build-Profiles: <!nopython>
 Pre-Depends: ${misc:Pre-Depends}
 Depends: libz3-dev (= ${binary:Version}),
          python3-pkg-resources,
@@ -76,7 +78,7 @@
 Build-Profiles: <!nojava>
 Section: java
 Architecture: amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x alpha kfreebsd-amd64 kfreebsd-i386 powerpcspe riscv64 sparc64 x32
-Depends: libz3-jni (>= ${binary:Version}), libz3-jni (<< ${source:Version}.1~), libz3-dev, ${misc:Depends}, ${java:Depends}
+Depends: libz3-jni (>= ${binary:Version}), libz3-jni (<< ${source:Version}.1~), libz3-dev (= ${binary:Version}), ${misc:Depends}, ${java:Depends}
 Description: theorem prover from Microsoft Research - java bindings
  Z3 is a state-of-the-art theorem prover from Microsoft Research. See the z3
  package for a detailed description.
diff --minimal -Nru z3-4.8.12/debian/rules z3-4.8.12/debian/rules
--- z3-4.8.12/debian/rules	2023-02-01 13:04:59.000000000 +0100
+++ z3-4.8.12/debian/rules	2024-11-04 16:15:47.000000000 +0100
@@ -12,30 +12,26 @@
 
 DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
 
-ifneq (,$(shell dh_listpackages -a | grep libz3-jni))
-    WITH_JAVA ?= ON
-    WITH_JAVAHELPER ?= ,javahelper
-else
-    WITH_JAVA ?= OFF
-    WITH_JAVAHELPER ?=
-endif
+DOPACKAGES := $(shell dh_listpackages)
+WITH_JAVA := $(if $(filter libz3-jni,$(DOPACKAGES)),ON,OFF)
+WITH_PYTHON := $(if $(filter python3-z3,$(DOPACKAGES)),ON,OFF)
 
 export CCACHE_BASEDIR = $(shell pwd)
 
 %:
-	dh $@ --with python3$(WITH_JAVAHELPER)
+	dh $@
 
 override_dh_auto_configure:
 	dh_auto_configure --buildsystem=cmake+makefile -- \
 		-DCMAKE_INSTALL_PYTHON_PKG_DIR=lib/python3/dist-packages \
 		-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-		-DZ3_BUILD_PYTHON_BINDINGS=ON \
+		-DZ3_BUILD_PYTHON_BINDINGS=$(WITH_PYTHON) \
 		-DZ3_BUILD_DOTNET_BINDINGS=OFF \
 		-DZ3_BUILD_JAVA_BINDINGS=$(WITH_JAVA)
 
+override_dh_installdocs:
+	dh_installdocs -ppython3-z3 -plibz3-java -plibz3-jni --link-doc=libz3-dev
+	dh_installdocs -Npython3-z3 -Nlibz3-java -Nlibz3-jni
+
 override_dh_installchangelogs:
 	dh_installchangelogs RELEASE_NOTES
-	for p in python3-z3 libz3-java libz3-jni ; do \
-		$(RM) -rf debian/$$p/usr/share/doc/$$p/ ; \
-		ln -s libz3-dev debian/$$p/usr/share/doc/$$p || true ; \
-	done


More information about the Pkg-llvm-team mailing list