diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-06-27 13:33:05 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-08-09 12:44:49 +0200 |
commit | daa66b8b1cb2ea5359f9914418350f63f0a53d7e (patch) | |
tree | b7973e4f1a9919edcccdaa6da098c06df7286a04 /pkgs/stdenv/generic/setup.sh | |
parent | d7a4fa26b064aa294b1f52c61b02770feed6903b (diff) | |
download | nixlib-daa66b8b1cb2ea5359f9914418350f63f0a53d7e.tar nixlib-daa66b8b1cb2ea5359f9914418350f63f0a53d7e.tar.gz nixlib-daa66b8b1cb2ea5359f9914418350f63f0a53d7e.tar.bz2 nixlib-daa66b8b1cb2ea5359f9914418350f63f0a53d7e.tar.lz nixlib-daa66b8b1cb2ea5359f9914418350f63f0a53d7e.tar.xz nixlib-daa66b8b1cb2ea5359f9914418350f63f0a53d7e.tar.zst nixlib-daa66b8b1cb2ea5359f9914418350f63f0a53d7e.zip |
Factor out fixup phase stuff into separate setup hooks
Diffstat (limited to 'pkgs/stdenv/generic/setup.sh')
-rw-r--r-- | pkgs/stdenv/generic/setup.sh | 122 |
1 files changed, 1 insertions, 121 deletions
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index a953176127c7..286e9e019b1d 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -325,25 +325,6 @@ export NIX_BUILD_CORES # Misc. helper functions. -stripDirs() { - local dirs="$1" - local stripFlags="$2" - local dirsNew= - - for d in ${dirs}; do - if [ -d "$prefix/$d" ]; then - dirsNew="${dirsNew} $prefix/$d " - fi - done - dirs=${dirsNew} - - if [ -n "${dirs}" ]; then - header "stripping (with flags $stripFlags) in $dirs" - find $dirs -type f -print0 | xargs -0 ${xargsFlags:--r} strip $commonStripFlags $stripFlags || true - stopNest - fi -} - # PaX-mark binaries paxmark() { local flags="$1" @@ -357,6 +338,7 @@ paxmark() { paxctl -zex -${flags} "$@" } + ###################################################################### # Textual substitution functions. @@ -702,67 +684,6 @@ checkPhase() { } -patchShebangs() { - # Rewrite all script interpreter file names (`#! /path') under the - # specified directory tree to paths found in $PATH. E.g., - # /bin/sh will be rewritten to /nix/store/<hash>-some-bash/bin/sh. - # /usr/bin/env gets special treatment so that ".../bin/env python" is - # rewritten to /nix/store/<hash>/bin/python. - # Interpreters that are already in the store are left untouched. - header "patching script interpreter paths" - local dir="$1" - local f - local oldPath - local newPath - local arg0 - local args - local oldInterpreterLine - local newInterpreterLine - - find "$dir" -type f -perm +0100 | while read f; do - if [ "$(head -1 "$f" | head -c +2)" != '#!' ]; then - # missing shebang => not a script - continue - fi - - oldInterpreterLine=$(head -1 "$f" | tail -c +3) - read -r oldPath arg0 args <<< "$oldInterpreterLine" - - if $(echo "$oldPath" | grep -q "/bin/env$"); then - # Check for unsupported 'env' functionality: - # - options: something starting with a '-' - # - environment variables: foo=bar - if $(echo "$arg0" | grep -q -- "^-.*\|.*=.*"); then - echo "unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" - exit 1 - fi - newPath="$(command -v "$arg0" || true)" - else - if [ "$oldPath" = "" ]; then - # If no interpreter is specified linux will use /bin/sh. Set - # oldpath="/bin/sh" so that we get /nix/store/.../sh. - oldPath="/bin/sh" - fi - newPath="$(command -v "$(basename "$oldPath")" || true)" - args="$arg0 $args" - fi - - newInterpreterLine="$newPath $args" - - if [ -n "$oldPath" -a "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ]; then - if [ -n "$newPath" -a "$newPath" != "$oldPath" ]; then - echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\"" - # escape the escape chars so that sed doesn't interpret them - escapedInterpreterLine=$(echo "$newInterpreterLine" | sed 's|\\|\\\\|g') - sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f" - fi - fi - done - - stopNest -} - - installPhase() { runHook preInstall @@ -838,47 +759,6 @@ fixupPhase() { } -addHook fixupOutput _defaultFixupOutput -_defaultFixupOutput() { - if [ -z "$dontGzipMan" ]; then - echo "gzipping man pages" - GLOBIGNORE=.:..:*.gz:*.bz2 - for f in "$prefix"/share/man/*/* "$prefix"/share/man/*/*/*; do - if [ -f "$f" -a ! -L "$f" ]; then - if gzip -c -n "$f" > "$f".gz; then - rm "$f" - else - rm "$f".gz - fi - fi - done - for f in "$prefix"/share/man/*/* "$prefix"/share/man/*/*/*; do - if [ -L "$f" -a -f `readlink -f "$f"`.gz ]; then - ln -sf `readlink "$f"`.gz "$f".gz && rm "$f" - fi - done - unset GLOBIGNORE - fi - - # TODO: strip _only_ ELF executables, and return || fail here... - if [ -z "$dontStrip" ]; then - stripDebugList=${stripDebugList:-lib lib32 lib64 libexec bin sbin} - if [ -n "$stripDebugList" ]; then - stripDirs "$stripDebugList" "${stripDebugFlags:--S}" - fi - - stripAllList=${stripAllList:-} - if [ -n "$stripAllList" ]; then - stripDirs "$stripAllList" "${stripAllFlags:--s}" - fi - fi - - if [ -z "$dontPatchShebangs" ]; then - patchShebangs "$prefix" - fi -} - - installCheckPhase() { runHook preInstallCheck |