The information is stored in vendored-source.json files in the package
directories. The file can be automatically generated by running
command like this:
$(nix-build -A rosPackages.jazzy.gz-math-vendor.updateAmentVendor)'
This command executes Cmake for the given package with an alternative
implementation of the ament_vendor Cmake macro, which generates the
file instead of fetching the source code. The above command generates
`distros/jazzy/gz-math-vendor/vendored-source.json` files with this
content:
{
"url": "https://github.com/gazebosim/gz-math.git",
"rev": "gz-math7_7.5.2",
"hash": "sha256-LwYeyv8nwX06n5ju+ra2uqNMedMSLRumem8qDHXtNns="
}
patchAmentVendorGit function is updated to pick the information about
patching from that file instead of from its arguments.
patchGzAmentVendorGit is updated similarly and the check for version
mismatch is removed, because it would not work (version information is
not available from function arguments) and more importantly, it
is (hopefully) no longer needed, because the version will always be
updated automatically by CI.
Many packages fail to compile with Boost 1.87. Updating them to Boost
1.87 would be non-trivial amount of work and given the approaching
Noetic EOL, it wouldn't pay off. Mixing different Boost versions in
the distribution also leads to failures so setting 1.86 for all
packages seems to be the best option.
Patching gazebo after its end-of-life has little sense, especially
given that the changes wouldn't be trivial. Therefore, we downgrade
boost to fix the build.
I need to override laser-geometry (see next commit), which also needs
the distutils override. In the current implementation the distutils
override replaces the manual override. With this change, both
overrides are composed.
Without this change, gtsam is built against a vendored copy, which is
different version (3.3) than what's in nixpkgs (3.4). Dependent
packages using Eigen then fail with the following error:
/nix/store/lic85q2svs3ymv0zkgl727af9khm1x4l-ros-jazzy-gtsam-4.2.0-r4/include/gtsam/base/Vector.h:76:30: error: static assertion failed: Error: GTSAM was built against a different version of Eigen
76 | GTSAM_EIGEN_VERSION_MAJOR==EIGEN_MAJOR_VERSION,
| ^
/nix/store/lic85q2svs3ymv0zkgl727af9khm1x4l-ros-jazzy-gtsam-4.2.0-r4/include/gtsam/base/Vector.h:76:30: note: the comparison reduces to '(3 == 4)'
This is the case for mola_state_estimation (which was recently added
to ROS) as well as for some 3rd-party ROS packages I worked with.
Fixes this error:
```
> CMake Error at CMakeLists.txt:114 (message):
> Mismatch in ros-jazzy-gz-msgs-vendor version (Nix: 10.3.1, upstream:
> 10.3.2). Fix this in overrides.nix.
```
Fixes this error:
```
> CMake Error at CMakeLists.txt:114 (message):
> Mismatch in ros-jazzy-gz-common-vendor version (Nix: 5.7.0, upstream:
> 5.7.1). Fix this in overrides.nix.
```
The new hash is retrieved with `nix flake prefetch github:gazebosim/gz-common/gz-common5_5.7.1` command that returns correct old hash for the previous revision.
In the past NumPy core headers were under numpy/core/include, but in
recent nixpkgs versions, the location changed to numpy/_core/include.
NumPy >= 2.0 also includes numpy-config tool. We could use the tool to
get the correct path, instead of hardcoding it in the Nix expression,
but I'm not sure how it would work with cross-compiling, so I'm
leaving the logic as it was.