mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-23 13:24:29 +00:00
de910a040b
In common distributions, RPATH is only needed for internal libraries so meson removes everything else. With Nix, the locations of libraries are not as predictable, therefore we need to keep them in the RPATH. [1] Previously we have just kept the RPATH produced by the linker, patching meson not to remove it. This deprived us of potentially replacing it with install_rpath provided by project so we had to re-add it manually, and also introduced a vulnerability of keeping build paths in RPATH. This commit restores the clean-up but modifies it so the items starting with /nix/store are retained. This should be relatively safe since the store is immutable, however, there might be some unwanted retainment of build_rpath [2] if it contains paths from Nix store. [1]: https://github.com/NixOS/nixpkgs/issues/31222#issuecomment-365811634 [2]: http://mesonbuild.com/Release-notes-for-0-42-0.html#added-build_rpath-keyword-argument
72 lines
2.3 KiB
Nix
72 lines
2.3 KiB
Nix
{ lib, python3Packages, stdenv, targetPlatform, writeTextDir, substituteAll }: let
|
|
targetPrefix = lib.optionalString stdenv.isCross
|
|
(targetPlatform.config + "-");
|
|
in python3Packages.buildPythonApplication rec {
|
|
version = "0.44.0";
|
|
pname = "meson";
|
|
name = "${pname}-${version}";
|
|
|
|
src = python3Packages.fetchPypi {
|
|
inherit pname version;
|
|
sha256 = "1rpqp9iwbvr4xvfdh3iyfh1ha274hbb66jbgw3pa5a73x4d4ilqn";
|
|
};
|
|
|
|
postFixup = ''
|
|
pushd $out/bin
|
|
# undo shell wrapper as meson tools are called with python
|
|
for i in *; do
|
|
mv ".$i-wrapped" "$i"
|
|
done
|
|
popd
|
|
'';
|
|
|
|
patches = [
|
|
# Unlike libtool, vanilla Meson does not pass any information
|
|
# about the path library will be installed to to g-ir-scanner,
|
|
# breaking the GIR when path other than ${!outputLib}/lib is used.
|
|
# We patch Meson to add a --fallback-library-path argument with
|
|
# library install_dir to g-ir-scanner.
|
|
./gir-fallback-path.patch
|
|
|
|
# In common distributions, RPATH is only needed for internal libraries so
|
|
# meson removes everything else. With Nix, the locations of libraries
|
|
# are not as predictable, therefore we need to keep them in the RPATH.
|
|
# At the moment we are keeping the paths starting with /nix/store.
|
|
# https://github.com/NixOS/nixpkgs/issues/31222#issuecomment-365811634
|
|
(substituteAll {
|
|
src = ./fix-rpath.patch;
|
|
inherit (builtins) storeDir;
|
|
})
|
|
];
|
|
|
|
setupHook = ./setup-hook.sh;
|
|
|
|
crossFile = writeTextDir "cross-file.conf" ''
|
|
[binaries]
|
|
c = '${targetPrefix}cc'
|
|
cpp = '${targetPrefix}c++'
|
|
ar = '${targetPrefix}ar'
|
|
strip = '${targetPrefix}strip'
|
|
pkgconfig = 'pkg-config'
|
|
|
|
[properties]
|
|
needs_exe_wrapper = true
|
|
|
|
[host_machine]
|
|
system = '${targetPlatform.parsed.kernel.name}'
|
|
cpu_family = '${targetPlatform.parsed.cpu.family}'
|
|
cpu = '${targetPlatform.parsed.cpu.name}'
|
|
endian = ${if targetPlatform.isLittleEndian then "'little'" else "'big'"}
|
|
'';
|
|
|
|
inherit (stdenv) cc isCross;
|
|
|
|
meta = with lib; {
|
|
homepage = http://mesonbuild.com;
|
|
description = "SCons-like build system that use python as a front-end language and Ninja as a building backend";
|
|
license = licenses.asl20;
|
|
maintainers = with maintainers; [ mbe rasendubi ];
|
|
platforms = platforms.all;
|
|
};
|
|
}
|