Files
amethyst/scripts/relax-deb-libicu.sh
T
nrobi144 450c740c62 fix(packaging): add trap cleanup and xz compression to deb rewriter
Address review findings:
- Add trap for temp dir cleanup on error
- Use -Zxz for max distro compatibility (older dpkg lacks zstd)
- Use --root-owner-group for correct file ownership

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 10:39:24 +03:00

44 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Broaden the libicu Depends clause in a jpackage-built .deb so it installs
# across Debian/Ubuntu releases.
#
# jpackage shells out to `dpkg-shlibdeps` against the bundled JDK runtime's
# native libraries (libfontmanager.so, etc., which link libicu). That pins the
# Depends to whatever libicu the build host ships — libicu74 on ubuntu-24.04 —
# even though the bundled JRE works fine against any reasonably recent ICU.
# Without this rewrite, users on Ubuntu 22.04 (libicu70), Debian 12 (libicu72),
# Debian 11 (libicu67), or Debian 13 (libicu76) cannot install the package.
#
# Neither jpackage nor the Compose Multiplatform DSL exposes a way to override
# the auto-generated Depends, so we rewrite the .deb after the fact.
#
# Usage: relax-deb-libicu.sh <path-to-deb> [<path-to-deb> ...]
set -euo pipefail
# Spans Debian 11 → 13 and Ubuntu 20.04 → 26.04. Append new SONAMEs here when
# a new Debian/Ubuntu release ships a bumped libicu.
ALT='libicu66 | libicu67 | libicu70 | libicu72 | libicu74 | libicu76 | libicu77'
for deb in "$@"; do
if [[ ! -f "$deb" ]]; then
echo "skip: not a file: $deb" >&2
continue
fi
work="$(mktemp -d)"
trap 'rm -rf "$work"' EXIT
dpkg-deb -R "$deb" "$work/pkg"
control="$work/pkg/DEBIAN/control"
if grep -qE 'libicu[0-9]+' "$control"; then
sed -i -E "s/libicu[0-9]+([[:space:]]*\\|[[:space:]]*libicu[0-9]+)*/${ALT}/g" "$control"
dpkg-deb --root-owner-group -Zxz -b "$work/pkg" "$deb" >/dev/null
echo "Relaxed libicu dep: $deb"
else
echo "No libicu dep, leaving as-is: $deb"
fi
rm -rf "$work"
trap - EXIT
done