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

Reply via email to