Skip to content

Commit

Permalink
autoPatchelfHook: do not patch statically linked files
Browse files Browse the repository at this point in the history
Also speed up quite significantly due less forking.
  • Loading branch information
Mic92 committed Sep 23, 2018
1 parent ef764eb commit 58a97df
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 20 deletions.
25 changes: 7 additions & 18 deletions pkgs/build-support/setup-hooks/auto-patchelf.sh
Expand Up @@ -7,21 +7,7 @@ gatherLibraries() {
addEnvHooks "$targetOffset" gatherLibraries

isExecutable() {
[ "$(file -b -N --mime-type "$1")" = application/x-executable ]
}

findElfs() {
find "$1" -type f -exec "$SHELL" -c '
while [ -n "$1" ]; do
mimeType="$(file -b -N --mime-type "$1")"
if [ "$mimeType" = application/x-executable \
-o "$mimeType" = application/x-pie-executable \
-o "$mimeType" = application/x-sharedlib ]; then
echo "$1"
fi
shift
done
' -- {} +
readelf -h "$1" | grep -q '^ *Type: *EXEC\>'
}

# We cache dependencies so that we don't need to search through all of them on
Expand Down Expand Up @@ -167,9 +153,12 @@ autoPatchelf() {
# findDependency outside of this, the dependency cache needs to be rebuilt
# from scratch, so keep this in mind if you want to run findDependency
# outside of this function.
findElfs "$prefix" | while read -r elffile; do
autoPatchelfFile "$elffile"
done
while IFS= read -r -d $'\0' file; do
isELF "$file" || continue
# dynamically linked?
readelf -l "$file" | grep -q "^ *INTERP\\>" || continue
autoPatchelfFile "$file"
done < <(find "$prefix" -type f -print0)
}

# XXX: This should ultimately use fixupOutputHooks but we currently don't have
Expand Down
3 changes: 1 addition & 2 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -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 {}
Expand Down

0 comments on commit 58a97df

Please sign in to comment.