Skip to content

feat(packaging): conda/pixi package for prefix.dev + conda-forge - #133

Open
facontidavide wants to merge 2 commits into
mainfrom
feature/pixi-conda-packaging
Open

feat(packaging): conda/pixi package for prefix.dev + conda-forge#133
facontidavide wants to merge 2 commits into
mainfrom
feature/pixi-conda-packaging

Conversation

@facontidavide

Copy link
Copy Markdown
Owner

Adds a conda package for Cloudini so it can be released on pixi / prefix.dev and conda-forge.

What ships in the package

  • libcloudini_lib.so (shared) + headers
  • CMake package config → find_package(cloudini_lib) + cloudini::cloudini_lib
  • cloudini_rosbag_converter CLI

Library/CMake changes (to make it installable outside ament)

  • install(EXPORT) + generated cloudini_libConfig.cmake for standalone (non-ament) builds
  • $ORIGIN/../lib install RPATH so installed executables locate the co-installed lib
  • prefer shared zstd/lz4 variants when the library is shared
  • find_or_download_zstd.cmake: accept conda's zstd::libzstd_shared / zstd::libzstd (conda-forge ships no static zstd) instead of vendoring
  • find_or_download_mcap.cmake: -DMCAP_INCLUDE_DIR offline hook (network-free builds)
  • pin mcap_converter STATIC so the CLI is self-contained under BUILD_SHARED_LIBS=ON

Recipe

conda/recipe.yaml is hermetic (no network during the build script): links conda zstd/lz4-c, uses conda cxxopts, and consumes a pre-fetched mcap source. One recipe serves both prefix.dev and conda-forge/staged-recipes. conda/RELEASING.md documents the full workflow.

Validation (local, rattler-build 0.66.2)

  • rattler-build buildcloudini-1.2.4-*.conda, all package tests pass
  • No CPM downloads (fully offline-capable)
  • .so dynamically links libzstd.so.1 + liblz4.so.1 (305 KB vs 1.25 MB vendored)
  • Downstream find_package(cloudini_lib) consumer compiles, links, and runs
  • Installed CLI runs standalone (RUNPATH $ORIGIN/../lib)

Before publishing

  • conda/recipe.yaml source[0].sha256 is a placeholder — fill after tagging 1.2.4 (command in RELEASING.md).

🤖 Generated with Claude Code

facontidavide and others added 2 commits July 11, 2026 11:39
Ship cloudini as a conda package (shared library + headers + CMake package
config + cloudini_rosbag_converter CLI), buildable with rattler-build and
publishable to prefix.dev and conda-forge.

Library/CMake changes to make it installable outside ament:
- install(EXPORT) + generated cloudini_libConfig.cmake for standalone builds,
  so downstream can find_package(cloudini_lib) and link cloudini::cloudini_lib
- $ORIGIN/../lib install RPATH so installed executables locate the lib
- prefer shared zstd/lz4 variants when the library itself is shared
- find_or_download_zstd.cmake: accept conda's zstd::libzstd_shared / zstd::libzstd
  (conda-forge ships no static zstd) instead of vendoring a copy
- find_or_download_mcap.cmake: -DMCAP_INCLUDE_DIR offline hook (no-network builds)
- pin mcap_converter STATIC so the CLI stays self-contained under BUILD_SHARED_LIBS=ON

conda/recipe.yaml is hermetic (no network at build): links conda zstd/lz4-c,
uses conda cxxopts, and consumes a pre-fetched mcap source. Same recipe serves
prefix.dev and conda-forge/staged-recipes. conda/RELEASING.md documents the
release + publish workflow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant