summary refs log tree commit diff
path: root/pkgs/top-level
diff options
context:
space:
mode:
authoraszlig <aszlig@nix.build>2018-09-25 05:21:01 +0200
committeraszlig <aszlig@nix.build>2018-09-25 05:21:01 +0200
commit19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266 (patch)
tree38ecb25c73cb9f188beff7ed6acbe92e3340c23c /pkgs/top-level
parent8d865c95152f287e5c27e7a67383ef954a935da1 (diff)
parent8df68a93e636ce5c67a79713c35eb55a9dfd1bba (diff)
downloadnixlib-19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266.tar
nixlib-19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266.tar.gz
nixlib-19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266.tar.bz2
nixlib-19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266.tar.lz
nixlib-19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266.tar.xz
nixlib-19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266.tar.zst
nixlib-19e83bc2ba2b4f2e55c9e9a6c196bfacf8fb0266.zip
Merge autoPatchelfHook improvements (#47222)
This includes the initialy commit was done by @Mic92 plus a few fixes
from my side. So essentially this avoids patching statically linked
executables and also speeds up searching for ELF files altogether.

I've tested this by comparing the outputs of all the derivations which
make use of this hook using the following Nix expression:

  let
    getPackagesForRev = rev: with import (builtins.fetchGit {
      url = ./.;
      inherit rev;
    }) { config.allowUnfree = true; }; [
      cups-kyodialog3 elasticsearch franz gurobi javacard-devkit
      masterpdfeditor maxx oracle-instantclient powershell reaper
      teamviewer unixODBCDrivers.msodbcsql17 virtlyst wavebox zoom-us
    ];

    pkgs = import <nixpkgs> {};
    baseRev = "ef764eb0d8314b81a012dae04642b4766199956d";

  in pkgs.runCommand "diff-contents" {
    chset = pkgs.lib.zipListsWith (old: new: pkgs.runCommand "diff" {
      inherit old new;
      nativeBuildInputs = [ pkgs.nukeReferences ];
    } ''
      mkdir -p "''${NIX_STORE#/}"
      cp --no-preserve=all -r "$old" "''${NIX_STORE#/}"
      cp --no-preserve=all -r "$new" "''${NIX_STORE#/}"
      find "''${old#/}" "''${new#/}" \
        \( -type f -exec nuke-refs {} + \) -o \( -type l -delete \)
      mkdir "$out"
      echo "$old" > "$out/old-path"
      echo "$new" > "$out/new-path"
      diff -Nur "''${old#/}" "''${new#/}" > "$out/diff" || :
    '') (getPackagesForRev baseRev) (getPackagesForRev "");
  } ''
    err=0
    for c in $chset; do
      if [ -s "$c/diff" ]; then
        echo "$(< "$c/old-path") -> $(< "$c/new-path")" \
             "differs, report: $c/diff" >&2
        err=1
      fi
    done
    [ $err -eq 0 ] && touch "$out"
  ''

With these changes there is only one derivation which has altered
contents, which is "franz". However the reason why it has differing
contents is not directly because of the autoPatchelfHook changes, but
because the "env-vars" file from the builder is in
"$out/opt/franz/env-vars" (Cc: @gnidorah) and we now have different
contents for NIX_CFLAGS_COMPILE and other environment variables.

I also tested this against a random static binary and the hook no longer
tries to patch it.

Merges: #47222
Diffstat (limited to 'pkgs/top-level')
-rw-r--r--pkgs/top-level/all-packages.nix3
1 files changed, 1 insertions, 2 deletions
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index f3386b18ca87..ce86b1d3d7fe 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -81,8 +81,7 @@ with pkgs;
     { deps = [ autoconf264 automake111x gettext libtool ]; }
     ../build-support/setup-hooks/autoreconf.sh;
 
-  autoPatchelfHook = makeSetupHook
-    { name = "auto-patchelf-hook"; deps = [ file ]; }
+  autoPatchelfHook = makeSetupHook { name = "auto-patchelf-hook"; }
     ../build-support/setup-hooks/auto-patchelf.sh;
 
   ensureNewerSourcesHook = { year }: makeSetupHook {}