cross: clean up the meson x cargo flag patching

This commit is contained in:
Colin 2024-05-19 22:33:00 +00:00
parent f20a0ac409
commit 5a92b07f5d

View File

@ -75,8 +75,20 @@ let
pkg
);
# build a GI_TYPELIB_PATH out of some packages, useful for build-time tools which otherwise
# try to load gobject-introspection files for the wrong platform (e.g. `blueprint` compiler).
typelibPath = pkgs: lib.concatStringsSep ":" (builtins.map (p: "${lib.getLib p}/lib/girepository-1.0") pkgs);
# `cargo` which adds the correct env vars and `--target` flag when invoked from meson build scripts
crossCargo = let
inherit (final.pkgsBuildHost) cargo;
inherit (final.rust.envVars) setEnv rustHostPlatformSpec;
in (final.pkgsBuildBuild.writeShellScriptBin "cargo" ''
exec ${setEnv} "${lib.getExe cargo}" "$@" --target "${rustHostPlatformSpec}"
'').overrideAttrs {
inherit (cargo) meta;
};
emulated = mkEmulated final prev;
@ -474,24 +486,14 @@ in with final; {
# ];
# });
delfin = prev.delfin.overrideAttrs (upstream:
let
cargoEnvWrapper = buildPackages.writeShellScript "cargo-env-wrapper" ''
CARGO_BIN="$1"
shift
CARGO_OP="$1"
shift
${rust.envVars.setEnv} "$CARGO_BIN" "$CARGO_OP" --target "${rust.envVars.rustHostPlatformSpec}" "$@"
'';
in {
delfin = prev.delfin.overrideAttrs (upstream: {
nativeBuildInputs = upstream.nativeBuildInputs ++ [
# fixes: loaders/meson.build:72:7: ERROR: Program 'msgfmt' not found or not executable
buildPackages.gettext
];
postPatch = ''
substituteInPlace delfin/meson.build \
--replace "cargo, 'build'," "'${cargoEnvWrapper}', cargo, 'build'," \
--replace "cargo, 'build'," "'${lib.getExe crossCargo}', 'build'," \
--replace "'delfin' / rust_target" "'delfin' / '${rust.envVars.rustHostPlatformSpec}' / rust_target"
'';
});
@ -745,24 +747,14 @@ in with final; {
# });
# 2024/02/27: upstreaming is unblocked
glycin-loaders = prev.glycin-loaders.overrideAttrs (upstream:
let
cargoEnvWrapper = buildPackages.writeShellScript "cargo-env-wrapper" ''
CARGO_BIN="$1"
shift
CARGO_OP="$1"
shift
${rust.envVars.setEnv} "$CARGO_BIN" "$CARGO_OP" --target "${rust.envVars.rustHostPlatformSpec}" "$@"
'';
in {
glycin-loaders = prev.glycin-loaders.overrideAttrs (upstream: {
nativeBuildInputs = upstream.nativeBuildInputs ++ [
# fixes: loaders/meson.build:72:7: ERROR: Program 'msgfmt' not found or not executable
buildPackages.gettext
];
postPatch = ''
substituteInPlace loaders/meson.build \
--replace "cargo_bin, 'build'," "'${cargoEnvWrapper}', cargo_bin, 'build'," \
--replace "cargo_bin, 'build'," "'${lib.getExe crossCargo}', 'build'," \
--replace "'loaders' / rust_target" "'loaders' / '${rust.envVars.rustHostPlatformSpec}' / rust_target"
'';
});
@ -1210,20 +1202,10 @@ in with final; {
# });
# 2023/12/19: upstreaming blocked on glycin-loaders
loupe = prev.loupe.overrideAttrs (upstream:
let
cargoEnvWrapper = buildPackages.writeShellScript "cargo-env-wrapper" ''
CARGO_BIN="$1"
shift
CARGO_OP="$1"
shift
${rust.envVars.setEnv} "$CARGO_BIN" "$CARGO_OP" --target "${rust.envVars.rustHostPlatformSpec}" "$@"
'';
in {
loupe = prev.loupe.overrideAttrs (upstream: {
postPatch = (upstream.postPatch or "") + ''
substituteInPlace src/meson.build \
--replace "cargo, 'build'," "'${cargoEnvWrapper}', cargo, 'build'," \
--replace "cargo, 'build'," "'${lib.getExe crossCargo}', 'build'," \
--replace "'src' / rust_target" "'src' / '${rust.envVars.rustHostPlatformSpec}' / rust_target"
'';
});
@ -1845,21 +1827,11 @@ in with final; {
# inherit (emulated) stdenv;
# };
snapshot = prev.snapshot.overrideAttrs (upstream:
let
cargoEnvWrapper = buildPackages.writeShellScript "cargo-env-wrapper" ''
CARGO_BIN="$1"
shift
CARGO_OP="$1"
shift
${rust.envVars.setEnv} "$CARGO_BIN" "$CARGO_OP" --target "${rust.envVars.rustHostPlatformSpec}" "$@"
'';
in {
snapshot = prev.snapshot.overrideAttrs (upstream: {
# fixes "error: linker `cc` not found"
postPatch = (upstream.postPatch or "") + ''
substituteInPlace src/meson.build \
--replace "cargo, 'build'," "'${cargoEnvWrapper}', cargo, 'build'," \
--replace "cargo, 'build'," "'${lib.getExe crossCargo}', 'build'," \
--replace "'src' / rust_target" "'src' / '${rust.envVars.rustHostPlatformSpec}' / rust_target"
'';
});