Package: zsh Version: 5.9-5 Severity: wishlist Tags: patch User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu mantic ubuntu-patch
Dear maintainers, In Ubuntu, zsh was failing to build from source on i386 because Ubuntu has glibc 2.38, and libm.a on i386 is failing to provide the fmod symbol, causing an inability to link zsh-static. This is ultimately a bug in glibc, filed in Ubuntu at <https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2036283>. However, since i386 is a partial arch in Ubuntu and we don't actually need zsh-static for anything (but "unfortunately" do need zsh/i386 as a build-dependency of vlc), rather than spending time getting zsh-static to build again on i386, and then possibly having to do so again later because i386 and math is a fragile combination, I found it preferable to just disable the build of zsh-static on Ubuntu i386. I've uploaded the attached patch to Ubuntu. It has been constructed in such a way that it can be included in Debian without adversely affecting any Debian builds, and would allow us to keep the zsh package in Ubuntu in sync with that in Debian. Please consider applying this patch. If you don't want to carry this added complexity in debian/rules that only benefits a downstream distribution, however, please feel free to close the bug report. Thanks, -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. Ubuntu Developer https://www.debian.org/ slanga...@ubuntu.com vor...@debian.org
diff -Nru zsh-5.9/debian/rules zsh-5.9/debian/rules --- zsh-5.9/debian/rules 2023-07-04 18:24:39.000000000 -0700 +++ zsh-5.9/debian/rules 2023-09-21 21:49:44.000000000 -0700 @@ -48,6 +48,10 @@ CONFIGFLAGS += --enable-zsh-hash-debug endif +ifeq ($(DEB_HOST_ARCH):$(VENDOR),i386:ubuntu) + PKGS=-Nzsh-static +endif + # We first need to check if the package is installed, otherwise the # resulting syntax might be invalid. Needed for packages which are # also provided by other packages like libncurses-dev and @@ -55,13 +59,16 @@ BUILT_USING=$(shell for pkg in libcap-dev libncurses-dev libpcre2-dev libc-dev-bin; do dpkg-query -f '$${status}' -W $$pkg 2>&1 | grep -Fq installed && dpkg-query -f '$${source:Package} (= $${source:Version}), ' -W $$pkg; done) %: - dh $@ + dh $@ $(PKGS) override_dh_auto_build-arch: build-dynamic build-static build-dynamic: dh_auto_build -B obj build-static: +ifneq (,$(filter zsh-static, $(shell dh_listpackages))) dh_auto_build -B obj-static +endif + : override_dh_auto_build-indep: dh_auto_build -B obj -- pdf @@ -71,7 +78,9 @@ if dpkg-architecture -qDEB_BUILD_ARCH_OS | grep -qv hurd; then \ HOME="$(CURDIR)/obj/testhome" ZTST_verbose=1 dh_auto_test -B obj; \ fi +ifneq (,$(filter zsh-static, $(shell dh_listpackages))) HOME="$(CURDIR)/obj-static/testhome" ZTST_verbose=1 dh_auto_test -B obj-static || true +endif override_dh_auto_test-indep: @@ -79,16 +88,24 @@ chmod 755 configure mkdir -p obj/testhome obj-static/testhome dh_auto_configure -B obj -- $(CONFIGFLAGS) +ifneq (,$(filter zsh-static, $(shell dh_listpackages))) dh_auto_configure -B obj-static -- $(CONFIGFLAGS) $(STATICFLAGS) +endif sed -e 's/#define VENDOR "pc"/#define VENDOR "$(VENDOR)"/' \ - -i obj/config.h obj-static/config.h + -i obj/config.h +ifneq (,$(filter zsh-static, $(shell dh_listpackages))) + sed -e 's/#define VENDOR "pc"/#define VENDOR "$(VENDOR)"/' \ + -i obj-static/config.h sed -e 's/files.mdd link=no/files.mdd link=static/;s/stat.mdd link=no/stat.mdd link=static/' \ -i obj-static/config.modules +endif override_dh_auto_clean: dh_auto_clean -B obj +ifneq (,$(filter zsh-static, $(shell dh_listpackages))) dh_auto_clean -B obj-static +endif override_dh_installdocs-indep: dh_installdocs -pzsh-doc --link-doc=zsh-common --doc-main-package=zsh-common @@ -148,12 +165,16 @@ -dRecommends debian/zsh/usr/lib/*/zsh/*/zsh/*.so execute_after_dh_installdocs-arch: +ifneq (,$(filter zsh-static, $(shell dh_listpackages))) awk 'BEGIN { print "The following modules are statically-compiled into the static zsh binary:\n"; } /link=static/ { printf "%s (%s %s)\n", substr($$1,6), $$4, $$5; }' obj-static/config.modules >debian/zsh-static/usr/share/doc/zsh-static/README.Debian +endif execute_after_dh_install-arch: +ifneq (,$(filter zsh-static, $(shell dh_listpackages))) mv debian/zsh-static/bin/zsh debian/zsh-static/bin/zsh-static mv debian/zsh-static/bin/zsh5 debian/zsh-static/bin/zsh5-static sed -e 's:#!/bin/zsh:#!/bin/zsh-static:' -i debian/zsh-static/bin/zsh5-static +endif find debian/zsh-dev/usr/include/zsh -name '*.h' -o -name '*.mdh' | \ xargs sed -e 's@\.\./config\.h@config.h@;s@#\(\s*\)include "\([^"]\+\)"@#\1include <zsh/\2>@' -i