Package the Zenoh transport, taking Zenoh itself from Eclipse - #11
Open
tsaubergine wants to merge 4 commits into
Open
tsaubergine wants to merge 4 commits into
tsaubergine wants to merge 4 commits into
Conversation
Adds libgoby3-zenoh, libgoby3-zenoh-dev and goby3-zenoh, following the MOOS trio. The Zenoh dependency lands only in those three packages; goby3-apps merely suggests goby3-zenoh, since `goby` execs goby_zenoh_tool for the `goby zenoh` action rather than linking it. Restricted to amd64 for now. Eclipse builds libzenohc for amd64, arm64 and armhf, but not as Multi-Arch: same, and it installs into /usr/lib rather than /usr/lib/<triplet> -- so it is not co-installable for a foreign architecture in the way the arm64 and armhf cross builds would need. Those builds are left untouched: rules only passes -Dbuild_zenoh=ON on a native amd64 build. libzenohcpp-dev declares no dependencies at all, so both it and libzenohc-dev are named explicitly wherever they are needed. libzenohc has an unversioned SONAME and ships no shlibs file, so shlibdeps can derive nothing from it and libgoby3-zenoh depends on libzenohc by name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XzsSmsrcKX6t7n6tLkohjy
Eclipse ships libzenohc for every architecture built here, and co-installing it for two architectures is not what a cross build needs: nothing in Goby links libzenohc for the build architecture, only for the host. Installing the host-architecture package replaces rather than joins the build architecture's, leaving /usr/lib/libzenohc.so as the library being cross-compiled against, which is the intended one. libzenohcpp-dev is Architecture: all and so needs no qualifier at all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XzsSmsrcKX6t7n6tLkohjy
libzenohcpp-dev is Architecture: all but carries no Multi-Arch: foreign, so it cannot satisfy a host-architecture build dependency: mk-build-deps asked for libzenohcpp-dev:arm64, which does not exist, and every cross build failed resolving its dependencies. :native asks for the instance that does exist. The package is headers only and identical for every architecture, so it is the right one to compile against whatever the host architecture is. libzenohc-dev needs no such annotation -- the arm64 and armhf builds resolved it without complaint. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XzsSmsrcKX6t7n6tLkohjy
zenohcxx is packaged Architecture: all -- headers, nothing architecture
specific -- but its zenohcxxConfigVersion.cmake hardcodes the pointer size of
the machine Eclipse built it on and sets PACKAGE_VERSION_UNSUITABLE for anything
else, so CMake refuses it on a 32-bit build:
Could not find a configuration file for package "zenohcxx" that is
/usr/lib/cmake/zenohcxx/zenohcxxConfig.cmake, version: 1.10.1 (64bit)
The armhf cross builds got as far as configuring before hitting that; the arm64
ones, being 64-bit, went past it. libzenohc is not the problem and resolves for
either architecture.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XzsSmsrcKX6t7n6tLkohjy
tsaubergine
marked this pull request as ready for review
September 10, 2026 03:06
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
libgoby3-zenoh,libgoby3-zenoh-devandgoby3-zenoh, following the MOOS trio, and takes Zenoh itself from Eclipse's Debian repository rather than mirroring it into packages.gobysoft.org.Pairs with GobySoft/goby3#414 — the branch name matches, so the
*-deb-buildjobs pick this branch up automatically via thegit checkout origin/${CIRCLE_BRANCH}step.Merge ordering
Merge this only with or after GobySoft/goby3#414. The three
.installfiles namelibgoby_zenoh.so.*,usr/include/goby/zenoh/*andgoby_zenoh_tool, which only exist once Goby builds them. On its own against today's3.0this would faildh_install.Where the Zenoh dependency lands
Only in the three new packages.
goby3-appsgains aSuggests: goby3-zenohand nothing more —gobyexecsgoby_zenoh_toolfor thegoby zenohaction rather than linking against it, so a hard dependency would be wrong.Build-Dependsgainslibzenohc-devandlibzenohcpp-dev:native, both restricted to[amd64 arm64]. The build chroots therefore need Eclipse's repository configured; goby3#414 adds that step to the Debian job templates.amd64 and arm64, not armhf
Eclipse builds
libzenohcfor all three, and it cross-installs correctly: it is notMulti-Arch: same, so installing it for the host architecture replaces rather than joins the build architecture's, leaving/usr/lib/libzenohc.soas the library being cross-compiled against — which is what a cross build wants, since nothing in Goby linkslibzenohcfor the build architecture.armhf is excluded for a different and entirely upstream reason.
libzenohcpp-devisArchitecture: all— headers, nothing architecture specific — butzenohcxxConfigVersion.cmakehardcodes the pointer size of the machine Eclipse built it on:so CMake refuses the package on any 32-bit build:
rulesgates-Dbuild_zenoh=ONon the target architecture accordingly. This is worth reporting to Eclipse — arch-independent content should not declare itself 64-bit only — and if they fix it, widening this to armhf is a one-word change in each ofcontrolandrules.Two upstream quirks that shaped the rest
libzenohcpp-devdeclares noDepends:at all, so it does not pull in the C library. Both it andlibzenohc-devare named explicitly wherever needed. It also carries noMulti-Arch: foreigndespite beingArchitecture: all, so it cannot satisfy a host-architecture build dependency — hence:native, which is correct here since the headers are identical for every architecture.libzenohc's SONAME is unversioned (literallylibzenohc.so) and it ships no shlibs file, sodh_shlibdepscan derive no dependency from it.libgoby3-zenohnameslibzenohcdirectly, andrulesgives the Zenoh packages the--ignore-missing-infotreatment already used forgoby3-clang-tool.Validation
Against a staged install using the Debian libdir layout:
.installglobs match — library, headers, CMake config andgoby_zenoh_toolall land wherecontrolsaysdh_install --fail-missingwould reject and no double-claim withlibgoby3orlibgoby3-devPlus
dpkg-checkbuilddepsparses and resolves the arch-qualified and:nativebuild dependencies,controlparses cleanly at 17 binary packages, andrulesparses undermake --dry-runon the amd64, arm64 and armhf paths, building Zenoh on the first two only.🤖 Generated with Claude Code
https://claude.ai/code/session_01XzsSmsrcKX6t7n6tLkohjy