GNOME Calls 50.0 builds one origin per appearance of the modem's VoiceCallManager interface and never disconnects a removed origin's CallAdded handler, so every withdraw/re-add cycle leaves a stale handler behind: calls announced twice after one cycle, a SIGBUS on freed memory after a few (measured on a Fairphone 6). Withdrawing the interface on every imsd restart or registration drop therefore cost the only incoming call path on Phosh, where Calls runs as the session's daemon. List the interface permanently. Registration is reported through the modem's Online property and enforced in Dial, which now fails with "imsd is not registered" or "imsd is not running". Only this daemon's own restart (org.ofono vanishing) still cycles the origin, and the README says to restart Calls after that. Installing the opt-in imsd-ofono subpackage now enables imsd-ofonod (a systemd preset plus the wants symlink, like imsd.service in the main package), and imsd-dialerd's autostart is limited to KDE so a Phosh session does not run the Plasma shim. Verified on the FP6 under Phosh with GNOME Calls' autostarted daemon: outgoing call, incoming call answered on the lock screen, then an imsd restart under the running Calls (Online changes only, no origin cycle) followed by another incoming call added once and answered.
33 lines
1.8 KiB
Shell
Executable file
33 lines
1.8 KiB
Shell
Executable file
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-3.0-only
|
|
# SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
|
# make-bin-tarball.sh — bundle the cross-compiled imsd binary + runtime files
|
|
# into the source tarball APKBUILD.binary consumes. Run from the repo root
|
|
# after a cross build; output lands in the current directory.
|
|
set -eu
|
|
|
|
VER="${1:-$(sed -n 's/.*char\* Version = "\(.*\)".*/\1/p' implementations/main.cpp)}"
|
|
[ -n "$VER" ] || { echo "could not determine version — pass it as \$1" >&2; exit 1; }
|
|
BIN=$(ls -t bin/imsd-aarch64-*/imsd 2>/dev/null | head -n1)
|
|
MEDIA=$(ls -t bin/imsd-media-aarch64-*/imsd-media 2>/dev/null | head -n1)
|
|
DIALERD=$(ls -t bin/imsd-dialerd-aarch64-*/imsd-dialerd 2>/dev/null | head -n1)
|
|
OFONOD=$(ls -t bin/imsd-ofonod-aarch64-*/imsd-ofonod 2>/dev/null | head -n1)
|
|
[ -n "$BIN" ] || { echo "no aarch64 imsd build found — cross-compile first" >&2; exit 1; }
|
|
[ -n "$MEDIA" ] || { echo "no aarch64 imsd-media build — cross-compile with --product=media" >&2; exit 1; }
|
|
[ -n "$DIALERD" ] || { echo "no aarch64 imsd-dialerd build — cross-compile with --product=dialerd" >&2; exit 1; }
|
|
[ -n "$OFONOD" ] || { echo "no aarch64 imsd-ofonod build — cross-compile with --product=ofonod" >&2; exit 1; }
|
|
|
|
stage=$(mktemp -d)
|
|
trap 'rm -rf "$stage"' EXIT
|
|
mkdir "$stage/imsd-$VER"
|
|
cp "$BIN" "$stage/imsd-$VER/imsd"
|
|
cp "$MEDIA" "$stage/imsd-$VER/imsd-media"
|
|
cp "$DIALERD" "$stage/imsd-$VER/imsd-dialerd"
|
|
cp "$OFONOD" "$stage/imsd-$VER/imsd-ofonod"
|
|
cp packaging/ims-pdn-up.sh packaging/imsd.service \
|
|
packaging/imsd-dialerd.desktop packaging/imsd-ofonod.service \
|
|
packaging/org.ofono.conf packaging/90_imsd-ofono.gschema.override \
|
|
packaging/80-imsd-ofono.preset \
|
|
packaging/net.catcrafts.IMS1.conf "$stage/imsd-$VER/"
|
|
tar -C "$stage" -czf "imsd-$VER.tar.gz" "imsd-$VER"
|
|
echo "wrote imsd-$VER.tar.gz ($(du -h "imsd-$VER.tar.gz" | cut -f1))"
|