mirror of
https://github.com/linux-msm/qdl.git
synced 2026-10-07 06:29:17 -07:00
The release artifacts were not self-contained. qdl links libxml2 and libzip (and, on Linux, their transitive closure), but packaging copied only a subset of those libraries, so qdl failed to start on hosts without them installed. Inspecting the uploaded artifacts: Artifact Missing Status --------------- ---------------------------- ------ ubuntu-22-x64 libxml2.so.2, libzip.so.4 broken ubuntu-22-arm64 libxml2.so.2, libzip.so.4 broken ubuntu-24-x64 libxml2.so.2, libzip.so.4 broken ubuntu-24-arm64 libxml2.so.2, libzip.so.4 broken macos-arm64 libzip.5.dylib (Homebrew) broken macos-intel libzip.5.dylib (Homebrew) broken windows-x64 - ok windows-arm64 - ok On Linux only libusb was copied; libxml2 and libzip (plus their closure: libz, liblzma, libzstd, libbz2, libcrypto, libudev) were left to the host. On macOS libzip was never handled, so the binary kept an absolute Homebrew path to libzip.5.dylib. Windows already bundled the full set. Bundle the complete dependency closure on Linux (every ldd entry except the C runtime and dynamic loader) and set an $ORIGIN RUNPATH on the binary and each bundled library, since RUNPATH is not inherited by transitively-loaded libraries. On macOS, use dylibbundler to recursively copy the non-system dylibs and rewrite the load commands to @executable_path, replacing the hand-maintained install_name_tool calls that missed libzip. Both jobs now fail if any non-system library remains unresolved after packaging. Signed-off-by: Igor Opaniuk <igor.opaniuk@oss.qualcomm.com>