New comment by blacklightpy on void-packages repository https://github.com/void-linux/void-packages/issues/50093#issuecomment-2089350374 Comment: ### Notes on how ROS is packaged The standard procedure for generating DEB/RPM files is by using `git-buildpackage` (GBP) on the build farm. `bloom` is the ROS infrastructure tool provided which generates the release files and makes a PR to the Build Farm repo, and when merged, it invokes the Jenkins CI job. To do this without deploying to the ROS APT/DNF repo, we'll need to self-host `ros_buildfarm` and set a local APT repo to deploy to. **How it is locally built:** - First we obtain the ROS 2 variant sources, using `vcs import` the `ros2.repos` file from the appropriate branch from https://github.com/ros2/ros2 into the `src` path of the working directory. - Then we also clone the appropriate branch of the [variants repo](https://github.com/ros2/variants/) into `src` - Then we do `rosdep init` and `rosdep update` to get the latest package definitions, from the [rosdistro repo](https://github.com/ros/rosdistro). - Then `rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"` (Skipping those because they don't have the `package.xml` manifests set or have require a license to use). - This is supposed to install packages using the system package manager, like Python dependencies, etc. The documentation also tells you to add the ROS APT/DNF repository, so I'm not sure if that will cause trouble here. Also, I don't know if `rosdep` can handle XBPS yet (My storage is tummy full to check rn). - `colcon build` is used to generate the binaries. `colcon build --merge-install` should install all packages into one directory. So we must use `colcon build --merge-install --packages-up-to ` to build a variant. And I think once the binary is generated, we can package it normally. **Possible Issues:** I don't know how `rosdep` handles system packages (including Python packages, since PEP 668). I know that `rosdep keys` should list all the dependencies from a workspace source.. so that should help find out what all the dependencies are, and we should be able to add them in `makedepends`. The ROS specific packages, we should be able to build from sources. > [!NOTE] > `colcon` (Collective Construction) is the latest and universal build system in ROS, that handles CMake, setuptools, cargo, gradle and many other build systems to allow diversity in ROS packages. It also allows building with other more systems using extensions, like `colcon-blaze` for Blaze. > > Prior to `colcon`, ROS used to use `ament_tools/ament` in ROS 2 and `catkin_tools/catkin`, `catkin_make_isolated`, `catkin_make` and `rosbuild/rosmake` in ROS 1, in that reverse-chronological order. So many tutorials may list building with `catkin build` or `catkin_make_isolated` and that can get confusing. > > `colcon` handles `ament` and `catkin` repositories by using `catkin_pkg` to parse `package.xml` files and skipping directly to the underlying build systems.