mirror of
https://github.com/lopsided98/nix-ros-overlay.git
synced 2025-06-12 02:34:50 +03:00
rolling: rviz-ogre-vendor: correctly patch vendor URLs
This package requires complex patching. It uses ament_vendor(), which is picky about what kinds of sources it requires. Additionally, ogre contains its own vendoring of imgui that needs to be patched.
This commit is contained in:
parent
d5f6bfe409
commit
5f9268646a
3 changed files with 72 additions and 17 deletions
|
@ -7,30 +7,79 @@ with lib;
|
|||
s = composeManyExtensions overlays s {};
|
||||
in s;
|
||||
|
||||
# Create a tarball of a package source. If the source is already an archive,
|
||||
# it will be unpacked and repacked as a tarball.
|
||||
tarSource = {
|
||||
compress ? false,
|
||||
hook ? ""
|
||||
}: src: self.runCommand ("${src.name}.tar" + lib.optionalString compress ".gz") { inherit src; } ''
|
||||
unpackPhase
|
||||
pushd "$sourceRoot"
|
||||
${hook}
|
||||
popd
|
||||
tar --sort=name \
|
||||
--format=gnu \
|
||||
--owner=0 --group=0 --numeric-owner \
|
||||
${lib.optionalString compress "-z"} \
|
||||
-cf "$out" "$sourceRoot"
|
||||
'';
|
||||
|
||||
patchVendorUrl = pkg: {
|
||||
url, sha256,
|
||||
url, hash ? "", sha256 ? "",
|
||||
originalUrl ? url,
|
||||
file ? "CMakeLists.txt"
|
||||
}: pkg.overrideAttrs ({
|
||||
postPatch ? "", ...
|
||||
}: {
|
||||
postPatch = ''
|
||||
substituteInPlace '${file}' \
|
||||
--replace '${originalUrl}' '${self.fetchurl { inherit url sha256; }}'
|
||||
substituteInPlace ${escapeShellArg file} \
|
||||
--replace ${escapeShellArg originalUrl} ${escapeShellArg (self.fetchurl { inherit url hash sha256; })}
|
||||
'' + postPatch;
|
||||
});
|
||||
|
||||
patchVendorGit = pkg: {
|
||||
url,
|
||||
originalUrl ? url,
|
||||
file ? "CMakeLists.txt",
|
||||
fetchgitArgs ? {}
|
||||
}: pkg.overrideAttrs ({
|
||||
postPatch ? "", ...
|
||||
}: {
|
||||
postPatch = ''
|
||||
sed -i '\|GIT_REPOSITORY\s.*${escapeShellArg url}|c\
|
||||
sed -i '\|GIT_REPOSITORY\s.*${originalUrl}|c\
|
||||
URL "${self.fetchgit ({ inherit url; } // fetchgitArgs)}"' \
|
||||
'${file}'
|
||||
${escapeShellArg file}
|
||||
'' + postPatch;
|
||||
});
|
||||
|
||||
# Patch a vendored download that uses ament_vendor() with a Git repo as the
|
||||
# source.
|
||||
patchAmentVendorGit = pkg: {
|
||||
url,
|
||||
originalUrl ? url,
|
||||
rev, # Must correspond to the VCS_VERSION argument
|
||||
file ? "CMakeLists.txt",
|
||||
fetchgitArgs ? {},
|
||||
tarSourceArgs ? {}
|
||||
}: pkg.overrideAttrs ({
|
||||
nativeBuildInputs ? [],
|
||||
postPatch ? "", ...
|
||||
}: let
|
||||
# ament_vendor doesn't allow patches for path inputs, so we have to pack it
|
||||
# into a tar first. Additionally, vcstool only accepts tarballs with the
|
||||
# version number as the root directory name.
|
||||
vendor = lib.tarSource tarSourceArgs (self.fetchgit (fetchgitArgs // {
|
||||
name = rev;
|
||||
inherit url rev;
|
||||
}));
|
||||
in {
|
||||
# CMake ExternalProject patches are applied with git apply
|
||||
nativeBuildInputs = nativeBuildInputs ++ [ self.git ];
|
||||
postPatch = ''
|
||||
sed -i '\|VCS_URL\s*${originalUrl}|c\
|
||||
VCS_URL "file://${vendor}"\
|
||||
VCS_TYPE tar' \
|
||||
${lib.escapeShellArg file}
|
||||
'' + postPatch;
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue