From c436914b254456e69185f4038162ca63008da26b Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Sat, 14 Nov 2026 17:44:07 +1000 Subject: [PATCH] Per-package files and dependency fixes next to the package's other settings - Dependency fixes live in pkg_additional_info.yaml: each layer's patch/dependencies.yaml is merged into it, so a package's add_*/remove_* keys sit next to its build_number and cmake args. Both files were keyed, layered and merged per package the same way; the merged files hold exactly what the two did (compared per package and key). import_distro merges an old repository's two files; the sort task, docs and skills follow. - ros_workspace's activation scripts live here (shared/files/ros2-ros-workspace/): vinca-rs copies a layer's files// into that package's recipe. - check reports entries for packages the distribution (or, for shared/, no distribution) doesn't have: typos and leftovers. It found three in rolling, now removed (grid_map_octomap, gz_launch_vendor, slam_toolbox). A vinca-rs solve failure that isn't the solver's answer raises instead of counting as a conflict. - vinca-rs 0.1.9, which reads both (Tobias-Fischer/vinca-rs#7, #8) and builds ament_cmake with Ninja on Windows. Co-Authored-By: Claude Opus 5.5 --- .claude/skills/robostack-debug-build/SKILL.md | 6 +- .claude/skills/robostack-patch/SKILL.md | 5 +- AGENTS.md | 6 +- README.md | 11 +- distros/humble/patch/dependencies.yaml | 198 ----------------- distros/humble/pkg_additional_info.yaml | 190 ++++++++++++++++ distros/humble/robostack.yaml | 2 +- distros/jazzy/patch/dependencies.yaml | 195 ---------------- distros/jazzy/pkg_additional_info.yaml | 186 ++++++++++++++++ distros/jazzy/robostack.yaml | 2 +- distros/lyrical/patch/dependencies.yaml | 208 ------------------ distros/lyrical/pkg_additional_info.yaml | 197 +++++++++++++++++ distros/rolling/patch/dependencies.yaml | 205 ----------------- distros/rolling/pkg_additional_info.yaml | 190 ++++++++++++++++ pixi.lock | 65 +++--- pixi.toml | 4 +- shared/files/ros2-ros-workspace/activate.bat | 13 ++ shared/files/ros2-ros-workspace/activate.ps1 | 14 ++ shared/files/ros2-ros-workspace/activate.sh | 93 ++++++++ .../files/ros2-ros-workspace/deactivate.bat | 16 ++ .../files/ros2-ros-workspace/deactivate.ps1 | 16 ++ shared/files/ros2-ros-workspace/deactivate.sh | 30 +++ shared/patch/dependencies.yaml | 182 --------------- shared/pkg_additional_info.yaml | 170 ++++++++++++++ tools/check_dependency_compat.py | 3 + tools/import_distro.py | 37 ++-- tools/maintenance.py | 39 ++++ tools/robostack.py | 2 +- 28 files changed, 1235 insertions(+), 1050 deletions(-) delete mode 100644 distros/humble/patch/dependencies.yaml delete mode 100644 distros/jazzy/patch/dependencies.yaml delete mode 100644 distros/lyrical/patch/dependencies.yaml delete mode 100644 distros/rolling/patch/dependencies.yaml create mode 100644 shared/files/ros2-ros-workspace/activate.bat create mode 100644 shared/files/ros2-ros-workspace/activate.ps1 create mode 100644 shared/files/ros2-ros-workspace/activate.sh create mode 100644 shared/files/ros2-ros-workspace/deactivate.bat create mode 100644 shared/files/ros2-ros-workspace/deactivate.ps1 create mode 100644 shared/files/ros2-ros-workspace/deactivate.sh delete mode 100644 shared/patch/dependencies.yaml diff --git a/.claude/skills/robostack-debug-build/SKILL.md b/.claude/skills/robostack-debug-build/SKILL.md index 6c031c6f4..5afca4e6a 100644 --- a/.claude/skills/robostack-debug-build/SKILL.md +++ b/.claude/skills/robostack-debug-build/SKILL.md @@ -63,11 +63,11 @@ bash -x conda_build.sh 2>&1 | less endif() ``` - **Windows `min`/`max` macro clashes**: `target_compile_definitions( PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN)` under `if(WIN32)`. -- **gtest / test failures**: add the missing dependency in `dependencies.yaml`, or +- **gtest / test failures**: add the missing dependency in `pkg_additional_info.yaml`, or disable the tests when safe; no custom shims. - **Qt plugins (rviz, rtabmap)**: make sure CMake finds the intended Qt major version. -- **Missing dependency**: `shared/patch/dependencies.yaml` (all distributions) or - `distros//patch/dependencies.yaml` (one), keyed by ROS package name: +- **Missing dependency**: `shared/pkg_additional_info.yaml` (all distributions) or + `distros//pkg_additional_info.yaml` (one), keyed by ROS package name: ```yaml : add_host: [] diff --git a/.claude/skills/robostack-patch/SKILL.md b/.claude/skills/robostack-patch/SKILL.md index a303f8d37..15031d834 100644 --- a/.claude/skills/robostack-patch/SKILL.md +++ b/.claude/skills/robostack-patch/SKILL.md @@ -13,8 +13,9 @@ description: Create, refresh, place, port and validate source patches for RoboSt of adding variants. - vinca picks them up by name when generating recipes; nothing else needs wiring. `pixi run rs check` rejects other names. -- `distros//patch/dependencies.yaml` is for dependency fixes, not source patches - (`shared/patch/dependencies.yaml` for all distributions). +- Dependency fixes are not source patches: they are `add_*`/`remove_*` keys in + `distros//pkg_additional_info.yaml` (`shared/pkg_additional_info.yaml` for all + distributions). ## Create a patch from work-directory edits diff --git a/AGENTS.md b/AGENTS.md index 8e51076a9..bee0c4840 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,7 +14,7 @@ to read without Claude): ## Layout and rules - Every distribution lives in `distros//` (only distro-specific data); shared - data is in `shared/` (vinca.yaml, pkg_additional_info.yaml, dependencies.yaml, + data is in `shared/` (vinca.yaml, pkg_additional_info.yaml with the dependency fixes, robostack.yaml, pinning, tests), tools in `tools/`. See README.md for the layout and how they combine. Never edit `distros//work/`: every task regenerates it. - A fix that applies to every distribution goes into `shared/`; a version-specific one @@ -39,8 +39,8 @@ to read without Claude): `vinca.yaml` (see `robostack-package-selection`), not an ad-hoc comment. - One patch per package and platform: `distros//patch/ros2-[.osx|.linux|.win|.unix].patch`. Packages are only built - under the new `ros2-` names (`package_name_mode: new`); write dependencies in - `dependencies.yaml` as `ros2-` too. + under the new `ros2-` names (`package_name_mode: new`); write dependency fixes in + `pkg_additional_info.yaml` as `ros2-` too. ## Everyday commands diff --git a/README.md b/README.md index a2f0a016d..669ed408c 100644 --- a/README.md +++ b/README.md @@ -44,20 +44,21 @@ If you use RoboStack in your academic work, please cite: distros// only what is specific to one distribution distro.yaml channel, where it's uploaded and read from, conda-forge pinning version/migrations, own pins, rosdistro sync vinca.yaml extends shared/vinca.yaml: ros_distro, build number, mutex version, its exceptions - pkg_additional_info.yaml its own per-package settings (build numbers, version-specific cmake args) - patch/ its patches; patch/dependencies.yaml its own dependency fixes + pkg_additional_info.yaml its own per-package settings (build numbers, version-specific cmake args, dependency fixes) + patch/ its patches rosdistro_snapshot.yaml, rosdistro_additional_recipes.yaml ci.yaml temporary PR-build controls (full rebuild, cache evictions) conda_build_config.yaml generated: `pixi run rs render-pinning` work/ generated, git-ignored: where vinca and rattler-build run shared/ the same for every distribution vinca.yaml settings and the package selection of every distribution - pkg_additional_info.yaml per-package settings that are the same everywhere - patch/dependencies.yaml dependency fixes that are the same everywhere + pkg_additional_info.yaml per-package settings and dependency fixes (add_host, remove_run, ...) that are the same everywhere robostack.yaml rosdep key -> conda package mapping (`robostack: []` drops a key) (also copied to pixi-build-ros: robostack-bot sync-pixi-mappings) pinning/ conda-forge pinning version, migrations and overrides tests/ package tests (ros2-.yaml; `if: ros_distro ...` for distro-specific bits) + patch/ patches that apply to every distribution + files// copied into that package's recipe (ros_workspace's activation scripts) tools/robostack.py `pixi run rs ...`: every task, for one distribution or the repository tools/maintenance.py checks and robostack-bot commands tools/import_distro.py (re)import a distribution from its own repository @@ -79,7 +80,7 @@ combines the two, and the files next to each: - `mutex_package`: name and `upper_bound` are shared; each distribution sets its own `version`. The mutex only keeps one distribution per environment and has no `run_constraints` (`rs check` enforces it): library versions come from the packages' own dependencies, and wrong ones are fixed in the package's metadata. - Other keys come from the distribution if it sets them, else from `shared/`. A distribution that differs from a shared setting just sets it. - Paths are relative to the file that sets them. `distros//work/vinca.yaml` (generated) extends the distribution's file and adds `skip_existing` (its channel). -- **`pkg_additional_info.yaml` and `patch/dependencies.yaml`:** merged per package. The distribution's keys win, for example its own `build_number` on top of a shared `additional_cmake_args`. +- **`pkg_additional_info.yaml`:** merged per package. The distribution's keys win, for example its own `build_number` on top of a shared `additional_cmake_args`. - **`patch/*.patch` and `tests/`:** per package, the distribution's file replaces the shared one. In tests, `- if: ros_distro in ["humble", "jazzy"]` blocks select distribution-specific parts. - **`vinca_pinning.yaml`:** the shared pinning, adjusted by `distro.yaml`: - `conda_forge_pinning_version` and `conda_forge_migrations` keep a distribution on its own conda-forge pinning, for example until its next full rebuild; diff --git a/distros/humble/patch/dependencies.yaml b/distros/humble/patch/dependencies.yaml deleted file mode 100644 index 0a5553164..000000000 --- a/distros/humble/patch/dependencies.yaml +++ /dev/null @@ -1,198 +0,0 @@ -as2_behaviors_trajectory_generation: - # conda-forge's NLopt (and glog, gflags) for the dynamic_trajectory_generator it fetches, so that - # doesn't build NLopt itself (fails with CMake 4); see patch/ros2-as2-behaviors-trajectory-generation.patch - add_host: ["nlopt", "glog", "gflags"] - add_run: ["nlopt", "glog", "gflags"] -autoware_trajectory: - remove_host: ["ros2-tl-expected"] - remove_run: ["ros2-tl-expected"] - add_host: ["cpp-expected"] - add_run: ["cpp-expected"] -aws_sdk_cpp_vendor: - add_host: ["aws-sdk-cpp"] - add_run: ["aws-sdk-cpp"] -backward_ros: - # binutils linux-only: -liberty not found on macOS. - add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] -behaviortree_cpp_v3: - add_host: ["libboost-devel", "cppzmq"] - add_run: ["libboost"] -cartographer: - # Dummy package; drop unpinned lua/gflags, they conflict with the real cartographer's pins. - remove_host: ["lua", "gflags"] - remove_run: ["lua", "gflags"] -cartographer_ros: - add_host: ["cartographer 2.*", "libboost-devel"] -console_bridge_vendor: - add_host: ["console_bridge"] - add_run: ["console_bridge"] -depthai: - add_host: ["${{ 'elfutils' if linux }}"] -foxglove_bridge: - add_host: ["ros2-ament-cmake"] -generate_parameter_library: - remove_host: ["ros2-tl-expected"] - remove_run: ["ros2-tl-expected"] - add_host: ["cpp-expected"] - add_run: ["cpp-expected"] -geometric_shapes: - add_host: ["libboost-devel", "octomap"] -image_view: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 - add_run: ["libopencv * *qt6*"] -intra_process_demo: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 - add_run: ["libopencv * *qt6*"] -kdl_parser: - # package.xml doesn't declare eigen3_cmake_module, but orocos_kdl_vendor's cmake needs it. - add_host: ["ros2-eigen3-cmake-module"] -lbr_description: - remove_run: ["ros2-gz-ros2-control"] - add_run: ["${{ 'ros2-gz-ros2-control' if linux }}"] -lbr_ros2_control: - add_host: ["ros2-kinematics-interface"] - add_run: ["ros2-kinematics-interface"] -libg2o: - add_host: ["${{ 'libglu' if linux }}", "${{ 'freeglut' if not osx }}"] -libstatistics_collector: - add_host: ["ros2-yaml-cpp-vendor"] -mimick_vendor: - add_build: ["vcstool"] -moveit_visual_tools: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -mrpt_gui: - # Overrides shared/: this distribution maps Qt to qt-main 5.15, whose builds need - # gstreamer <1.27, while the pinned wxwidgets (3.3.3) needs gstreamer 1.28. A version - # spec bypasses that pin, so the solver picks a wxwidgets that coexists with qt-main. - add_host: ["wxwidgets >=3.2", "${{ 'glad' if win }}"] # glad: as in shared/ -nav2_constrained_smoother: - add_host: ["${{ 'openblas' if win }}"] -nav2_util: - add_host: ["libboost-devel"] -opennav_coverage: - # package.xml misses deps that CMakeLists.txt finds - add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] - add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] -openvdb_vendor: - add_host: ["openvdb"] -parameter_traits: - remove_host: ["ros2-tl-expected"] - remove_run: ["ros2-tl-expected"] - add_host: ["cpp-expected"] - add_run: ["cpp-expected"] -pcl_conversions: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] -plotjuggler: - add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "git-lfs"] -polygon_rviz_plugins: - add_host: ["libgl-devel"] - add_run: ["libgl-devel"] -py_trees: - add_host: ["hatchling"] # 2.6 builds with hatchling (as in jazzy/lyrical) -py_trees_js: - add_host: ["hatchling"] -py_trees_ros_tutorials: - # the mock GUI is ported to PyQt6 (patch/ros2-py-trees-ros-tutorials.patch): PyQt5 and - # PyQt6 (the rqt stack) can't be installed together - remove_run: ["pyqt", "pyqt-builder"] - add_run: ["pyqt6"] -pybind11_json_vendor: - add_host: ["pybind11_json"] - add_run: ["pybind11_json"] -python_qt_binding: - # pyside2 has no python 3.14 build; port to PyQt6 instead. - remove_host: ["qt-main", "pyqt"] - remove_run: ["qt-main", "pyqt"] - # sip <6.16: 6.16.x regressed ABI targeting for PyQt-based bindings. - add_host: ["pyqt-builder", "pep517", "qt6-main", "pyqt6", "sip <6.16"] - add_run: ["pyqt-builder", "pep517", "qt6-main", "pyqt6"] -qt_gui: - # Same PyQt6 port as python_qt_binding/qt_gui_cpp below. - remove_host: ["qt-main", "pyqt"] - remove_run: ["qt-main", "pyqt"] - add_host: ["qt6-main", "pyqt6"] - add_run: ["qt6-main", "pyqt6"] -qt_gui_cpp: - # Ported to PyQt6, see patch/ros2-qt-gui-cpp.patch. - remove_host: ["qt-main", "pyqt"] - remove_run: ["qt-main", "pyqt"] - add_build: ["${{ 'pyqt6' if (build_platform != target_platform) }}", "${{ 'qt6-main' if (build_platform != target_platform) }}"] - # sip pinned directly for the same reason as python_qt_binding above. - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "pep517", "qt6-main", "pyqt6", "sip <6.16"] - add_run: ["pyqt-builder", "pep517", "qt6-main", "pyqt6"] -rcl: - add_host: ["ros2-yaml-cpp-vendor"] -rcl_action: - add_host: ["ros2-yaml-cpp-vendor"] -rclc: - add_host: ["ros2-yaml-cpp-vendor"] -rclcpp: - add_host: ["ros2-yaml-cpp-vendor"] -rclcpp_action: - add_host: ["ros2-yaml-cpp-vendor"] -rclpy: - add_host: ["typing_extensions"] - add_run: ["typing_extensions"] -rmw_implementation: - add_host: - - "ros2-yaml-cpp-vendor" - - "fmt" -ros_gz_sim: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -ros_ign_gazebo: - add_host: ["ros2-std-msgs", "ros2-rclcpp", "${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -ros_ign_interfaces: - add_host: ["ros2-rcl-interfaces"] -ros_image_to_qimage: - # Same PyQt6 port as qt_gui_cpp/rqt_gui_cpp above (patch/ros2-ros-image-to-qimage.patch). - remove_host: ["qt-main"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] -rqt_gui_cpp: - remove_host: ["qt-main"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] -rqt_image_overlay: - # Same PyQt6 port as qt_gui_cpp/rqt_gui_cpp above (patch/ros2-rqt-image-overlay.patch). - remove_host: ["qt-main"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] -rqt_image_overlay_layer: - # Same PyQt6 port as qt_gui_cpp/rqt_gui_cpp above (patch/ros2-rqt-image-overlay-layer.patch). - remove_host: ["qt-main"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] -rqt_image_view: - remove_host: ["qt-main"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] -rqt_py_common: - remove_host: ["qt-main"] - add_host: ["qt6-main"] -rtabmap: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] - remove_host: ["ros2-qt-gui-cpp"] - remove_run: ["ros2-qt-gui-cpp"] -rviz_ogre_vendor: - add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}"] - add_build: ["vcstool"] - add_run: ["assimp"] -slam_toolbox: - add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -spatio_temporal_voxel_layer: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "openvdb"] -spdlog_vendor: - add_host: ["spdlog"] - add_run: ["spdlog"] -tracetools: - remove_host: ["pkg-config"] -uncrustify_vendor: - add_host: ["uncrustify"] - add_run: ["uncrustify"] -ur_moveit_config: - add_host: ["ros2-rclpy"] - add_run: ["ros2-rclpy"] -vision_msgs_rviz_plugins: - add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -warehouse_ros_sqlite: - add_host: ["ros2-sqlite3-vendor"] - add_run: ["ros2-sqlite3-vendor"] diff --git a/distros/humble/pkg_additional_info.yaml b/distros/humble/pkg_additional_info.yaml index 89ae69645..140098579 100644 --- a/distros/humble/pkg_additional_info.yaml +++ b/distros/humble/pkg_additional_info.yaml @@ -2,8 +2,37 @@ apriltag: generate_dummy_package_with_run_deps: dep_name: apriltag max_pin: 'x.x.x' +as2_behaviors_trajectory_generation: + # conda-forge's NLopt (and glog, gflags) for the dynamic_trajectory_generator it fetches, so that + # doesn't build NLopt itself (fails with CMake 4); see patch/ros2-as2-behaviors-trajectory-generation.patch + add_host: ["nlopt", "glog", "gflags"] + add_run: ["nlopt", "glog", "gflags"] +autoware_trajectory: + remove_host: ["ros2-tl-expected"] + remove_run: ["ros2-tl-expected"] + add_host: ["cpp-expected"] + add_run: ["cpp-expected"] +aws_sdk_cpp_vendor: + add_host: ["aws-sdk-cpp"] + add_run: ["aws-sdk-cpp"] +backward_ros: + # binutils linux-only: -liberty not found on macOS. + add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] +behaviortree_cpp_v3: + add_host: ["libboost-devel", "cppzmq"] + add_run: ["libboost"] +cartographer: + # Dummy package; drop unpinned lua/gflags, they conflict with the real cartographer's pins. + remove_host: ["lua", "gflags"] + remove_run: ["lua", "gflags"] cartographer_ros: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["cartographer 2.*", "libboost-devel"] +console_bridge_vendor: + add_host: ["console_bridge"] + add_run: ["console_bridge"] +depthai: + add_host: ["${{ 'elfutils' if linux }}"] eigenpy: generate_dummy_package_with_run_deps: dep_name: eigenpy @@ -14,6 +43,15 @@ fastrtps: additional_cmake_args: if: unix then: '-DCMAKE_CXX_FLAGS="-include cstdint"' +foxglove_bridge: + add_host: ["ros2-ament-cmake"] +generate_parameter_library: + remove_host: ["ros2-tl-expected"] + remove_run: ["ros2-tl-expected"] + add_host: ["cpp-expected"] + add_run: ["cpp-expected"] +geometric_shapes: + add_host: ["libboost-devel", "octomap"] gtsam: generate_dummy_package_with_run_deps: dep_name: gtsam @@ -45,6 +83,23 @@ ignition_cmake2_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK -DBUILD_TESTING=OFF" ignition_math6_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK -DBUILD_TESTING=OFF" +image_view: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 + add_run: ["libopencv * *qt6*"] +intra_process_demo: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 + add_run: ["libopencv * *qt6*"] +kdl_parser: + # package.xml doesn't declare eigen3_cmake_module, but orocos_kdl_vendor's cmake needs it. + add_host: ["ros2-eigen3-cmake-module"] +lbr_description: + remove_run: ["ros2-gz-ros2-control"] + add_run: ["${{ 'ros2-gz-ros2-control' if linux }}"] +lbr_ros2_control: + add_host: ["ros2-kinematics-interface"] + add_run: ["ros2-kinematics-interface"] libcamera: generate_dummy_package_with_run_deps: dep_name: libcamera @@ -54,14 +109,29 @@ libcamera: override_version: '0.5.0' libg2o: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["${{ 'libglu' if linux }}", "${{ 'freeglut' if not osx }}"] librealsense2: generate_dummy_package_with_run_deps: dep_name: librealsense max_pin: 'x.x' override_version: 2.58.3 # Until: https://github.com/conda-forge/librealsense-feedstock/pull/91 +libstatistics_collector: + add_host: ["ros2-yaml-cpp-vendor"] mimick_vendor: # its FetchContent'd mimick has cmake_minimum_required < 3.5 (CMake 4 rejects that) additional_cmake_args: "-DCMAKE_POLICY_VERSION_MINIMUM=3.5" + add_build: ["vcstool"] +moveit_visual_tools: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +mrpt_gui: + # Overrides shared/: this distribution maps Qt to qt-main 5.15, whose builds need + # gstreamer <1.27, while the pinned wxwidgets (3.3.3) needs gstreamer 1.28. A version + # spec bypasses that pin, so the solver picks a wxwidgets that coexists with qt-main. + add_host: ["wxwidgets >=3.2", "${{ 'glad' if win }}"] # glad: as in shared/ +nav2_constrained_smoother: + add_host: ["${{ 'openblas' if win }}"] +nav2_util: + add_host: ["libboost-devel"] octomap: generate_dummy_package_with_run_deps: dep_name: octomap @@ -74,6 +144,22 @@ ompl: max_pin: 'x.x' # OMPL 2 is rebuilt for Boost 1.90 on all supported platforms. override_version: '2.0.1' +opennav_coverage: + # package.xml misses deps that CMakeLists.txt finds + add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] + add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] +openvdb_vendor: + add_host: ["openvdb"] +parameter_traits: + remove_host: ["ros2-tl-expected"] + remove_run: ["ros2-tl-expected"] + add_host: ["cpp-expected"] + add_run: ["cpp-expected"] +pcl_conversions: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] +polygon_rviz_plugins: + add_host: ["libgl-devel"] + add_run: ["libgl-devel"] proxsuite: generate_dummy_package_with_run_deps: dep_name: proxsuite @@ -86,11 +172,106 @@ py_trees: dep_name: py-trees max_pin: 'x.x.x' override_version: 2.6.0 + add_host: ["hatchling"] # 2.6 builds with hatchling (as in jazzy/lyrical) +py_trees_js: + add_host: ["hatchling"] +py_trees_ros_tutorials: + # the mock GUI is ported to PyQt6 (patch/ros2-py-trees-ros-tutorials.patch): PyQt5 and + # PyQt6 (the rqt stack) can't be installed together + remove_run: ["pyqt", "pyqt-builder"] + add_run: ["pyqt6"] +pybind11_json_vendor: + add_host: ["pybind11_json"] + add_run: ["pybind11_json"] +python_qt_binding: + # pyside2 has no python 3.14 build; port to PyQt6 instead. + remove_host: ["qt-main", "pyqt"] + remove_run: ["qt-main", "pyqt"] + # sip <6.16: 6.16.x regressed ABI targeting for PyQt-based bindings. + add_host: ["pyqt-builder", "pep517", "qt6-main", "pyqt6", "sip <6.16"] + add_run: ["pyqt-builder", "pep517", "qt6-main", "pyqt6"] +qt_gui: + # Same PyQt6 port as python_qt_binding/qt_gui_cpp below. + remove_host: ["qt-main", "pyqt"] + remove_run: ["qt-main", "pyqt"] + add_host: ["qt6-main", "pyqt6"] + add_run: ["qt6-main", "pyqt6"] +qt_gui_cpp: + # Ported to PyQt6, see patch/ros2-qt-gui-cpp.patch. + remove_host: ["qt-main", "pyqt"] + remove_run: ["qt-main", "pyqt"] + add_build: ["${{ 'pyqt6' if (build_platform != target_platform) }}", "${{ 'qt6-main' if (build_platform != target_platform) }}"] + # sip pinned directly for the same reason as python_qt_binding above. + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "pep517", "qt6-main", "pyqt6", "sip <6.16"] + add_run: ["pyqt-builder", "pep517", "qt6-main", "pyqt6"] +rcl: + add_host: ["ros2-yaml-cpp-vendor"] +rcl_action: + add_host: ["ros2-yaml-cpp-vendor"] +rclc: + add_host: ["ros2-yaml-cpp-vendor"] +rclcpp: + add_host: ["ros2-yaml-cpp-vendor"] +rclcpp_action: + add_host: ["ros2-yaml-cpp-vendor"] +rclpy: + add_host: ["typing_extensions"] + add_run: ["typing_extensions"] +rmw_implementation: + add_host: + - "ros2-yaml-cpp-vendor" + - "fmt" +ros_gz_sim: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +ros_ign_gazebo: + add_host: ["ros2-std-msgs", "ros2-rclcpp", "${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +ros_ign_interfaces: + add_host: ["ros2-rcl-interfaces"] +ros_image_to_qimage: + # Same PyQt6 port as qt_gui_cpp/rqt_gui_cpp above (patch/ros2-ros-image-to-qimage.patch). + remove_host: ["qt-main"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] +rqt_gui_cpp: + remove_host: ["qt-main"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] +rqt_image_overlay: + # Same PyQt6 port as qt_gui_cpp/rqt_gui_cpp above (patch/ros2-rqt-image-overlay.patch). + remove_host: ["qt-main"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] +rqt_image_overlay_layer: + # Same PyQt6 port as qt_gui_cpp/rqt_gui_cpp above (patch/ros2-rqt-image-overlay-layer.patch). + remove_host: ["qt-main"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] +rqt_image_view: + remove_host: ["qt-main"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] +rqt_py_common: + remove_host: ["qt-main"] + add_host: ["qt6-main"] rtabmap: additional_cmake_args: if: win then: "-DWITH_QT=OFF -DBUILD_TOOLS=OFF -DBUILD_EXAMPLES=OFF -DWITH_GTSAM=OFF" else: "-DWITH_QT=OFF -DBUILD_TOOLS=OFF -DBUILD_EXAMPLES=OFF" + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] + remove_host: ["ros2-qt-gui-cpp"] + remove_run: ["ros2-qt-gui-cpp"] +rviz_ogre_vendor: + add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}"] + add_build: ["vcstool"] + add_run: ["assimp"] +slam_toolbox: + add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +spdlog_vendor: + add_host: ["spdlog"] + add_run: ["spdlog"] +uncrustify_vendor: + add_host: ["uncrustify"] + add_run: ["uncrustify"] +ur_moveit_config: + add_host: ["ros2-rclpy"] + add_run: ["ros2-rclpy"] urdfdom: generate_dummy_package_with_run_deps: dep_name: urdfdom @@ -102,6 +283,12 @@ urdfdom_headers: dep_name: urdfdom_headers max_pin: 'x.x' override_version: '3.0.0' +vision_msgs_rviz_plugins: + add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +warehouse_ros_sqlite: + add_host: ["ros2-sqlite3-vendor"] + add_run: ["ros2-sqlite3-vendor"] # Remove build_number fields below on new full rebuild zenoh_cpp_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK -DUSE_SYSTEM_ZENOH=ON" @@ -113,12 +300,15 @@ aruco_ros: # its recipe test stops the node for sure (package tests hung on mac build_number: 23 plotjuggler: build_number: 24 + add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "git-lfs"] rtabmap_slam: # its recipe test stops the node for sure (package tests hung on macOS) build_number: 23 spatio_temporal_voxel_layer: build_number: 23 + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "openvdb"] tracetools: build_number: 24 + remove_host: ["pkg-config"] urdf: # drop deprecated urdf_world/types.h include (ros2/urdf#54) for headers 3.x build_number: 23 urdf_parser_plugin: # use urdf_model/types.h (ros2/urdf#54) for headers 3.x diff --git a/distros/humble/robostack.yaml b/distros/humble/robostack.yaml index 76ff56655..4bdbd7e2f 100644 --- a/distros/humble/robostack.yaml +++ b/distros/humble/robostack.yaml @@ -1,6 +1,6 @@ # Qt5 for the Qt5 rosdep keys: this distribution's rviz and GUI packages still build # against Qt5 (the shared mapping, for lyrical and newer, is Qt6). Packages already -# ported to Qt6/PyQt6 swap qt-main in patch/dependencies.yaml. +# ported to Qt6/PyQt6 swap qt-main in pkg_additional_info.yaml. libqt5-core: robostack: linux: [qt-main, libopengl-devel, libgl-devel] diff --git a/distros/jazzy/patch/dependencies.yaml b/distros/jazzy/patch/dependencies.yaml deleted file mode 100644 index 85f10513e..000000000 --- a/distros/jazzy/patch/dependencies.yaml +++ /dev/null @@ -1,195 +0,0 @@ -autoware_utils_debug: - add_host: ["fmt"] -autoware_utils_pcl: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -backward_ros: - # binutils linux-only: -liberty not found on macOS. - add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] -cartographer_ros: - add_host: ["cartographer 2.*", "libboost-devel"] -cloudini_lib: - add_host: ["eigen-abi-devel"] -cloudini_ros: - add_host: ["eigen-abi-devel"] -depthai: - add_host: ["${{ 'elfutils' if linux }}"] -easynav_bonxai_maps_manager: - # drop once easynav_bonxai_maps_manager is updated to 0.4.2 - add_host: ["eigen-abi-devel"] -easynav_octomap_maps_manager: - # drop once easynav_octomap_maps_manager is updated to 0.4.2 - add_host: ["octomap"] -foxglove_bridge: - add_host: ["ros2-ament-cmake"] -geometric_shapes: - add_host: ["octomap"] -gz_cmake_vendor: - # Major version pin selects the Gazebo release matching jazzy (applies to all gz-* vendor packages). - add_host: ["gz-cmake3"] - add_run: ["gz-cmake3"] -gz_common_vendor: - add_host: ["gz-common5"] - add_run: ["gz-common5"] -gz_dartsim_vendor: - add_host: ["dartsim-cpp"] - add_run: ["dartsim-cpp"] -gz_fuel_tools_vendor: - add_host: ["gz-fuel-tools9"] - add_run: ["gz-fuel-tools9"] -gz_gui_vendor: - add_host: ["gz-gui8"] - add_run: ["gz-gui8"] -gz_launch_vendor: - add_host: ["gz-launch7"] - add_run: ["gz-launch7"] -gz_math_vendor: - add_host: ["gz-math7"] - add_run: ["gz-math7"] -gz_msgs_vendor: - add_host: ["gz-msgs10"] - add_run: ["gz-msgs10"] -gz_ogre_next_vendor: - # wraps conda-forge's ogre-next (no OGRE-Next build): no shaderc, as in lyrical - add_host: ["ogre-next"] - add_run: ["ogre-next"] - remove_host: ["shaderc"] - remove_run: ["shaderc"] -gz_physics_vendor: - add_host: ["gz-physics7"] - add_run: ["gz-physics7"] -gz_plugin_vendor: - add_host: ["gz-plugin2"] - add_run: ["gz-plugin2"] -gz_rendering_vendor: - add_host: ["gz-rendering8", "swig"] - # find_package(gz-rendering) requires find_package(OpenGL) to work - add_run: ["gz-rendering8", "swig", "${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -gz_ros2_control: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -gz_ros2_control_demos: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -gz_sensors_vendor: - add_host: ["gz-sensors8"] - add_run: ["gz-sensors8"] -gz_sim_vendor: - add_host: ["gz-sim8"] - add_run: ["gz-sim8"] -gz_tools_vendor: - add_host: ["gz-tools2"] - add_run: ["gz-tools2"] -gz_transport_vendor: - add_host: ["gz-transport13"] - add_run: ["gz-transport13"] -gz_utils_vendor: - add_host: ["gz-utils2"] - add_run: ["gz-utils2"] -image_view: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 - add_run: ["libopencv * *qt6*"] -intra_process_demo: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 - add_run: ["libopencv * *qt6*"] -lbr_ros2_control: - add_host: ["ros2-kinematics-interface"] - add_run: ["ros2-kinematics-interface"] -libg2o: - add_host: ["${{ 'libglu' if linux }}", "${{ 'freeglut' if not osx }}"] -mimick_vendor: - add_build: ["vcstool", "setuptools <81"] - add_host: ["setuptools <81"] -moveit_visual_tools: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -mrpt_gui: - # Overrides shared/: this distribution maps Qt to qt-main 5.15, whose builds need - # gstreamer <1.27, while the pinned wxwidgets (3.3.3) needs gstreamer 1.28. A version - # spec bypasses that pin, so the solver picks a wxwidgets that coexists with qt-main. - add_host: ["wxwidgets >=3.2", "${{ 'glad' if win }}"] # glad: as in shared/ -nav2_constrained_smoother: - add_host: ["${{ 'openblas' if win }}"] -nav2_mppi_controller: - add_run: ["xtensor==0.25.0"] -nav2_util: - add_host: ["libboost-devel"] -opennav_coverage: - # package.xml misses deps that CMakeLists.txt finds - add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] - add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] -openvdb_vendor: - add_host: ["openvdb"] -pcl_conversions: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] -plotjuggler: - add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "git-lfs"] -py_trees: - add_host: ["hatchling"] # 2.6 builds with hatchling (as in lyrical) -py_trees_js: - add_host: - - hatchling -py_trees_ros_tutorials: - # the mock GUI imports PyQt5 (jazzy's rqt stack is Qt5 too), but package.xml doesn't declare it - add_run: ["pyqt"] -python_qt_binding: - # sip <6.16: exact pin conflicts with pyqt5-sip's range; unpinned risks the 6.16.x ABI regression. - add_host: ["pyqt-builder", "sip <6.16"] - add_run: ["pyqt-builder"] -qt_gui_cpp: - add_build: ["${{ 'pyqt' if (build_platform != target_platform) }}", "${{ 'qt-main' if (build_platform != target_platform) }}"] - # Same sip <6.16 fix as python_qt_binding above (pulls its own pyqt5/pyqt5-sip into this host solve too). - # Only the PyQt (sip) bindings: pyside2 has no Python 3.14 build, and the shiboken - # bindings are optional (built only when python_qt_binding's shiboken_helper finds it). - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "pep517", "sip <6.16"] - add_run: ["pyqt-builder", "pep517"] -roboplan_example_models: - # src/resources.cpp uses dladdr() from dlfcn.h, which is POSIX-only. - # On Windows we need to depend on dlfcn-win32 instead. - add_host: ["${{ 'dlfcn-win32' if win }}"] -roboplan_ros_examples: - # package.xml misses the ament_cmake dep; fixed in roboplan_ros 0.7.0, drop after that release. - add_host: ["ros2-ament-cmake"] -ros_gz_sim: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -ros_image_to_qimage: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rqt_gui_cpp: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rqt_image_overlay: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rqt_image_overlay_layer: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rqt_image_view: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rtabmap: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] -rviz_ogre_vendor: - add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}", "setuptools <81"] - add_build: ["vcstool", "setuptools <81"] - add_run: ["assimp"] -sdformat_vendor: - add_host: ["sdformat14"] - add_run: ["sdformat14"] -slam_toolbox: - add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "blas-devel"] -spatio_temporal_voxel_layer: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "openvdb"] -swri_console: - add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] - add_host: ["libboost-devel", "qt-main", "${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - add_run: ["libboost", "qt-main"] -# TODO unvendor?! -uncrustify_vendor: - add_build: ["vcstool", "setuptools <81"] - add_host: ["setuptools <81"] - # See https://github.com/ament/uncrustify_vendor/blob/jazzy/CMakeLists.txt#L19 - add_run: ["uncrustify >=0.78"] -ur_moveit_config: - add_host: ["ros2-rclpy"] - add_run: ["ros2-rclpy"] -vision_msgs_rviz_plugins: - add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -warehouse_ros_sqlite: - add_host: ["ros2-sqlite3-vendor"] - add_run: ["ros2-sqlite3-vendor"] diff --git a/distros/jazzy/pkg_additional_info.yaml b/distros/jazzy/pkg_additional_info.yaml index 8dee9d078..779abd664 100644 --- a/distros/jazzy/pkg_additional_info.yaml +++ b/distros/jazzy/pkg_additional_info.yaml @@ -2,19 +2,97 @@ apriltag: generate_dummy_package_with_run_deps: dep_name: apriltag max_pin: 'x.x.x' +autoware_utils_debug: + add_host: ["fmt"] +autoware_utils_pcl: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +backward_ros: + # binutils linux-only: -liberty not found on macOS. + add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] cartographer_ros: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["cartographer 2.*", "libboost-devel"] +cloudini_lib: + add_host: ["eigen-abi-devel"] +cloudini_ros: + add_host: ["eigen-abi-devel"] +depthai: + add_host: ["${{ 'elfutils' if linux }}"] +easynav_bonxai_maps_manager: + # drop once easynav_bonxai_maps_manager is updated to 0.4.2 + add_host: ["eigen-abi-devel"] +easynav_octomap_maps_manager: + # drop once easynav_octomap_maps_manager is updated to 0.4.2 + add_host: ["octomap"] eigenpy: generate_dummy_package_with_run_deps: dep_name: eigenpy max_pin: 'x.x.x' override_version: '3.13.0' +foxglove_bridge: + add_host: ["ros2-ament-cmake"] +geometric_shapes: + add_host: ["octomap"] gtsam: generate_dummy_package_with_run_deps: dep_name: gtsam max_pin: 'x.x' # jazzy is on 4.2.0, but we stick to 4.2.1 for compat with the rest of conda-forge override_version: '4.2.1' +gz_cmake_vendor: + # Major version pin selects the Gazebo release matching jazzy (applies to all gz-* vendor packages). + add_host: ["gz-cmake3"] + add_run: ["gz-cmake3"] +gz_common_vendor: + add_host: ["gz-common5"] + add_run: ["gz-common5"] +gz_dartsim_vendor: + add_host: ["dartsim-cpp"] + add_run: ["dartsim-cpp"] +gz_fuel_tools_vendor: + add_host: ["gz-fuel-tools9"] + add_run: ["gz-fuel-tools9"] +gz_gui_vendor: + add_host: ["gz-gui8"] + add_run: ["gz-gui8"] +gz_launch_vendor: + add_host: ["gz-launch7"] + add_run: ["gz-launch7"] +gz_math_vendor: + add_host: ["gz-math7"] + add_run: ["gz-math7"] +gz_msgs_vendor: + add_host: ["gz-msgs10"] + add_run: ["gz-msgs10"] +gz_physics_vendor: + add_host: ["gz-physics7"] + add_run: ["gz-physics7"] +gz_plugin_vendor: + add_host: ["gz-plugin2"] + add_run: ["gz-plugin2"] +gz_rendering_vendor: + add_host: ["gz-rendering8", "swig"] + # find_package(gz-rendering) requires find_package(OpenGL) to work + add_run: ["gz-rendering8", "swig", "${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +gz_ros2_control: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +gz_ros2_control_demos: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +gz_sensors_vendor: + add_host: ["gz-sensors8"] + add_run: ["gz-sensors8"] +gz_sim_vendor: + add_host: ["gz-sim8"] + add_run: ["gz-sim8"] +gz_tools_vendor: + add_host: ["gz-tools2"] + add_run: ["gz-tools2"] +gz_transport_vendor: + add_host: ["gz-transport13"] + add_run: ["gz-transport13"] +gz_utils_vendor: + add_host: ["gz-utils2"] + add_run: ["gz-utils2"] hpp_fcl: generate_dummy_package_with_run_deps: dep_name: hpp-fcl @@ -36,6 +114,17 @@ iceoryx_posh: dep_name: libiceoryx-posh max_pin: 'x.x' override_version: '2.95.8' +image_view: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 + add_run: ["libopencv * *qt6*"] +intra_process_demo: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 + add_run: ["libopencv * *qt6*"] +lbr_ros2_control: + add_host: ["ros2-kinematics-interface"] + add_run: ["ros2-kinematics-interface"] libcamera: generate_dummy_package_with_run_deps: dep_name: libcamera @@ -45,6 +134,7 @@ libcamera: override_version: '0.5.0' libg2o: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["${{ 'libglu' if linux }}", "${{ 'freeglut' if not osx }}"] librealsense2: generate_dummy_package_with_run_deps: dep_name: librealsense @@ -58,6 +148,22 @@ mcap_vendor: additional_cmake_args: if: unix then: '-DCMAKE_CXX_FLAGS="-include cstdint"' +mimick_vendor: + add_build: ["vcstool", "setuptools <81"] + add_host: ["setuptools <81"] +moveit_visual_tools: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +mrpt_gui: + # Overrides shared/: this distribution maps Qt to qt-main 5.15, whose builds need + # gstreamer <1.27, while the pinned wxwidgets (3.3.3) needs gstreamer 1.28. A version + # spec bypasses that pin, so the solver picks a wxwidgets that coexists with qt-main. + add_host: ["wxwidgets >=3.2", "${{ 'glad' if win }}"] # glad: as in shared/ +nav2_constrained_smoother: + add_host: ["${{ 'openblas' if win }}"] +nav2_mppi_controller: + add_run: ["xtensor==0.25.0"] +nav2_util: + add_host: ["libboost-devel"] octomap: generate_dummy_package_with_run_deps: dep_name: octomap @@ -68,6 +174,14 @@ ompl: max_pin: 'x.x' # OMPL 2 is rebuilt for Boost 1.90 on all supported platforms. override_version: '2.0.1' +opennav_coverage: + # package.xml misses deps that CMakeLists.txt finds + add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] + add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] +openvdb_vendor: + add_host: ["openvdb"] +pcl_conversions: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] proxsuite: generate_dummy_package_with_run_deps: dep_name: proxsuite @@ -78,6 +192,24 @@ py_trees: dep_name: py-trees max_pin: 'x.x.x' override_version: '2.6.0' + add_host: ["hatchling"] # 2.6 builds with hatchling (as in lyrical) +py_trees_js: + add_host: + - hatchling +py_trees_ros_tutorials: + # the mock GUI imports PyQt5 (jazzy's rqt stack is Qt5 too), but package.xml doesn't declare it + add_run: ["pyqt"] +python_qt_binding: + # sip <6.16: exact pin conflicts with pyqt5-sip's range; unpinned risks the 6.16.x ABI regression. + add_host: ["pyqt-builder", "sip <6.16"] + add_run: ["pyqt-builder"] +qt_gui_cpp: + add_build: ["${{ 'pyqt' if (build_platform != target_platform) }}", "${{ 'qt-main' if (build_platform != target_platform) }}"] + # Same sip <6.16 fix as python_qt_binding above (pulls its own pyqt5/pyqt5-sip into this host solve too). + # Only the PyQt (sip) bindings: pyside2 has no Python 3.14 build, and the shiboken + # bindings are optional (built only when python_qt_binding's shiboken_helper finds it). + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "pep517", "sip <6.16"] + add_run: ["pyqt-builder", "pep517"] roboplan: generate_dummy_package_with_run_deps: dep_name: roboplan-python @@ -98,10 +230,16 @@ roboplan_example_models: generate_dummy_package_with_run_deps: dep_name: roboplan-example-models-python max_pin: 'x.x' + # src/resources.cpp uses dladdr() from dlfcn.h, which is POSIX-only. + # On Windows we need to depend on dlfcn-win32 instead. + add_host: ["${{ 'dlfcn-win32' if win }}"] roboplan_oink: generate_dummy_package_with_run_deps: dep_name: roboplan-oink-python max_pin: 'x.x' +roboplan_ros_examples: + # package.xml misses the ament_cmake dep; fixed in roboplan_ros 0.7.0, drop after that release. + add_host: ["ros2-ament-cmake"] roboplan_rrt: generate_dummy_package_with_run_deps: dep_name: roboplan-rrt-python @@ -114,8 +252,40 @@ roboplan_toppra: generate_dummy_package_with_run_deps: dep_name: roboplan-toppra-python max_pin: 'x.x' +ros_gz_sim: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +ros_image_to_qimage: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +rqt_gui_cpp: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +rqt_image_overlay: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +rqt_image_overlay_layer: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +rqt_image_view: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] rtabmap: additional_cmake_args: -DBUILD_TESTING=OFF + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] +sdformat_vendor: + add_host: ["sdformat14"] + add_run: ["sdformat14"] +slam_toolbox: + add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "blas-devel"] +swri_console: + add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] + add_host: ["libboost-devel", "qt-main", "${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + add_run: ["libboost", "qt-main"] +# TODO unvendor?! +uncrustify_vendor: + add_build: ["vcstool", "setuptools <81"] + add_host: ["setuptools <81"] + # See https://github.com/ament/uncrustify_vendor/blob/jazzy/CMakeLists.txt#L19 + add_run: ["uncrustify >=0.78"] +ur_moveit_config: + add_host: ["ros2-rclpy"] + add_run: ["ros2-rclpy"] urdfdom: generate_dummy_package_with_run_deps: dep_name: urdfdom @@ -126,6 +296,12 @@ urdfdom_headers: dep_name: urdfdom_headers max_pin: 'x.x' override_version: '3.0' +vision_msgs_rviz_plugins: + add_build: ["${{ 'qt-main' if (build_platform != target_platform) }}"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +warehouse_ros_sqlite: + add_host: ["ros2-sqlite3-vendor"] + add_run: ["ros2-sqlite3-vendor"] # Remove build_number fields below on new full rebuild zenoh_cpp_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK -DUSE_SYSTEM_ZENOH=ON" @@ -141,6 +317,11 @@ grid_map_rviz_plugin: build_number: 28 gz_ogre_next_vendor: build_number: 28 + # wraps conda-forge's ogre-next (no OGRE-Next build): no shaderc, as in lyrical + add_host: ["ogre-next"] + add_run: ["ogre-next"] + remove_host: ["shaderc"] + remove_run: ["shaderc"] moveit_ros_visualization: build_number: 28 moveit_task_constructor_visualization: @@ -151,6 +332,7 @@ octomap_rviz_plugins: build_number: 28 plotjuggler: build_number: 30 + add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "git-lfs"] rtabmap_slam: # its recipe test stops the node for sure (package tests hung on macOS) build_number: 28 rviz_2d_overlay_plugins: @@ -164,12 +346,16 @@ rviz_imu_plugin: rviz_ogre_vendor: additional_cmake_args: "-DRVIZ_OGRE_VENDOR_MANGLE_NAME_OF_LIBRARIES_USED_BY_RVIZ=ON" build_number: 29 # built without the EXR codec (ros2-rviz-ogre-vendor.patch), absolute install names on macOS (.osx.patch) + add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}", "setuptools <81"] + add_build: ["vcstool", "setuptools <81"] + add_run: ["assimp"] rviz_rendering: build_number: 28 rviz_satellite: build_number: 28 spatio_temporal_voxel_layer: build_number: 28 + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "openvdb"] urdf: # drop deprecated urdf_world/types.h include (ros2/urdf#54) for headers 3.x build_number: 28 urdf_parser_plugin: # use urdf_model/types.h (ros2/urdf#54) for headers 3.x diff --git a/distros/jazzy/robostack.yaml b/distros/jazzy/robostack.yaml index 76ff56655..4bdbd7e2f 100644 --- a/distros/jazzy/robostack.yaml +++ b/distros/jazzy/robostack.yaml @@ -1,6 +1,6 @@ # Qt5 for the Qt5 rosdep keys: this distribution's rviz and GUI packages still build # against Qt5 (the shared mapping, for lyrical and newer, is Qt6). Packages already -# ported to Qt6/PyQt6 swap qt-main in patch/dependencies.yaml. +# ported to Qt6/PyQt6 swap qt-main in pkg_additional_info.yaml. libqt5-core: robostack: linux: [qt-main, libopengl-devel, libgl-devel] diff --git a/distros/lyrical/patch/dependencies.yaml b/distros/lyrical/patch/dependencies.yaml deleted file mode 100644 index a785c404f..000000000 --- a/distros/lyrical/patch/dependencies.yaml +++ /dev/null @@ -1,208 +0,0 @@ -ament_cmake_ros: - # Break the test-only runtime cycle so a new mutex migration can bootstrap. - remove_run: ["ros2-rmw-test-fixture-implementation"] -autoware_behavior_velocity_planner: - add_host: ["cpp-expected"] -autoware_behavior_velocity_planner_common: - add_host: ["cpp-expected"] -autoware_behavior_velocity_stop_line_module: - add_host: ["cpp-expected"] -autoware_trajectory: - add_host: ["fmt", "cpp-expected"] -autoware_utils_debug: - add_host: ["fmt"] -autoware_utils_pcl: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -backward_ros: - add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] -cartographer_ros: - add_host: ["cartographer 2.*", "libboost-devel", "ceres-solver"] -console_bridge_vendor: - add_host: ["console_bridge"] - add_run: ["console_bridge"] -depth_image_proc: - add_host: ["eigen-abi-devel"] -eigenpy: - add_host: ["eigen-abi-devel"] -foxglove_bridge: - add_host: ["ros2-ament-cmake"] -geometric_shapes: - add_host: ["libboost-devel", "octomap"] -grid_map_rviz_plugin: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] -gz_cmake_vendor: - # https://github.com/gazebo-release/gz_cmake_vendor/blob/lyrical/CMakeLists.txt#L6 for select the right major version - # (this is true for all gz-* vendor packages) or https://github.com/gazebo-tooling/gazebodistro/blob/master/collection-harmonic.yaml - # See https://gazebosim.org/docs/latest/ros_installation/#summary-of-compatible-ros-and-gazebo-combinations for mapping between ROS2 and Gazebo distros - # Every gz-*/sdformat vendor pins the majors of Jetty, so that no solve mixes releases: unpinned, an - # osx-arm64 py312 solve took gz-transport 14 (Ionic), whose builds go with a newer libabseil than Jetty's. - add_host: ["gz-cmake 5.*"] - add_run: ["gz-cmake 5.*"] -gz_common_vendor: - add_host: ["gz-common 7.*"] - add_run: ["gz-common 7.*"] -gz_dartsim_vendor: - add_host: ["dartsim-cpp", "eigen-abi-devel"] - add_run: ["dartsim-cpp"] -gz_fuel_tools_vendor: - add_host: ["gz-fuel-tools 11.*"] - add_run: ["gz-fuel-tools 11.*"] -gz_gui_vendor: - add_host: ["gz-gui 10.*"] - add_run: ["gz-gui 10.*"] -gz_launch_vendor: - add_host: ["gz-launch 9.*"] - add_run: ["gz-launch 9.*"] -gz_math_vendor: - add_host: ["gz-math 9.*"] - add_run: ["gz-math 9.*"] -gz_msgs_vendor: - add_host: ["gz-msgs 12.*"] - add_run: ["gz-msgs 12.*"] -gz_ogre_next_vendor: - add_host: ["ogre-next"] - add_run: ["ogre-next"] - remove_host: ["shaderc"] - remove_run: ["shaderc"] -gz_physics_vendor: - add_host: ["gz-physics 9.*"] - add_run: ["gz-physics 9.*"] -gz_plugin_vendor: - add_host: ["gz-plugin 4.*"] - add_run: ["gz-plugin 4.*"] -gz_rendering_vendor: - add_host: ["gz-rendering 10.*", "swig"] - add_run: ["gz-rendering 10.*", "swig"] -gz_ros2_control: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] -gz_ros2_control_demos: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -gz_sensors_vendor: - add_host: ["gz-sensors 10.*"] - add_run: ["gz-sensors 10.*"] -gz_sim_vendor: - add_host: ["libgz-sim 10.*"] - add_run: ["libgz-sim 10.*"] -gz_tools_vendor: - add_host: ["gz-tools 2.*"] - add_run: ["gz-tools 2.*"] -gz_transport_vendor: - add_host: ["libgz-transport 15.*"] - add_run: ["libgz-transport 15.*"] -gz_utils_vendor: - add_host: ["gz-utils 4.*"] - add_run: ["gz-utils 4.*"] -image_view: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 - add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] -intra_process_demo: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 - add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] -mimick_vendor: - add_build: ["vcstool"] -moveit_core: - add_host: ["eigen-abi-devel"] -moveit_visual_tools: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -nav2_constrained_smoother: - add_host: ["${{ 'openblas' if win }}", "ceres-solver"] -opennav_coverage: - # package.xml misses deps that CMakeLists.txt finds - add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] - add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] -openvdb_vendor: - add_host: ["openvdb"] -pcl_conversions: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel", "eigen-abi-devel"] -pinocchio: - add_host: ["eigen-abi-devel"] -plotjuggler: - # PlotJuggler 3.17 is Qt5-only (find_package(Qt5 ...)); the Qt rosdep keys map to Qt6 here - remove_host: ["qt6-main"] - remove_run: ["qt6-main"] - # python: embeds the interpreter (links libpython) without declaring it - add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "qt-main", "python"] - add_run: ["qt-main"] -plotjuggler_ros: - # Qt5-only like plotjuggler, which it links - remove_host: ["qt6-main"] - remove_run: ["qt6-main"] - add_host: ["qt-main"] - add_run: ["qt-main"] -py_trees: - add_host: ["hatchling"] -py_trees_js: - add_host: ["hatchling"] -py_trees_ros: - add_host: ["poetry-core"] -py_trees_ros_tutorials: - # the mock GUI is ported to PyQt6 (patch/ros2-py-trees-ros-tutorials.patch) - add_run: ["pyqt6"] -py_trees_ros_viewer: - add_host: ["poetry-core"] -pybind11_json_vendor: - add_host: ["pybind11_json"] - add_run: ["pybind11_json"] -python_qt_binding: - add_host: ["pyqt-builder", "qt6-main", "pyqt6"] - add_run: ["pyqt-builder", "qt6-main", "pyqt6"] -qt_gui_cpp: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "qt6-main", "pyqt6"] - add_run: ["pyqt-builder", "qt6-main", "pyqt6"] -rclpy: - add_host: ["typing_extensions"] - add_run: ["typing_extensions"] -rmf_building_map_tools: - add_host: ["ros2-rmf-site-map-msgs"] - add_run: ["gz-fuel-tools 11.*"] - remove_run: ["ros2-gz-fuel-tools-vendor"] -rmf_fleet_adapter: - add_host: ["eigen-abi-devel"] - remove_host: ["eigen"] -rmf_task_sequence: - # The vendor package's ament config does not load the imported validator - # target. Make the conda-forge CMake package directly available. - add_host: ["json_schema_validator"] - add_run: ["json_schema_validator"] -rmf_traffic: - add_host: ["octomap"] - add_run: ["octomap"] -rmf_visualization_schedule: - add_host: ["asio"] -ros_gz_sim: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] -rqt_gui_cpp: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rtabmap: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "libboost-devel", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] -rviz_ogre_vendor: - add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}"] - add_build: ["vcstool"] - add_run: ["assimp"] -sdformat_urdf: - add_host: ["sdformat 16.*"] - add_run: ["sdformat 16.*"] -sdformat_vendor: - add_host: ["sdformat 16.*"] - add_run: ["sdformat 16.*"] -slam_toolbox: - add_build: ["${{ 'qt6-main' if (build_platform != target_platform) }}"] - add_host: ["blas-devel", "ceres-solver"] -spatio_temporal_voxel_layer: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "openvdb"] -spdlog_vendor: - add_host: ["spdlog"] - add_run: ["spdlog"] -tf2_eigen_kdl: - add_host: ["eigen-abi-devel"] -uncrustify_vendor: - add_host: ["uncrustify"] - add_run: ["uncrustify"] -ur_moveit_config: - add_host: ["ros2-rclpy"] - add_run: ["ros2-rclpy"] -vision_msgs_rviz_plugins: - add_build: ["${{ 'qt6-main' if (build_platform != target_platform) }}"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] diff --git a/distros/lyrical/pkg_additional_info.yaml b/distros/lyrical/pkg_additional_info.yaml index a3e043f37..da2d057d8 100644 --- a/distros/lyrical/pkg_additional_info.yaml +++ b/distros/lyrical/pkg_additional_info.yaml @@ -1,9 +1,37 @@ +ament_cmake_ros: + # Break the test-only runtime cycle so a new mutex migration can bootstrap. + remove_run: ["ros2-rmw-test-fixture-implementation"] +autoware_behavior_velocity_planner: + add_host: ["cpp-expected"] +autoware_behavior_velocity_planner_common: + add_host: ["cpp-expected"] +autoware_behavior_velocity_stop_line_module: + add_host: ["cpp-expected"] +autoware_trajectory: + add_host: ["fmt", "cpp-expected"] +autoware_utils_debug: + add_host: ["fmt"] +autoware_utils_pcl: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +backward_ros: + add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] cartographer_ros: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON -DCMAKE_CXX_FLAGS=-DBOOST_ZLIB_BINARY=kernel32" + add_host: ["cartographer 2.*", "libboost-devel", "ceres-solver"] +console_bridge_vendor: + add_host: ["console_bridge"] + add_run: ["console_bridge"] +depth_image_proc: + add_host: ["eigen-abi-devel"] eigenpy: generate_dummy_package_with_run_deps: dep_name: eigenpy max_pin: 'x.x.x' + add_host: ["eigen-abi-devel"] +foxglove_bridge: + add_host: ["ros2-ament-cmake"] +geometric_shapes: + add_host: ["libboost-devel", "octomap"] gtsam: generate_dummy_package_with_run_deps: dep_name: gtsam @@ -11,6 +39,56 @@ gtsam: # the version on ros is actually an alpha, not a properly released version, # see https://discourse.ros.org/t/on-new-gtsam-version-without-boost/44307 override_version: '4.2.0' +gz_cmake_vendor: + # https://github.com/gazebo-release/gz_cmake_vendor/blob/lyrical/CMakeLists.txt#L6 for select the right major version + # (this is true for all gz-* vendor packages) or https://github.com/gazebo-tooling/gazebodistro/blob/master/collection-harmonic.yaml + # See https://gazebosim.org/docs/latest/ros_installation/#summary-of-compatible-ros-and-gazebo-combinations for mapping between ROS2 and Gazebo distros + # Every gz-*/sdformat vendor pins the majors of Jetty, so that no solve mixes releases: unpinned, an + # osx-arm64 py312 solve took gz-transport 14 (Ionic), whose builds go with a newer libabseil than Jetty's. + add_host: ["gz-cmake 5.*"] + add_run: ["gz-cmake 5.*"] +gz_common_vendor: + add_host: ["gz-common 7.*"] + add_run: ["gz-common 7.*"] +gz_dartsim_vendor: + add_host: ["dartsim-cpp", "eigen-abi-devel"] + add_run: ["dartsim-cpp"] +gz_fuel_tools_vendor: + add_host: ["gz-fuel-tools 11.*"] + add_run: ["gz-fuel-tools 11.*"] +gz_launch_vendor: + add_host: ["gz-launch 9.*"] + add_run: ["gz-launch 9.*"] +gz_math_vendor: + add_host: ["gz-math 9.*"] + add_run: ["gz-math 9.*"] +gz_msgs_vendor: + add_host: ["gz-msgs 12.*"] + add_run: ["gz-msgs 12.*"] +gz_ogre_next_vendor: + add_host: ["ogre-next"] + add_run: ["ogre-next"] + remove_host: ["shaderc"] + remove_run: ["shaderc"] +gz_physics_vendor: + add_host: ["gz-physics 9.*"] + add_run: ["gz-physics 9.*"] +gz_plugin_vendor: + add_host: ["gz-plugin 4.*"] + add_run: ["gz-plugin 4.*"] +gz_rendering_vendor: + add_host: ["gz-rendering 10.*", "swig"] + add_run: ["gz-rendering 10.*", "swig"] +gz_ros2_control: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] +gz_ros2_control_demos: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +gz_tools_vendor: + add_host: ["gz-tools 2.*"] + add_run: ["gz-tools 2.*"] +gz_utils_vendor: + add_host: ["gz-utils 4.*"] + add_run: ["gz-utils 4.*"] iceoryx_binding_c: generate_dummy_package_with_run_deps: dep_name: libiceoryx-binding-c @@ -29,6 +107,14 @@ iceoryx_posh: max_pin: 'x.x.x' # the version on ROS (2.0.6) is outdated w.r.t. the conda-forge one override_version: '2.95.8' +image_view: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 + add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] +intra_process_demo: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 + add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] libcamera: generate_dummy_package_with_run_deps: dep_name: libcamera @@ -46,15 +132,79 @@ magic_enum: generate_dummy_package_with_run_deps: dep_name: magic_enum max_pin: 'x.x' +mimick_vendor: + add_build: ["vcstool"] +moveit_core: + add_host: ["eigen-abi-devel"] +moveit_visual_tools: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +nav2_constrained_smoother: + add_host: ["${{ 'openblas' if win }}", "ceres-solver"] ompl: generate_dummy_package_with_run_deps: dep_name: ompl max_pin: 'x.x' +opennav_coverage: + # package.xml misses deps that CMakeLists.txt finds + add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] + add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] +openvdb_vendor: + add_host: ["openvdb"] +pcl_conversions: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel", "eigen-abi-devel"] +pinocchio: + add_host: ["eigen-abi-devel"] +plotjuggler_ros: + # Qt5-only like plotjuggler, which it links + remove_host: ["qt6-main"] + remove_run: ["qt6-main"] + add_host: ["qt-main"] + add_run: ["qt-main"] proxsuite: generate_dummy_package_with_run_deps: dep_name: proxsuite max_pin: 'x.x' override_version: '0.7.3' +py_trees: + add_host: ["hatchling"] +py_trees_js: + add_host: ["hatchling"] +py_trees_ros: + add_host: ["poetry-core"] +py_trees_ros_tutorials: + # the mock GUI is ported to PyQt6 (patch/ros2-py-trees-ros-tutorials.patch) + add_run: ["pyqt6"] +py_trees_ros_viewer: + add_host: ["poetry-core"] +pybind11_json_vendor: + add_host: ["pybind11_json"] + add_run: ["pybind11_json"] +python_qt_binding: + add_host: ["pyqt-builder", "qt6-main", "pyqt6"] + add_run: ["pyqt-builder", "qt6-main", "pyqt6"] +qt_gui_cpp: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "qt6-main", "pyqt6"] + add_run: ["pyqt-builder", "qt6-main", "pyqt6"] +rclpy: + add_host: ["typing_extensions"] + add_run: ["typing_extensions"] +rmf_building_map_tools: + add_host: ["ros2-rmf-site-map-msgs"] + add_run: ["gz-fuel-tools 11.*"] + remove_run: ["ros2-gz-fuel-tools-vendor"] +rmf_fleet_adapter: + add_host: ["eigen-abi-devel"] + remove_host: ["eigen"] +rmf_task_sequence: + # The vendor package's ament config does not load the imported validator + # target. Make the conda-forge CMake package directly available. + add_host: ["json_schema_validator"] + add_run: ["json_schema_validator"] +rmf_traffic: + add_host: ["octomap"] + add_run: ["octomap"] +rmf_visualization_schedule: + add_host: ["asio"] roboplan: generate_dummy_package_with_run_deps: dep_name: roboplan-python @@ -91,13 +241,38 @@ roboplan_toppra: generate_dummy_package_with_run_deps: dep_name: roboplan-toppra-python max_pin: 'x.x' +ros_gz_sim: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] +rqt_gui_cpp: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] rtabmap: # its tests (corelib/test) don't build with MSVC (as in jazzy, same 0.23.13) additional_cmake_args: -DBUILD_TESTING=OFF + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "libboost-devel", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] +sdformat_urdf: + add_host: ["sdformat 16.*"] + add_run: ["sdformat 16.*"] +sdformat_vendor: + add_host: ["sdformat 16.*"] + add_run: ["sdformat 16.*"] +slam_toolbox: + add_build: ["${{ 'qt6-main' if (build_platform != target_platform) }}"] + add_host: ["blas-devel", "ceres-solver"] +spdlog_vendor: + add_host: ["spdlog"] + add_run: ["spdlog"] +tf2_eigen_kdl: + add_host: ["eigen-abi-devel"] toppra: generate_dummy_package_with_run_deps: dep_name: toppra-python max_pin: 'x.x.x' +uncrustify_vendor: + add_host: ["uncrustify"] + add_run: ["uncrustify"] +ur_moveit_config: + add_host: ["ros2-rclpy"] + add_run: ["ros2-rclpy"] urdfdom: generate_dummy_package_with_run_deps: dep_name: urdfdom @@ -110,6 +285,9 @@ urdfdom_headers: max_pin: 'x.x' # the version on ros is outdated w.r.t. to the conda-forge one override_version: '3.0.0' +vision_msgs_rviz_plugins: + add_build: ["${{ 'qt6-main' if (build_platform != target_platform) }}"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] zenoh_cpp_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK -DUSE_SYSTEM_ZENOH=ON" # Remove build_number fields below on new full rebuild @@ -119,14 +297,23 @@ fuse_viz: build_number: 31 grid_map_rviz_plugin: build_number: 31 + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "qt6-main"] gz_gui_vendor: build_number: 33 + add_host: ["gz-gui 10.*"] + add_run: ["gz-gui 10.*"] gz_sensors_vendor: build_number: 33 + add_host: ["gz-sensors 10.*"] + add_run: ["gz-sensors 10.*"] gz_sim_vendor: build_number: 33 + add_host: ["libgz-sim 10.*"] + add_run: ["libgz-sim 10.*"] gz_transport_vendor: build_number: 33 + add_host: ["libgz-transport 15.*"] + add_run: ["libgz-transport 15.*"] launch: build_number: 34 moveit_ros_visualization: @@ -139,6 +326,12 @@ nav2_rviz_plugins: build_number: 31 plotjuggler: build_number: 34 + # PlotJuggler 3.17 is Qt5-only (find_package(Qt5 ...)); the Qt rosdep keys map to Qt6 here + remove_host: ["qt6-main"] + remove_run: ["qt6-main"] + # python: embeds the interpreter (links libpython) without declaring it + add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "qt-main", "python"] + add_run: ["qt-main"] rtabmap_rviz_plugins: build_number: 31 rtabmap_slam: # its recipe test stops the node for sure (package tests hung on macOS) @@ -154,9 +347,13 @@ rviz_imu_plugin: rviz_ogre_vendor: additional_cmake_args: "-DRVIZ_OGRE_VENDOR_MANGLE_NAME_OF_LIBRARIES_USED_BY_RVIZ=ON" build_number: 32 # built without the EXR codec (ros2-rviz-ogre-vendor.patch), absolute install names on macOS (.osx.patch) + add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}"] + add_build: ["vcstool"] + add_run: ["assimp"] rviz_rendering: build_number: 31 rviz_satellite: build_number: 31 spatio_temporal_voxel_layer: build_number: 31 + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "openvdb"] diff --git a/distros/rolling/patch/dependencies.yaml b/distros/rolling/patch/dependencies.yaml deleted file mode 100644 index 8110c4378..000000000 --- a/distros/rolling/patch/dependencies.yaml +++ /dev/null @@ -1,205 +0,0 @@ -autoware_behavior_velocity_planner: - add_host: ["cpp-expected"] -autoware_behavior_velocity_planner_common: - add_host: ["cpp-expected"] -autoware_behavior_velocity_stop_line_module: - add_host: ["cpp-expected"] -autoware_trajectory: - add_host: ["fmt", "cpp-expected"] -autoware_utils_debug: - add_host: ["fmt"] -autoware_utils_pcl: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -backward_ros: - add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] -cartographer_ros: - # ceres-solver pinned to cpu since RoboStack disables CUDA. - add_host: ["cartographer 2.*", "libboost-devel", "ceres-solver * cpu*", "ros2-pcl-conversions"] - add_run: ["ros2-pcl-conversions"] -console_bridge_vendor: - add_host: ["console_bridge"] - add_run: ["console_bridge"] -depth_image_proc: - add_host: ["eigen-abi-devel"] -eigenpy: - add_host: ["eigen-abi-devel"] -foxglove_bridge: - add_host: ["ros2-ament-cmake"] -geometric_shapes: - add_host: ["libboost-devel", "octomap"] -grid_map_octomap: - add_host: ["octomap"] - add_run: ["octomap"] -gz_cmake_vendor: - # Every gz-*/sdformat vendor pins the majors of one Gazebo release, so that no solve mixes releases - # (unpinned, a solve can fall back to an older release whose builds go with other abseil/protobuf). - # rolling's vendors already target the next Gazebo (prereleases, e.g. gz-sim 11), which conda-forge - # does not ship yet: build against Jetty, as lyrical does, and move once conda-forge has it. - add_host: ["gz-cmake 5.*"] - add_run: ["gz-cmake 5.*"] -gz_common_vendor: - add_host: ["gz-common 7.*"] - add_run: ["gz-common 7.*"] -gz_dartsim_vendor: - add_host: ["dartsim-cpp", "eigen-abi-devel"] - add_run: ["dartsim-cpp"] -gz_fuel_tools_vendor: - add_host: ["gz-fuel-tools 11.*"] - add_run: ["gz-fuel-tools 11.*"] -gz_gui_vendor: - add_host: ["gz-gui 10.*"] - add_run: ["gz-gui 10.*"] -gz_launch_vendor: - add_host: ["gz-launch 9.*"] - add_run: ["gz-launch 9.*"] -gz_math_vendor: - add_host: ["gz-math 9.*"] - add_run: ["gz-math 9.*"] -gz_msgs_vendor: - add_host: ["gz-msgs 12.*"] - add_run: ["gz-msgs 12.*"] -gz_ogre_next_vendor: - add_host: ["ogre-next"] - add_run: ["ogre-next"] - remove_host: ["shaderc"] - remove_run: ["shaderc"] -gz_physics_vendor: - add_host: ["gz-physics 9.*"] - add_run: ["gz-physics 9.*"] -gz_plugin_vendor: - add_host: ["gz-plugin 4.*"] - add_run: ["gz-plugin 4.*"] -gz_rendering_vendor: - add_host: ["gz-rendering 10.*", "swig"] - add_run: ["gz-rendering 10.*", "swig"] -gz_ros2_control: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] -gz_ros2_control_demos: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -gz_sensors_vendor: - add_host: ["gz-sensors 10.*"] - add_run: ["gz-sensors 10.*"] -gz_sim_vendor: - add_host: ["libgz-sim 10.*"] - add_run: ["libgz-sim 10.*"] -gz_tools_vendor: - add_host: ["gz-tools 2.*"] - add_run: ["gz-tools 2.*"] -gz_transport_vendor: - add_host: ["libgz-transport 15.*"] - add_run: ["libgz-transport 15.*"] -gz_utils_vendor: - add_host: ["gz-utils 4.*"] - add_run: ["gz-utils 4.*"] -image_view: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 - add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] -intra_process_demo: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] - # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 - add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] -libg2o: - add_host: ["${{ 'libglu' if linux }}", "${{ 'freeglut' if not osx }}"] -mimick_vendor: - add_build: ["vcstool"] -moveit_core: - add_host: ["eigen-abi-devel"] -moveit_visual_tools: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] -opennav_coverage: - # package.xml misses deps that CMakeLists.txt finds - add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] - add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] -pcl_conversions: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel", "eigen-abi-devel"] -pinocchio: - add_host: ["eigen-abi-devel"] -plotjuggler: - # PlotJuggler 3.17 is Qt5-only (find_package(Qt5 ...)); the Qt rosdep keys map to Qt6 here - remove_host: ["qt6-main"] - remove_run: ["qt6-main"] - add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "qt-main"] - add_run: ["qt-main"] -plotjuggler_ros: - # Qt5-only like plotjuggler, which it links - remove_host: ["qt6-main"] - remove_run: ["qt6-main"] - add_host: ["qt-main"] - add_run: ["qt-main"] -py_trees: - add_host: ["hatchling"] -py_trees_js: - add_host: ["hatchling"] # 0.7 builds with hatchling (as in humble/jazzy) -py_trees_ros: - add_host: ["poetry-core"] -py_trees_ros_tutorials: - # the mock GUI is ported to PyQt6 (patch/ros2-py-trees-ros-tutorials.patch) - add_run: ["pyqt6"] -py_trees_ros_viewer: - add_host: ["poetry-core"] -python_qt_binding: - # sip <6.16: conda_build_config's variant pin doesn't apply transitively here; 6.16.x regressed ABI targeting for PyQt-based bindings. - add_host: ["pyqt-builder", "qt6-main", "pyqt6", "sip <6.16"] - add_run: ["pyqt-builder", "qt6-main", "pyqt6"] -qt_gui_cpp: - # sip pinned directly for the same reason as python_qt_binding above. - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "qt6-main", "pyqt6", "sip <6.16"] - add_run: ["pyqt-builder", "qt6-main", "pyqt6"] -rclpy: - add_host: ["typing_extensions"] - add_run: ["typing_extensions"] -rmf_fleet_adapter_python: - add_host: ["pybind11_json"] -rmf_visualization_schedule: - # asio isn't declared in package.xml; websocketpp's own headers need it directly (websocketpp/common/asio.hpp). - add_host: ["asio"] - add_run: ["asio"] -rmf_websocket: - # asio isn't declared in package.xml; websocketpp's own headers need it directly (websocketpp/common/asio.hpp). - add_host: ["asio"] - add_run: ["asio"] -roboplan_example_models: - # src/resources.cpp uses dladdr() from dlfcn.h, which is POSIX-only. - # On Windows we need to depend on dlfcn-win32 instead. - add_host: ["${{ 'dlfcn-win32' if win }}"] -roboplan_ros_examples: - add_host: ["ros2-ament-cmake"] -ros_gz_sim: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] -rqt_gui_cpp: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rtabmap: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] -rviz_ogre_vendor: - add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}"] - add_build: ["vcstool"] - add_run: ["assimp"] -sdformat_urdf: - add_host: ["sdformat 16.*"] - add_run: ["sdformat 16.*"] -sdformat_vendor: - add_host: ["sdformat 16.*"] - add_run: ["sdformat 16.*"] -slam_toolbox: - add_build: ["${{ 'qt6-main' if (build_platform != target_platform) }}"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "blas-devel", "ceres-solver * cpu*"] -spdlog_vendor: - add_host: ["spdlog"] - add_run: ["spdlog"] -tf2_eigen_kdl: - add_host: ["eigen-abi-devel"] -uncrustify_vendor: - add_host: ["uncrustify"] - add_run: ["uncrustify"] -ur_moveit_config: - add_host: ["ros2-rclpy"] - add_run: ["ros2-rclpy"] -vision_msgs_rviz_plugins: - add_build: ["${{ 'qt6-main' if (build_platform != target_platform) }}"] - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -yasmin_pcl: - add_host: ["ros2-pcl-conversions"] - add_run: ["ros2-pcl-conversions"] -zstd_point_cloud_transport: - add_host: ["ros2-zstd-cmake-module", "zstd"] diff --git a/distros/rolling/pkg_additional_info.yaml b/distros/rolling/pkg_additional_info.yaml index cd6bec2ec..cf7643e03 100644 --- a/distros/rolling/pkg_additional_info.yaml +++ b/distros/rolling/pkg_additional_info.yaml @@ -1,9 +1,36 @@ +autoware_behavior_velocity_planner: + add_host: ["cpp-expected"] +autoware_behavior_velocity_planner_common: + add_host: ["cpp-expected"] +autoware_behavior_velocity_stop_line_module: + add_host: ["cpp-expected"] +autoware_trajectory: + add_host: ["fmt", "cpp-expected"] +autoware_utils_debug: + add_host: ["fmt"] +autoware_utils_pcl: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +backward_ros: + add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros2-ament-cmake-libraries"] cartographer_ros: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON -DCMAKE_CXX_FLAGS=-DBOOST_ZLIB_BINARY=kernel32" + # ceres-solver pinned to cpu since RoboStack disables CUDA. + add_host: ["cartographer 2.*", "libboost-devel", "ceres-solver * cpu*", "ros2-pcl-conversions"] + add_run: ["ros2-pcl-conversions"] +console_bridge_vendor: + add_host: ["console_bridge"] + add_run: ["console_bridge"] +depth_image_proc: + add_host: ["eigen-abi-devel"] eigenpy: generate_dummy_package_with_run_deps: dep_name: eigenpy max_pin: 'x.x.x' + add_host: ["eigen-abi-devel"] +foxglove_bridge: + add_host: ["ros2-ament-cmake"] +geometric_shapes: + add_host: ["libboost-devel", "octomap"] gtsam: generate_dummy_package_with_run_deps: dep_name: gtsam @@ -11,6 +38,64 @@ gtsam: # the version on ros is actually an alpha, not a properly released version, # see https://discourse.ros.org/t/on-new-gtsam-version-without-boost/44307 override_version: '4.2.0' +gz_cmake_vendor: + # Every gz-*/sdformat vendor pins the majors of one Gazebo release, so that no solve mixes releases + # (unpinned, a solve can fall back to an older release whose builds go with other abseil/protobuf). + # rolling's vendors already target the next Gazebo (prereleases, e.g. gz-sim 11), which conda-forge + # does not ship yet: build against Jetty, as lyrical does, and move once conda-forge has it. + add_host: ["gz-cmake 5.*"] + add_run: ["gz-cmake 5.*"] +gz_common_vendor: + add_host: ["gz-common 7.*"] + add_run: ["gz-common 7.*"] +gz_dartsim_vendor: + add_host: ["dartsim-cpp", "eigen-abi-devel"] + add_run: ["dartsim-cpp"] +gz_fuel_tools_vendor: + add_host: ["gz-fuel-tools 11.*"] + add_run: ["gz-fuel-tools 11.*"] +gz_gui_vendor: + add_host: ["gz-gui 10.*"] + add_run: ["gz-gui 10.*"] +gz_math_vendor: + add_host: ["gz-math 9.*"] + add_run: ["gz-math 9.*"] +gz_msgs_vendor: + add_host: ["gz-msgs 12.*"] + add_run: ["gz-msgs 12.*"] +gz_ogre_next_vendor: + add_host: ["ogre-next"] + add_run: ["ogre-next"] + remove_host: ["shaderc"] + remove_run: ["shaderc"] +gz_physics_vendor: + add_host: ["gz-physics 9.*"] + add_run: ["gz-physics 9.*"] +gz_plugin_vendor: + add_host: ["gz-plugin 4.*"] + add_run: ["gz-plugin 4.*"] +gz_rendering_vendor: + add_host: ["gz-rendering 10.*", "swig"] + add_run: ["gz-rendering 10.*", "swig"] +gz_ros2_control: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] +gz_ros2_control_demos: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +gz_sensors_vendor: + add_host: ["gz-sensors 10.*"] + add_run: ["gz-sensors 10.*"] +gz_sim_vendor: + add_host: ["libgz-sim 10.*"] + add_run: ["libgz-sim 10.*"] +gz_tools_vendor: + add_host: ["gz-tools 2.*"] + add_run: ["gz-tools 2.*"] +gz_transport_vendor: + add_host: ["libgz-transport 15.*"] + add_run: ["libgz-transport 15.*"] +gz_utils_vendor: + add_host: ["gz-utils 4.*"] + add_run: ["gz-utils 4.*"] iceoryx_binding_c: generate_dummy_package_with_run_deps: dep_name: libiceoryx-binding-c @@ -29,6 +114,14 @@ iceoryx_posh: max_pin: 'x.x.x' # the version on ROS (2.0.6) is outdated w.r.t. the conda-forge one override_version: '2.95.8' +image_view: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/image_view/src/stereo_view_node.cpp#L253 + add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] +intra_process_demo: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] + # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/intra_process_demo/include/image_pipeline/image_view_node.hpp#L58 + add_run: ["${{ 'libopencv * *qt6*' if not (ppc64le or aarch64 or osx) }}"] libcamera: generate_dummy_package_with_run_deps: dep_name: libcamera @@ -37,6 +130,7 @@ libcamera: override_version: '0.5.2' libg2o: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["${{ 'libglu' if linux }}", "${{ 'freeglut' if not osx }}"] librealsense2: generate_dummy_package_with_run_deps: dep_name: librealsense @@ -46,17 +140,97 @@ magic_enum: generate_dummy_package_with_run_deps: dep_name: magic_enum max_pin: 'x.x' +mimick_vendor: + add_build: ["vcstool"] +moveit_core: + add_host: ["eigen-abi-devel"] +moveit_visual_tools: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] ompl: generate_dummy_package_with_run_deps: dep_name: ompl max_pin: 'x.x' +opennav_coverage: + # package.xml misses deps that CMakeLists.txt finds + add_host: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] + add_run: [ros2-rclcpp-components, ros2-std-msgs, ros2-visualization-msgs] +pcl_conversions: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel", "eigen-abi-devel"] +pinocchio: + add_host: ["eigen-abi-devel"] +plotjuggler_ros: + # Qt5-only like plotjuggler, which it links + remove_host: ["qt6-main"] + remove_run: ["qt6-main"] + add_host: ["qt-main"] + add_run: ["qt-main"] proxsuite: generate_dummy_package_with_run_deps: dep_name: proxsuite max_pin: 'x.x' override_version: '0.7.3' +py_trees: + add_host: ["hatchling"] +py_trees_js: + add_host: ["hatchling"] # 0.7 builds with hatchling (as in humble/jazzy) +py_trees_ros: + add_host: ["poetry-core"] +py_trees_ros_tutorials: + # the mock GUI is ported to PyQt6 (patch/ros2-py-trees-ros-tutorials.patch) + add_run: ["pyqt6"] +py_trees_ros_viewer: + add_host: ["poetry-core"] +python_qt_binding: + # sip <6.16: conda_build_config's variant pin doesn't apply transitively here; 6.16.x regressed ABI targeting for PyQt-based bindings. + add_host: ["pyqt-builder", "qt6-main", "pyqt6", "sip <6.16"] + add_run: ["pyqt-builder", "qt6-main", "pyqt6"] +qt_gui_cpp: + # sip pinned directly for the same reason as python_qt_binding above. + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "pyqt-builder", "qt6-main", "pyqt6", "sip <6.16"] + add_run: ["pyqt-builder", "qt6-main", "pyqt6"] +rclpy: + add_host: ["typing_extensions"] + add_run: ["typing_extensions"] +rmf_fleet_adapter_python: + add_host: ["pybind11_json"] +rmf_visualization_schedule: + # asio isn't declared in package.xml; websocketpp's own headers need it directly (websocketpp/common/asio.hpp). + add_host: ["asio"] + add_run: ["asio"] +rmf_websocket: + # asio isn't declared in package.xml; websocketpp's own headers need it directly (websocketpp/common/asio.hpp). + add_host: ["asio"] + add_run: ["asio"] +roboplan_example_models: + # src/resources.cpp uses dladdr() from dlfcn.h, which is POSIX-only. + # On Windows we need to depend on dlfcn-win32 instead. + add_host: ["${{ 'dlfcn-win32' if win }}"] +roboplan_ros_examples: + add_host: ["ros2-ament-cmake"] +ros_gz_sim: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ros2-gz-sensors-vendor"] +rqt_gui_cpp: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] rtabmap: additional_cmake_args: -DBUILD_TESTING=OFF + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "ceres-solver", "${{ 'libdc1394' if not win }}", "libusb", "vtk"] +sdformat_urdf: + add_host: ["sdformat 16.*"] + add_run: ["sdformat 16.*"] +sdformat_vendor: + add_host: ["sdformat 16.*"] + add_run: ["sdformat 16.*"] +spdlog_vendor: + add_host: ["spdlog"] + add_run: ["spdlog"] +tf2_eigen_kdl: + add_host: ["eigen-abi-devel"] +uncrustify_vendor: + add_host: ["uncrustify"] + add_run: ["uncrustify"] +ur_moveit_config: + add_host: ["ros2-rclpy"] + add_run: ["ros2-rclpy"] urdfdom: generate_dummy_package_with_run_deps: dep_name: urdfdom @@ -69,8 +243,16 @@ urdfdom_headers: max_pin: 'x.x' # the version on ros is outdated w.r.t. to the conda-forge one override_version: '3.0.0' +vision_msgs_rviz_plugins: + add_build: ["${{ 'qt6-main' if (build_platform != target_platform) }}"] + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +yasmin_pcl: + add_host: ["ros2-pcl-conversions"] + add_run: ["ros2-pcl-conversions"] zenoh_cpp_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK -DUSE_SYSTEM_ZENOH=ON" +zstd_point_cloud_transport: + add_host: ["ros2-zstd-cmake-module", "zstd"] aruco_ros: # its recipe test stops the node for sure (package tests hung on macOS) build_number: 33 fuse_viz: @@ -87,6 +269,11 @@ orbbec_camera: build_number: 35 plotjuggler: build_number: 35 + # PlotJuggler 3.17 is Qt5-only (find_package(Qt5 ...)); the Qt rosdep keys map to Qt6 here + remove_host: ["qt6-main"] + remove_run: ["qt6-main"] + add_host: ["libxcb", "${{ 'elfutils' if linux }}", "ros2-ros-workspace", "qt-main"] + add_run: ["qt-main"] rviz_2d_overlay_plugins: build_number: 33 rviz_common: @@ -98,6 +285,9 @@ rviz_imu_plugin: rviz_ogre_vendor: additional_cmake_args: "-DRVIZ_OGRE_VENDOR_MANGLE_NAME_OF_LIBRARIES_USED_BY_RVIZ=ON" build_number: 34 # built without the EXR codec (ros2-rviz-ogre-vendor.patch), absolute install names on macOS (.osx.patch) + add_host: ["zlib", "freeimage", "freetype", "assimp", "zziplib", "pugixml", "${{ 'libglu' if linux }}"] + add_build: ["vcstool"] + add_run: ["assimp"] rviz_rendering: build_number: 33 rviz_satellite: diff --git a/pixi.lock b/pixi.lock index 5c63fd110..9a55a3178 100644 --- a/pixi.lock +++ b/pixi.lock @@ -91,7 +91,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-64/vinca-rs-0.1.7-h41f06ac_0.conda + - conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-64/vinca-rs-0.1.9-h41f06ac_0.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5#74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5 - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl @@ -172,7 +172,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-aarch64/vinca-rs-0.1.7-h11eb1b2_0.conda + - conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-aarch64/vinca-rs-0.1.9-h11eb1b2_0.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5#74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5 - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl @@ -246,7 +246,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-had63097_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda - - conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-64/vinca-rs-0.1.7-h4778241_0.conda + - conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-64/vinca-rs-0.1.9-h4778241_0.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5#74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5 - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl @@ -320,7 +320,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h74c22ad_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda - - conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-arm64/vinca-rs-0.1.7-hea27dcd_0.conda + - conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-arm64/vinca-rs-0.1.9-hea27dcd_0.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5#74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5 - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl @@ -394,7 +394,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - - conda: https://prefix.dev/tobias-fischer/robostack-tools/win-64/vinca-rs-0.1.7-he01afda_0.conda + - conda: https://prefix.dev/tobias-fischer/robostack-tools/win-64/vinca-rs-0.1.9-he01afda_0.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5#74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5 - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl @@ -3295,9 +3295,10 @@ packages: - zstd >=1.5.7,<1.6.0a0 size: 387535 timestamp: 1786599623274 -- conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-64/vinca-rs-0.1.7-h41f06ac_0.conda - sha256: 34557b8ae5d8499c3899aaa82a097cb746c93b6972bef0051a0288722558abb6 - md5: fb59bd254abd74c7934fe611d5a008bc +- conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-64/vinca-rs-0.1.9-h41f06ac_0.conda + sha256: 19d9832495a2bef21820132f3a8aaf3e5ef68a9aaef0b38edcd4bdfc46176da8 + md5: 323f2de098c24a83a09baca8eb3adeac + attestations_sha256: 450817a1d3eb183a551aa70b89008244320bdd580d52a1b9ca8694974ba3d887 depends: - libgcc >=16 - __glibc >=2.17,<3.0.a0 @@ -3305,52 +3306,56 @@ packages: - __glibc >=2.17 license: MIT run_exports: {} - size: 9566970 - timestamp: 1794572477863 -- conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-aarch64/vinca-rs-0.1.7-h11eb1b2_0.conda - sha256: 6f1cd765bec384faa2cd2913d0d18dfb8cd52f92b770ae42ed69603df7b5d5ec - md5: 94e95c59cbfccc706d25eb6e64108ba6 + size: 9564555 + timestamp: 1794619425977 +- conda: https://prefix.dev/tobias-fischer/robostack-tools/linux-aarch64/vinca-rs-0.1.9-h11eb1b2_0.conda + sha256: f2ea9992868b99956a8fb33737b45b8958d706ca2701cbda297a8bd913c861c0 + md5: 42d450edfe7026af5cbc54ab4e26212c + attestations_sha256: 31940b95aa44928ccb68b7429beb141b3b92d66b973edf7fef368e08090f912b depends: - libgcc >=16 constrains: - __glibc >=2.17 license: MIT run_exports: {} - size: 9570130 - timestamp: 1794572465783 -- conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-64/vinca-rs-0.1.7-h4778241_0.conda - sha256: 9564f3cc2c748d89712162aded4ec55dfdabbed9332ef258770c22a249efa86b - md5: e6e39f7159190606b759d575216f8dba + size: 9578164 + timestamp: 1794619428648 +- conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-64/vinca-rs-0.1.9-h4778241_0.conda + sha256: cbf85f92e32af401e635666d8814a4ef0bf6fc12f188dca8024b60156a90c558 + md5: 83057fec6b62c61405d9a92326f0ea29 + attestations_sha256: b38b00c71097ddc09cfc31ee2a4a419c2968b2cec8857635d0b6301011b327c6 depends: - __osx >=13.0 constrains: - __osx >=11.0 license: MIT run_exports: {} - size: 9325029 - timestamp: 1794572496401 -- conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-arm64/vinca-rs-0.1.7-hea27dcd_0.conda - sha256: 887aeee2f4655a588e6543497c2b815aaecf0a9ad73a0ce9384209f436b0a08b - md5: 17256a49286ca64d5c35a60e652f94ae + size: 9330793 + timestamp: 1794621035577 +- conda: https://prefix.dev/tobias-fischer/robostack-tools/osx-arm64/vinca-rs-0.1.9-hea27dcd_0.conda + sha256: 441296f2b8ff0bb1c69ea172c0ebbf2471a7ca9a089dd595ad16ac8817aa72cd + md5: 7b54c80e2e834ad9c6204b803171c054 + attestations_sha256: 3f923d76ac056f58d0ddea0f4ad98ced215115c846f040d6eba98abe18769e84 depends: - __osx >=13.0 constrains: - __osx >=11.0 license: MIT run_exports: {} - size: 8745559 - timestamp: 1794572471712 -- conda: https://prefix.dev/tobias-fischer/robostack-tools/win-64/vinca-rs-0.1.7-he01afda_0.conda - sha256: 1a6ec7dd71f613ac273369443e2421239468ef033eeac262baa1776efd17dda1 - md5: b5971936b148667e4317a01dd8347348 + size: 8752370 + timestamp: 1794619427756 +- conda: https://prefix.dev/tobias-fischer/robostack-tools/win-64/vinca-rs-0.1.9-he01afda_0.conda + sha256: 83634ed3ec68913e181dfa6880c7aebfb64d0e2f224e67becd0f64c9d3767196 + md5: 4d13b37b3a3c7bae66f8723609828d0e + attestations_sha256: 06afdd5b435305d6dc0f686572eeecfc0b9a41063a5dd75c5e487b147776e1a1 depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 license: MIT run_exports: {} - size: 8934936 - timestamp: 1794572471934 + size: 8943911 + timestamp: 1794619458288 - pypi: git+https://github.com/RoboStack/vinca.git?rev=74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5#74d1e856d5b00c0cb5ee0c1be41dac4afcae7bf5 name: vinca version: 0.2.0 diff --git a/pixi.toml b/pixi.toml index 7accaeb16..109645117 100644 --- a/pixi.toml +++ b/pixi.toml @@ -28,7 +28,7 @@ pytest = ">=9.1.1,<10" # gh for the workflows: one version everywhere (the runner's is not on PATH on Windows) gh = ">=2.102.0,<3" # built and published by vinca-rs's release workflow -vinca-rs = { version = "==0.1.7", channel = "https://prefix.dev/tobias-fischer/robostack-tools" } +vinca-rs = { version = "==0.1.9", channel = "https://prefix.dev/tobias-fischer/robostack-tools" } [target.win-64.dependencies] # patch is required by rattler-build @@ -44,7 +44,7 @@ vinca = { git = "https://github.com/RoboStack/vinca.git", rev = "74d1e856d5b00c0 [tasks] rs = { cmd = "python tools/robostack.py", description = "Run a task for one distribution: `pixi run rs ` (generate-recipes, build, build-one, check-patches, check-deps, create-snapshot, render-pinning, sort, ...)." } -sort = { cmd = "sh -lc 'vinca-sort-vinca-lists $@ shared/vinca.yaml && vinca-sort-yaml-keys $@ shared/robostack.yaml shared/pkg_additional_info.yaml shared/patch/dependencies.yaml && for d in distros/*/; do [ -f $d/vinca.yaml ] || continue; (cd $d && vinca-sort-vinca-lists $@ vinca.yaml && vinca-sort-yaml-keys $@ pkg_additional_info.yaml rosdistro_additional_recipes.yaml $(ls patch/dependencies.yaml 2>/dev/null)) || exit 1; done' --", description = "Sort the YAML files of all distributions (`--check` to only check)." } +sort = { cmd = "sh -lc 'vinca-sort-vinca-lists $@ shared/vinca.yaml && vinca-sort-yaml-keys $@ shared/robostack.yaml shared/pkg_additional_info.yaml && for d in distros/*/; do [ -f $d/vinca.yaml ] || continue; (cd $d && vinca-sort-vinca-lists $@ vinca.yaml && vinca-sort-yaml-keys $@ pkg_additional_info.yaml rosdistro_additional_recipes.yaml) || exit 1; done' --", description = "Sort the YAML files of all distributions (`--check` to only check)." } test = { cmd = "python -m pytest tools/tests", description = "Unit tests of the repository tooling (tools/tests)." } abi-check = { cmd = "pixi exec -s python=3.14 -s zstandard -s pyyaml -s pyelftools python tools/abi_check.py", description = "Compare the ABI of package builds with libabigail (Linux only): `pixi run abi-check --distro jazzy --latest-pairs 30`, `--old a.conda --new b.conda`, or `--pr-builds ` (a pull request's builds against the released ones)." } render-pinning = { cmd = "sh -lc 'for d in distros/*/; do [ -f $d/vinca.yaml ] || continue; python tools/robostack.py $(basename $d) render-pinning || exit 1; done'", description = "Regenerate every distribution's conda_build_config.yaml from shared/pinning and its distro.yaml." } diff --git a/shared/files/ros2-ros-workspace/activate.bat b/shared/files/ros2-ros-workspace/activate.bat new file mode 100644 index 000000000..0c17d5f5c --- /dev/null +++ b/shared/files/ros2-ros-workspace/activate.bat @@ -0,0 +1,13 @@ +@if not defined CONDA_PREFIX goto:eof + +@REM Don't do anything when we are in conda build. +@if defined SYS_PREFIX exit /b 0 + +@set "QT_PLUGIN_PATH=%CONDA_PREFIX%\Library\plugins" + +@call "%CONDA_PREFIX%\Library\local_setup.bat" +@set PYTHONHOME= +@set "ROS_OS_OVERRIDE=conda:win64" +@set "ROS_ETC_DIR=%CONDA_PREFIX%\Library\etc\ros" +@set "AMENT_PREFIX_PATH=%CONDA_PREFIX%\Library" +@set "AMENT_PYTHON_EXECUTABLE=%CONDA_PREFIX%\python.exe" diff --git a/shared/files/ros2-ros-workspace/activate.ps1 b/shared/files/ros2-ros-workspace/activate.ps1 new file mode 100644 index 000000000..4e225b56a --- /dev/null +++ b/shared/files/ros2-ros-workspace/activate.ps1 @@ -0,0 +1,14 @@ +if ($null -eq ${env:CONDA_PREFIX}) { Exit } + +# Don't do anything when we are in conda build. +if ($null -ne ${env:SYS_PREFIX}) { Exit 0 } + +$Env:QT_PLUGIN_PATH="${env:CONDA_PREFIX}\Library\plugins" + +& "${env:CONDA_PREFIX}\Library\local_setup.ps1" + +$Env:PYTHONHOME='' +$Env:ROS_OS_OVERRIDE='conda:win64' +$Env:ROS_ETC_DIR="${env:CONDA_PREFIX}\Library\etc\ros" +$Env:AMENT_PREFIX_PATH="${env:CONDA_PREFIX}\Library" +$Env:AMENT_PYTHON_EXECUTABLE="${env:CONDA_PREFIX}\python.exe" diff --git a/shared/files/ros2-ros-workspace/activate.sh b/shared/files/ros2-ros-workspace/activate.sh new file mode 100644 index 000000000..8ebb90fe1 --- /dev/null +++ b/shared/files/ros2-ros-workspace/activate.sh @@ -0,0 +1,93 @@ +# if [ -z "${CONDA_PREFIX}" ]; then +# exit 0; +# fi + +case "$OSTYPE" in + msys*|cygwin*) + # Windows: conda runs this script (not activate.bat) when the environment + # is activated from Git Bash / MSYS2 / Cygwin. The ROS packages only ship + # .bat/.dsv environment hooks there (under %CONDA_PREFIX%\Library), so do + # what activate.bat -> local_setup.bat does: let ament's + # _local_setup_util.py evaluate every package's .dsv hooks, in "sh" mode, + # and apply the result. Values stay in Windows form (C:\...;C:\...) since + # native Windows programs (python, cmake, ros2) read them; only PATH is + # converted to the form the shell itself uses. + if [ -n "${SYS_PREFIX:-}" ]; then + # Don't do anything when we are in conda build (as activate.bat). + : + elif ! command -v cygpath > /dev/null 2>&1; then + echo "Not activating ROS: cygpath not found" >&2 + else + # Keep an absolute path: a .dsv assignment may remove cygpath from PATH. + _ros_cygpath="$(command -v cygpath)" + _ros_prefix_w="$(cygpath -w "$CONDA_PREFIX")" + _ros_python="$(cygpath -u "$_ros_prefix_w\\python.exe")" + _ros_util="$(cygpath -u "$_ros_prefix_w\\Library\\_local_setup_util.py")" + + export QT_PLUGIN_PATH="$_ros_prefix_w\\Library\\plugins" + unset PYTHONHOME + + if [ -f "$_ros_util" ]; then + while IFS= read -r _ros_line; do + case "$_ros_line" in + "export "*"#:}") + # strip a leading separator: ';' on Windows, not ':' + _ros_line="${_ros_line%#:\}}#;}" + ;; + "export "*"%:}") + # strip a trailing separator: ';' on Windows, not ':' + _ros_line="${_ros_line%\%:\}}%;}" + ;; + esac + case "$_ros_line" in + "export PATH="*) + # ament emits Windows lists even in sh mode. Evaluate against a + # Windows PATH in a subshell, then convert the complete result. + # This handles prepends, appends and assignments without mixing + # semicolons, drive-letter colons and Bash's ':' separators. + _ros_value="$( + PATH="$("$_ros_cygpath" -w -p "$PATH")" + eval "$_ros_line" + printf '%s' "$PATH" + )" + export PATH="$("$_ros_cygpath" -u -p "$_ros_value")" + ;; + "export "*) + eval "$_ros_line" + ;; + esac + done </patch/dependencies.yaml -# adds its own and wins per package. -ament_package: - add_host: ['importlib_resources'] -behaviortree_cpp: - add_host: ["libboost-devel", "cppzmq", "zeromq", "sqlite"] - add_run: ["libboost"] -camera_calibration: - # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/camera_calibration/src/camera_calibration/camera_calibrator.py#L286 - add_run: ["libopencv * *qt6*"] -cuda_buffer: - # FindCUDAToolkit needs nvcc; CUDA::cuda_driver links against the driver stub. - add_host: ["cuda-driver-dev", "cuda-nvcc"] -cuda_buffer_backend: - add_host: ["cuda-driver-dev", "cuda-nvcc"] -dolly_ignition: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -fmilibrary_vendor: - add_host: ["fmilib"] -foonathan_memory_vendor: - add_host: ["foonathan-memory"] - add_run: ["foonathan-memory"] -force_torque_sensor_broadcaster: - add_host: ["typeguard", "jinja2"] -franka_example_controllers: - add_host: ["ros2-moveit-core"] - add_run: ["ros2-moveit-core"] -franka_hardware: - add_host: ["ros2-rclcpp-action", "ros2-rclcpp-components"] - add_run: ["ros2-rclcpp-action", "ros2-rclcpp-components"] -franka_ign_ros2_control: - add_host: ["ros2-urdf", "ros2-kdl-parser", "ros2-tf2-geometry-msgs", "ros2-tf2-eigen", "${{ 'libgl-devel' if linux }}"] - add_run: ["ros2-urdf", "ros2-kdl-parser", "ros2-tf2-geometry-msgs", "ros2-tf2-eigen"] -franka_robot_state_broadcaster: - add_host: ["ros2-visualization-msgs"] - add_run: ["ros2-visualization-msgs"] -franka_semantic_components: - add_host: ["ros2-urdf", "ros2-controller-interface"] - add_run: ["ros2-urdf", "ros2-controller-interface"] -gazebo_ros: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -google_benchmark_vendor: - add_host: ["benchmark"] - add_run: ["benchmark"] -gscam: - add_host: ["glib"] -ignition_cmake2_vendor: - add_host: ["libignition-cmake2"] - add_run: ["libignition-cmake2"] -ignition_math6_vendor: - add_host: ["libignition-math6"] - add_run: ["libignition-math6"] -image_tools: - # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/image_tools/src/showimage.cpp#L190 - add_run: ["libopencv * *qt6*"] -imu_calib: - add_host: ["ros2-eigen3-cmake-module"] - add_run: ["ros2-eigen3-cmake-module"] -libcurl_vendor: - add_host: ["libcurl"] - add_run: ["libcurl"] -libphidget22: - add_host: ["libusb"] -libyaml_vendor: - add_host: ["yaml-cpp", "yaml"] - add_run: ["yaml-cpp", "yaml"] -livox_ros_driver2: - add_host: ["livox-sdk2"] - add_run: ["livox-sdk2"] -moveit: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -moveit2_tutorials: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -moveit_setup_app_plugins: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -moveit_setup_assistant: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -moveit_setup_controllers: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -moveit_setup_core_plugins: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -moveit_setup_framework: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -moveit_setup_srdf_plugins: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -mrpt_common: - # CMakeLists.txt calls find_package(ament_cmake) when ROS_VERSION=2 (set by ros_environment), - # but package.xml (build_type cmake) does not declare it - add_host: ["ros2-ament-cmake"] -mrpt_gui: - # links libwx_*; the wxwidgets/wx-common keys map to wxpython, so wxwidgets is only a - # transitive host dep and its (weak) run_exports never reach the run requirements - # Windows: nanogui links conda-forge's glad instead of its bundled copy (ros2-mrpt-gui.win.patch) - add_host: ["wxwidgets", "${{ 'glad' if win }}"] -mrpt_imgui: - # Windows: links conda-forge's GLEW like mrpt_opengl, also for its users (ros2-mrpt-imgui.win.patch) - add_host: ["${{ 'glew' if win }}"] - add_run: ["${{ 'glew' if win }}"] -mrpt_math: - # its public headers include Eigen, and its exported CMake targets (and mrpt_poses') carry - # the eigen3 include directory: users need the headers (eigen-abi-devel's run_exports only - # add eigen-abi), or dependents without their own eigen dependency fail to configure - add_run: ["eigen"] -mrpt_opengl: - # Windows: the release source has no bundled GLEW (ros2-mrpt-opengl.win.patch); users of - # opengl_api.h need GL/glew.h too - add_host: ["${{ 'glew' if win }}"] - add_run: ["${{ 'glew' if win }}"] -mujoco_ros2_control_plugins: - add_host: - - if: linux - then: ["libegl-devel"] # CMake finds OpenGL COMPONENTS EGL -mujoco_vendor: - add_host: ["libmujoco"] # conda-forge's MuJoCo (linux, osx, win) instead of the bundled build -nao_lola: - add_host: ["libboost-devel"] -nav2_smac_planner: - add_build: ["${{ 'llvm-openmp' if osx }}"] - add_host: ["${{ 'llvm-openmp' if osx }}", "ompl", "libode"] -octomap_ros: - add_host: ["octomap"] -octomap_rviz_plugins: - add_host: ["octomap"] -ompl: - add_host: ["ompl"] -onnxruntime_vendor: - add_host: [onnxruntime-cpp] - add_run: [onnxruntime-cpp] -open3d_conversions: - # Open3D's own CMake config calls find_dependency(TBB), but conda-forge's - # open3d package only depends on the runtime "tbb" lib, not "tbb-devel" - # (which provides TBBConfig.cmake) -- add it explicitly so find_package(Open3D) - # can resolve its own TBB dependency. - add_host: ["tbb-devel"] -ortools_vendor: - add_host: ["eigen", "libabseil", "libprotobuf", "re2", "zlib"] - add_run: ["eigen", "libabseil", "libprotobuf", "re2", "zlib"] -pcl_ros: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] -plotjuggler_ros: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -popf: - add_host: ["perl"] -pybind11_vendor: - add_host: ["pybind11"] - add_run: ["pybind11"] -rmw_zenoh_cpp: - add_host: ["libzenohc", "libzenohcxx"] -ros_ign_gazebo_demos: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rosx_introspection: - add_host: ["rapidjson"] -rviz2: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -rviz_assimp_vendor: - add_host: ["assimp"] - add_run: ["assimp"] -rviz_rendering: - add_host: ["glew"] -rviz_visual_testing_framework: - add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] -sdl2_vendor: - add_host: ["sdl2"] - add_run: ["sdl2"] -sqlite3_vendor: - add_host: ["sqlite"] - add_run: ["sqlite"] -tvm_vendor: - add_host: ["libblas", "openblas", "libcblas"] -velodyne_pointcloud: - add_host: ["libboost-devel"] -webots_ros2_importer: - # urdf2webots imports PIL, but the package.xml doesn't declare python3-pil - add_run: ["pillow"] -yaml_cpp_vendor: - add_host: ["yaml-cpp"] - add_run: ["yaml-cpp"] -zenoh_cpp_vendor: - add_host: ["libzenohc", "libzenohcxx"] -zstd_vendor: - add_host: ["zstd", "${{ 'zstd-static' if not win }}"] - add_run: ["zstd"] diff --git a/shared/pkg_additional_info.yaml b/shared/pkg_additional_info.yaml index e32b036ff..08a66df08 100644 --- a/shared/pkg_additional_info.yaml +++ b/shared/pkg_additional_info.yaml @@ -1,5 +1,7 @@ # Per-package build settings shared by every distribution; distros//pkg_additional_info.yaml # adds its own and wins per key (e.g. build_number). +ament_package: + add_host: ['importlib_resources'] aruco: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" aruco_ros: @@ -12,8 +14,14 @@ as2_platform_multirotor_simulator: then: '-DCMAKE_CXX_FLAGS="-include cassert"' aws_sdk_cpp_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" +behaviortree_cpp: + add_host: ["libboost-devel", "cppzmq", "zeromq", "sqlite"] + add_run: ["libboost"] behaviortree_cpp_v3: additional_cmake_args: "-DBUILD_UNIT_TESTS=OFF" +camera_calibration: + # Depends on opencv with gui support, see https://github.com/ros-perception/image_pipeline/blob/746268fcfd21b389bc39ae60bb6345a53c838558/camera_calibration/src/camera_calibration/camera_calibrator.py#L286 + add_run: ["libopencv * *qt6*"] cartographer: generate_dummy_package_with_run_deps: dep_name: cartographer @@ -29,6 +37,11 @@ compressed_depth_image_transport: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" console_bridge_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" +cuda_buffer: + # FindCUDAToolkit needs nvcc; CUDA::cuda_driver links against the driver stub. + add_host: ["cuda-driver-dev", "cuda-nvcc"] +cuda_buffer_backend: + add_host: ["cuda-driver-dev", "cuda-nvcc"] cyclonedds: generate_dummy_package_with_run_deps: dep_name: cyclonedds @@ -41,10 +54,33 @@ diagnostic_aggregator: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" diagnostic_updater: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +dolly_ignition: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +fmilibrary_vendor: + add_host: ["fmilib"] +foonathan_memory_vendor: + add_host: ["foonathan-memory"] + add_run: ["foonathan-memory"] force_torque_sensor_broadcaster: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["typeguard", "jinja2"] foxglove_bridge: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +franka_example_controllers: + add_host: ["ros2-moveit-core"] + add_run: ["ros2-moveit-core"] +franka_hardware: + add_host: ["ros2-rclcpp-action", "ros2-rclcpp-components"] + add_run: ["ros2-rclcpp-action", "ros2-rclcpp-components"] +franka_ign_ros2_control: + add_host: ["ros2-urdf", "ros2-kdl-parser", "ros2-tf2-geometry-msgs", "ros2-tf2-eigen", "${{ 'libgl-devel' if linux }}"] + add_run: ["ros2-urdf", "ros2-kdl-parser", "ros2-tf2-geometry-msgs", "ros2-tf2-eigen"] +franka_robot_state_broadcaster: + add_host: ["ros2-visualization-msgs"] + add_run: ["ros2-visualization-msgs"] +franka_semantic_components: + add_host: ["ros2-urdf", "ros2-controller-interface"] + add_run: ["ros2-urdf", "ros2-controller-interface"] fuse_constraints: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" fuse_core: @@ -67,6 +103,13 @@ fuse_variables: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" fuse_viz: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +gazebo_ros: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +google_benchmark_vendor: + add_host: ["benchmark"] + add_run: ["benchmark"] +gscam: + add_host: ["glib"] gz_cmake_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" gz_common_vendor: @@ -101,6 +144,18 @@ gz_transport_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" gz_utils_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" +ignition_cmake2_vendor: + add_host: ["libignition-cmake2"] + add_run: ["libignition-cmake2"] +ignition_math6_vendor: + add_host: ["libignition-math6"] + add_run: ["libignition-math6"] +image_tools: + # Depends on opencv with gui support, see https://github.com/ros2/demos/blob/8f361a1ece2daae54016959f3ea9ab2e7692ddbb/image_tools/src/showimage.cpp#L190 + add_run: ["libopencv * *qt6*"] +imu_calib: + add_host: ["ros2-eigen3-cmake-module"] + add_run: ["ros2-eigen3-cmake-module"] imu_complementary_filter: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" imu_tools: @@ -113,6 +168,8 @@ lanelet2_python: additional_cmake_args: "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DCMAKE_CXX_EXTENSIONS=OFF" libcurl_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" + add_host: ["libcurl"] + add_run: ["libcurl"] libfranka: generate_dummy_package_with_run_deps: dep_name: libfranka @@ -123,6 +180,8 @@ liblz4_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" libnabo: additional_cmake_args: "-DLIBNABO_BUILD_PYTHON=OFF" +libphidget22: + add_host: ["libusb"] libpointmatcher: # Windows installs libpointmatcherConfig.cmake into both /Library/cmake and # share/libpointmatcher/cmake but its export file only into the latter; CMake finds the @@ -130,42 +189,124 @@ libpointmatcher: additional_cmake_args: if: win then: "-DINSTALL_CMAKE_DIR=share/libpointmatcher/cmake" +libyaml_vendor: + add_host: ["yaml-cpp", "yaml"] + add_run: ["yaml-cpp", "yaml"] +livox_ros_driver2: + add_host: ["livox-sdk2"] + add_run: ["livox-sdk2"] +moveit: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +moveit2_tutorials: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] moveit_ros_visualization: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +moveit_setup_app_plugins: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +moveit_setup_assistant: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +moveit_setup_controllers: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +moveit_setup_core_plugins: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +moveit_setup_framework: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +moveit_setup_srdf_plugins: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +mrpt_common: + # CMakeLists.txt calls find_package(ament_cmake) when ROS_VERSION=2 (set by ros_environment), + # but package.xml (build_type cmake) does not declare it + add_host: ["ros2-ament-cmake"] mrpt_gui: # Windows: wxWidgets' and nanogui's GUI code needs GDI, which the ROS build scripts' CL=/DNOGDI=1 hides additional_cmake_args: if: win then: "-DCMAKE_CXX_FLAGS_INIT=/UNOGDI -DCMAKE_C_FLAGS_INIT=/UNOGDI" + # links libwx_*; the wxwidgets/wx-common keys map to wxpython, so wxwidgets is only a + # transitive host dep and its (weak) run_exports never reach the run requirements + # Windows: nanogui links conda-forge's glad instead of its bundled copy (ros2-mrpt-gui.win.patch) + add_host: ["wxwidgets", "${{ 'glad' if win }}"] +mrpt_imgui: + # Windows: links conda-forge's GLEW like mrpt_opengl, also for its users (ros2-mrpt-imgui.win.patch) + add_host: ["${{ 'glew' if win }}"] + add_run: ["${{ 'glew' if win }}"] mrpt_libros_bridge: # exports no symbols on Windows: no import library for its tests additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +mrpt_math: + # its public headers include Eigen, and its exported CMake targets (and mrpt_poses') carry + # the eigen3 include directory: users need the headers (eigen-abi-devel's run_exports only + # add eigen-abi), or dependents without their own eigen dependency fail to configure + add_run: ["eigen"] +mrpt_opengl: + # Windows: the release source has no bundled GLEW (ros2-mrpt-opengl.win.patch); users of + # opengl_api.h need GL/glew.h too + add_host: ["${{ 'glew' if win }}"] + add_run: ["${{ 'glew' if win }}"] +mujoco_ros2_control_plugins: + add_host: + - if: linux + then: ["libegl-devel"] # CMake finds OpenGL COMPONENTS EGL mujoco_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" + add_host: ["libmujoco"] # conda-forge's MuJoCo (linux, osx, win) instead of the bundled build +nao_lola: + add_host: ["libboost-devel"] +nav2_smac_planner: + add_build: ["${{ 'llvm-openmp' if osx }}"] + add_host: ["${{ 'llvm-openmp' if osx }}", "ompl", "libode"] octomap_ros: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["octomap"] +octomap_rviz_plugins: + add_host: ["octomap"] +ompl: + add_host: ["ompl"] onnxruntime_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" + add_host: [onnxruntime-cpp] + add_run: [onnxruntime-cpp] +open3d_conversions: + # Open3D's own CMake config calls find_dependency(TBB), but conda-forge's + # open3d package only depends on the runtime "tbb" lib, not "tbb-devel" + # (which provides TBBConfig.cmake) -- add it explicitly so find_package(Open3D) + # can resolve its own TBB dependency. + add_host: ["tbb-devel"] openvdb_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" orocos_kdl_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" +ortools_vendor: + add_host: ["eigen", "libabseil", "libprotobuf", "re2", "zlib"] + add_run: ["eigen", "libabseil", "libprotobuf", "re2", "zlib"] ouster_ros: additional_cmake_args: "-DOUSTER_USE_VCPKG_IF_AVAILABLE=OFF" pcl_ros: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}", "libboost-devel"] pinocchio: generate_dummy_package_with_run_deps: dep_name: pinocchio max_pin: 'x.x.x' # the version on ros is outdated w.r.t. to the conda-forge one override_version: '4.1.0' +plotjuggler_ros: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +popf: + add_host: ["perl"] pybind11_json_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR" pybind11_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR" + add_host: ["pybind11"] + add_run: ["pybind11"] +rmw_zenoh_cpp: + add_host: ["libzenohc", "libzenohcxx"] robot_state_publisher: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +ros_ign_gazebo_demos: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] rosx_introspection: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" + add_host: ["rapidjson"] rtabmap_conversions: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" # rtabmap_odom/slam/util/viz on Windows: rtabmap::core links some PCL libraries by bare @@ -187,22 +328,38 @@ rtabmap_viz: additional_cmake_args: if: win then: '-DCMAKE_CXX_FLAGS_INIT=/DNOMINMAX -DCMAKE_SHARED_LINKER_FLAGS_INIT=/LIBPATH:%LIBRARY_LIB% -DCMAKE_EXE_LINKER_FLAGS_INIT=/LIBPATH:%LIBRARY_LIB%' +rviz2: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] +rviz_assimp_vendor: + add_host: ["assimp"] + add_run: ["assimp"] +rviz_rendering: + add_host: ["glew"] +rviz_visual_testing_framework: + add_host: ["${{ 'libgl-devel' if linux }}", "${{ 'libopengl-devel' if linux }}"] sbg_driver: additional_cmake_args: if: win then: '-DCMAKE_CXX_FLAGS="-D_USE_MATH_DEFINES"' sdformat_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" +sdl2_vendor: + add_host: ["sdl2"] + add_run: ["sdl2"] sick_scan_xd: additional_cmake_args: "-DBUILD_DEBUG_TARGET:BOOL=OFF -DROS_VERSION=2" spdlog_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" sqlite3_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" + add_host: ["sqlite"] + add_run: ["sqlite"] toppra: generate_dummy_package_with_run_deps: dep_name: toppra-python max_pin: 'x.x' +tvm_vendor: + add_host: ["libblas", "openblas", "libcblas"] ublox_gps: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" uncrustify_vendor: @@ -215,6 +372,8 @@ velodyne_laserscan: # Windows (pulled in by rtabmap_examples): M_PI, and its li additional_cmake_args: if: win then: '-DCMAKE_CXX_FLAGS_INIT=/D_USE_MATH_DEFINES -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON' +velodyne_pointcloud: + add_host: ["libboost-devel"] visp: generate_dummy_package_with_run_deps: dep_name: visp @@ -222,3 +381,14 @@ visp: # rosdistro's visp is older than conda-forge's, which is built against the current # OpenCV/protobuf (3.6.x needs OpenCV 4, i.e. protobuf < 7) override_version: '3.7.0' +webots_ros2_importer: + # urdf2webots imports PIL, but the package.xml doesn't declare python3-pil + add_run: ["pillow"] +yaml_cpp_vendor: + add_host: ["yaml-cpp"] + add_run: ["yaml-cpp"] +zenoh_cpp_vendor: + add_host: ["libzenohc", "libzenohcxx"] +zstd_vendor: + add_host: ["zstd", "${{ 'zstd-static' if not win }}"] + add_run: ["zstd"] diff --git a/tools/check_dependency_compat.py b/tools/check_dependency_compat.py index 30e707ca2..55162838e 100644 --- a/tools/check_dependency_compat.py +++ b/tools/check_dependency_compat.py @@ -464,6 +464,9 @@ def solve( server.stdin.write(json.dumps({"recipe": str(recipe.resolve()), "glibc": glibc}) + "\n") server.stdin.flush() response = json.loads(server.stdout.readline()) + # a failure that isn't the solver's answer (render, network): not a conflict + if response.get("error"): + raise RuntimeError(f"vinca-rs solve failed for {label}: {response['error']}") return response["ok"], response["text"] return run_solve( recipe, diff --git a/tools/import_distro.py b/tools/import_distro.py index cf1ea4967..35a3f4458 100644 --- a/tools/import_distro.py +++ b/tools/import_distro.py @@ -9,7 +9,7 @@ - vinca.yaml extending shared/vinca.yaml, without its package selections, with this repository's paths (patch_dir, snapshot paths; skip_existing is derived); comments are kept -- pkg_additional_info.yaml, patch/dependencies.yaml +- pkg_additional_info.yaml with the old patch/dependencies.yaml merged in per package, without entries identical to shared/ (build numbers stay); ros-- dependency names become ros2- - patch/ patches renamed to ros2-[.].patch @@ -156,9 +156,10 @@ def import_distro(src: Source, distro: str | None) -> str: with (dest / "vinca.yaml").open("w") as fh: ry.dump(vinca, fh) - # as they are (patch/dependencies.yaml is filtered below) + # as they are (patch/dependencies.yaml goes into pkg_additional_info.yaml below) shutil.rmtree(dest / "patch", ignore_errors=True) src.copy_dir("patch", dest) + (dest / "patch" / "dependencies.yaml").unlink(missing_ok=True) for patch in (dest / "patch").glob(f"ros-{source}-*.patch"): patch.rename(patch.with_name("ros2-" + patch.name.removeprefix(f"ros-{source}-"))) # a file the old repository no longer has goes too (re-imports mirror it) @@ -168,18 +169,26 @@ def import_distro(src: Source, distro: str | None) -> str: else: (dest / name).unlink(missing_ok=True) - # per-package files: drop entries identical to shared/ (keeping build numbers) - for name, shared_file, target in ( - ("pkg_additional_info.yaml", "pkg_additional_info.yaml", dest / "pkg_additional_info.yaml"), - ("patch/dependencies.yaml", "patch/dependencies.yaml", dest / "patch" / "dependencies.yaml"), - ): - text = src.text(name) - if text is None: - target.unlink(missing_ok=True) - continue - text = re.sub(rf"\bros-{source}-(?=[a-z0-9])", "ros2-", text) - data = ry.load(text) or {} - common = yaml.safe_load((rs.SHARED / shared_file).read_text()) or {} + # pkg_additional_info.yaml, with the old repository's patch/dependencies.yaml merged + # in per package (its add_*/remove_* keys); drop entries identical to shared/ + # (keeping build numbers) + target = dest / "pkg_additional_info.yaml" + texts = [t for t in (src.text("pkg_additional_info.yaml"), src.text("patch/dependencies.yaml")) if t is not None] + if not texts: + target.unlink(missing_ok=True) + else: + data = None + for text in texts: + part = ry.load(re.sub(rf"\bros-{source}-(?=[a-z0-9])", "ros2-", text)) or {} + if data is None: + data = part + continue + for key, value in part.items(): + if isinstance(data.get(key), dict): + data[key].update(value) + else: + data[key] = value + common = yaml.safe_load((rs.SHARED / "pkg_additional_info.yaml").read_text()) or {} for key in list(data): if key not in common: continue diff --git a/tools/maintenance.py b/tools/maintenance.py index eb8401080..1968547d4 100644 --- a/tools/maintenance.py +++ b/tools/maintenance.py @@ -1398,6 +1398,41 @@ def unmatched_patches(patches: list[str], packages: set[str]) -> list[str]: return [p for p in patches if (m := PATCH_NAME.match(p)) and m["package"] not in names] +def _selector_items(node): + """The values of a list or mapping with `- if: ... then: ... else: ...` selectors, for every platform.""" + if isinstance(node, list): + for item in node: + yield from _selector_items(item) + elif isinstance(node, dict) and "if" in node and "then" in node: + yield from _selector_items(node["then"]) + yield from _selector_items(node.get("else")) + elif node is not None: + yield node + + +def package_key(name: str) -> str: + """The ROS name of a per-package entry, as vinca-rs looks it up: conda prefixes + (ros--, ros2-) dropped, dashes as underscores.""" + name = re.sub(r"^(ros-[a-z]+-|ros2-)", "", name) if name.startswith(("ros2-", "ros-")) else name + return name.replace("-", "_") + + +def unknown_package_entries(layer: Path, packages: set[str]) -> list[tuple[str, str]]: + """Per-package entries of a layer (shared/ or distros//) for packages that + aren't in `packages`: typos, or entries left behind when a package went away.""" + entries = [] + vinca = yaml.safe_load((layer / "vinca.yaml").read_text()) or {} + entries += [("vinca.yaml packages_select_by_deps", n) for n in _selector_items(vinca.get("packages_select_by_deps"))] + for name in ("pkg_additional_info.yaml",): + path = layer / name + data = yaml.safe_load(path.read_text()) if path.is_file() else None + for mapping in _selector_items(data): + if isinstance(mapping, dict): + entries += [(name, k) for k in mapping if k not in ("if", "then", "else")] + known = {p.replace("-", "_") for p in packages} + return sorted({(where, n) for where, n in entries if isinstance(n, str) and package_key(n) not in known}) + + def check() -> Result: """Sanity checks: every distribution assembles and its generated files are consistent.""" problems: list[str] = [] @@ -1442,6 +1477,8 @@ def check() -> Result: all_packages |= packages for patch in unmatched_patches(patches, packages): problems.append(f"{distro}: patch {patch} matches no package of the distribution, so it is never applied") + for where, name in unknown_package_entries(d, packages): + problems.append(f"{distro}: {where} has an entry for {name}, which the distribution doesn't have") rendered = d / "conda_build_config.yaml" before = rendered.read_text() if rendered.is_file() else "" if rs.task(distro, "render-pinning", []) or rendered.read_text() != before: @@ -1451,6 +1488,8 @@ def check() -> Result: shared = sorted(p.name for p in (rs.SHARED / "patch").glob("*.patch")) for patch in unmatched_patches(shared, all_packages): problems.append(f"shared: patch {patch} matches no package of any distribution, so it is never applied") + for where, name in unknown_package_entries(rs.SHARED, all_packages): + problems.append(f"shared: {where} has an entry for {name}, which no distribution has") # file names: .yaml everywhere (GitHub requires FUNDING.yml by that name) for yml in sorted(p for p in (rs.ROOT / ".github").rglob("*.yml") if p.name != "FUNDING.yml"): problems.append(f"{yml.relative_to(rs.ROOT)}: use the .yaml extension") diff --git a/tools/robostack.py b/tools/robostack.py index 40a93296c..c1555bf0a 100644 --- a/tools/robostack.py +++ b/tools/robostack.py @@ -10,7 +10,7 @@ Every distribution lives in distros// and only holds what is specific to it; everything else is in shared/. distros//vinca.yaml extends shared/vinca.yaml, and vinca combines both and the files next to each (pkg_additional_info.yaml, -patch/ with dependencies.yaml, tests/, robostack.yaml). Tasks run in +patch/, tests/, robostack.yaml). Tasks run in distros//work/ (generated, git-ignored): its vinca.yaml extends the distribution's and adds the channel to skip published packages, and it holds vinca_pinning.yaml, conda_build_config.yaml (rendered back into distros// by