From c19222143e79bf8e58e1791ac1125cba34069c3c Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Mon, 6 Jul 2020 00:44:24 +0200 Subject: [PATCH 1/2] meson: clean up --- .../tools/build-managers/meson/default.nix | 30 +++++++++---------- pkgs/top-level/python-packages.nix | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/pkgs/development/tools/build-managers/meson/default.nix b/pkgs/development/tools/build-managers/meson/default.nix index 5b1266da382..5f6130e9a52 100644 --- a/pkgs/development/tools/build-managers/meson/default.nix +++ b/pkgs/development/tools/build-managers/meson/default.nix @@ -1,32 +1,20 @@ { lib -, python3Packages +, python3 , stdenv , writeTextDir , substituteAll , pkgsHostHost }: -python3Packages.buildPythonApplication rec { +python3.pkgs.buildPythonApplication rec { pname = "meson"; version = "0.54.2"; - src = python3Packages.fetchPypi { + src = python3.pkgs.fetchPypi { inherit pname version; sha256 = "0m84zb0q67vnxmd6ldz477w6yjdnk9c44xhlwh1g1pzqx3m6wwd7"; }; - postFixup = '' - pushd $out/bin - # undo shell wrapper as meson tools are called with python - for i in *; do - mv ".$i-wrapped" "$i" - done - popd - - # Do not propagate Python - rm $out/nix-support/propagated-build-inputs - ''; - patches = [ # Upstream insists on not allowing bindir and other dir options # outside of prefix for some reason: @@ -68,6 +56,18 @@ python3Packages.buildPythonApplication rec { # checkInputs = [ ninja pkgconfig ]; # checkPhase = "python ./run_project_tests.py"; + postFixup = '' + pushd $out/bin + # undo shell wrapper as meson tools are called with python + for i in *; do + mv ".$i-wrapped" "$i" + done + popd + + # Do not propagate Python + rm $out/nix-support/propagated-build-inputs + ''; + meta = with lib; { homepage = "https://mesonbuild.com"; description = "SCons-like build system that use python as a front-end language and Ninja as a building backend"; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 4340f6a30ee..482118ca307 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4645,7 +4645,7 @@ in { mesa = callPackage ../development/python-modules/mesa { }; meson = disabledIf (pythonOlder "3.5") (toPythonModule ((pkgs.meson.override { - python3Packages = self; + python3 = python; }).overrideAttrs(oldAttrs: { # We do not want the setup hook in Python packages # because the build is performed differently. From d8ac41f86394365f8319d8b37fd25e6a7ba7d904 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 12 Jul 2020 18:19:10 +0200 Subject: [PATCH 2/2] =?UTF-8?q?meson:=200.54.2=20=E2=86=92=200.55.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://mesonbuild.com/Release-notes-for-0-55-0.html https://github.com/mesonbuild/meson/releases/tag/0.55.0 https://github.com/mesonbuild/meson/compare/0.54.2...0.55.0 --- .../tools/build-managers/meson/default.nix | 8 +- .../build-managers/meson/fix-rpath.patch | 76 ++++++------------- 2 files changed, 28 insertions(+), 56 deletions(-) diff --git a/pkgs/development/tools/build-managers/meson/default.nix b/pkgs/development/tools/build-managers/meson/default.nix index 5f6130e9a52..dad1dfa360c 100644 --- a/pkgs/development/tools/build-managers/meson/default.nix +++ b/pkgs/development/tools/build-managers/meson/default.nix @@ -8,11 +8,11 @@ python3.pkgs.buildPythonApplication rec { pname = "meson"; - version = "0.54.2"; + version = "0.55.0"; src = python3.pkgs.fetchPypi { inherit pname version; - sha256 = "0m84zb0q67vnxmd6ldz477w6yjdnk9c44xhlwh1g1pzqx3m6wwd7"; + sha256 = "Chriv+KuFKxHWTU3+TKQ+3npt3XFW0xTwoK8PKN0WzU="; }; patches = [ @@ -51,6 +51,10 @@ python3.pkgs.buildPythonApplication rec { # workaround until https://github.com/mesonbuild/meson/pull/6512 lands. depsHostHostPropagated = [ pkgsHostHost.stdenv.cc ]; + pythonPath = [ + python3.pkgs.setuptools # for pkg_resources + ]; + # 0.45 update enabled tests but they are failing doCheck = false; # checkInputs = [ ninja pkgconfig ]; diff --git a/pkgs/development/tools/build-managers/meson/fix-rpath.patch b/pkgs/development/tools/build-managers/meson/fix-rpath.patch index 6cf7afc2bdf..c98506fcd9b 100644 --- a/pkgs/development/tools/build-managers/meson/fix-rpath.patch +++ b/pkgs/development/tools/build-managers/meson/fix-rpath.patch @@ -1,56 +1,24 @@ ---- a/mesonbuild/linkers.py -+++ b/mesonbuild/linkers.py -@@ -527,8 +527,10 @@ class GnuLikeDynamicLinkerMixin: - # In order to avoid relinking for RPATH removal, the binary needs to contain just - # enough space in the ELF header to hold the final installation RPATH. - paths = ':'.join(all_paths) -- if len(paths) < len(install_rpath): -- padding = 'X' * (len(install_rpath) - len(paths)) -+ store_paths = ':'.join(filter(lambda path: path.startswith('@storeDir@'), all_paths)) -+ extra_space_needed = len(install_rpath + (':' if install_rpath and store_paths else '') + store_paths) - len(paths) -+ if extra_space_needed > 0: -+ padding = 'X' * extra_space_needed - if not paths: - paths = padding - else: -@@ -902,8 +904,10 @@ class SolarisDynamicLinker(PosixDynamicLinkerMixin, DynamicLinker): - # In order to avoid relinking for RPATH removal, the binary needs to contain just - # enough space in the ELF header to hold the final installation RPATH. - paths = ':'.join(all_paths) -- if len(paths) < len(install_rpath): -- padding = 'X' * (len(install_rpath) - len(paths)) -+ store_paths = ':'.join(filter(lambda path: path.startswith('@storeDir@'), all_paths)) -+ extra_space_needed = len(install_rpath + (':' if install_rpath and store_paths else '') + store_paths) - len(paths) -+ if extra_space_needed > 0: -+ padding = 'X' * extra_space_needed - if not paths: - paths = padding - else: ---- a/mesonbuild/scripts/depfixer.py -+++ b/mesonbuild/scripts/depfixer.py -@@ -303,6 +303,14 @@ class Elf(DataSizes): - return - self.bf.seek(rp_off) - old_rpath = self.read_str() +--- a/mesonbuild/backend/backends.py ++++ b/mesonbuild/backend/backends.py +@@ -453,6 +453,21 @@ class Backend: + args.extend(self.environment.coredata.get_external_link_args(target.for_machine, lang)) + except Exception: + pass + -+ if new_rpath: -+ new_rpath += b':' -+ else: -+ new_rpath = b'' ++ nix_ldflags = os.environ.get('NIX_LDFLAGS', '').split() ++ next_is_path = False ++ # Try to add rpaths set by user or ld-wrapper so that they are not removed. ++ # Based on https://github.com/NixOS/nixpkgs/blob/69711a2f5ffe8cda208163be5258266172ff527f/pkgs/build-support/bintools-wrapper/ld-wrapper.sh#L148-L177 ++ for flag in nix_ldflags: ++ if flag == '-rpath' or flag == '-L': ++ next_is_path = True ++ elif next_is_path or flag.startswith('-L/'): ++ if flag.startswith('-L/'): ++ flag = flag[2:] ++ if flag.startswith('@storeDir@'): ++ dirs.add(flag) ++ next_is_path = False + -+ new_rpath += b':'.join(filter(lambda path: path.startswith(b'@storeDir@'), old_rpath.split(b':'))) -+ - if len(old_rpath) < len(new_rpath): - sys.exit("New rpath must not be longer than the old one.") - # The linker does read-only string deduplication. If there is a -@@ -316,6 +324,10 @@ class Elf(DataSizes): - if not new_rpath: - self.remove_rpath_entry(entrynum) - else: -+ # clean old rpath to avoid stale references -+ # (see https://github.com/NixOS/nixpkgs/pull/46020) -+ self.bf.seek(rp_off) -+ self.bf.write(b'\0'*len(old_rpath)) - self.bf.seek(rp_off) - self.bf.write(new_rpath) - self.bf.write(b'\0') + for arg in args: + if arg.startswith('-Wl,-rpath='): + for dir in arg.replace('-Wl,-rpath=','').split(':'):