nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 57 lines 2.0 kB view raw
1$src/libexec/ld-elf.so.1 $src/bin/mkdir $out 2$src/libexec/ld-elf.so.1 $src/bin/tar -I "$src/libexec/ld-elf.so.1 $src/bin/xz" -C $out -xf $bootstrapTools 3export LD_LIBRARY_PATH=$out/lib 4 5BADLIST=ld-elf.so.1 6 7oobpatch() { 8 $out/libexec/ld-elf.so.1 $src/bin/cp $1 ./tmp 9 $out/libexec/ld-elf.so.1 $out/bin/patchelf --set-rpath $out/lib --set-interpreter $out/libexec/ld-elf.so.1 ./tmp 10 $out/libexec/ld-elf.so.1 $src/bin/mv ./tmp $1 11 BADLIST="$BADLIST|${1##*/}" 12} 13 14oobpatch $out/bin/patchelf 15oobpatch $out/lib/libthr.so.3 16oobpatch $out/lib/libc.so.7 17 18for f in $($out/libexec/ld-elf.so.1 $out/bin/find $out/lib -type f); do 19 $out/libexec/ld-elf.so.1 $out/bin/grep -E "$BADLIST" <<<"$f" && continue 20 $out/libexec/ld-elf.so.1 $out/bin/patchelf --set-rpath $out/lib $f 21done 22for f in $out/bin/* $out/bin/.*; do 23 $out/libexec/ld-elf.so.1 $out/bin/grep -E "$BADLIST" <<<"$f" &>/dev/null && continue 24 $out/libexec/ld-elf.so.1 $out/bin/patchelf --set-rpath $out/lib --set-interpreter $out/libexec/ld-elf.so.1 $f 25done 26 27unset LD_LIBRARY_PATH 28export PATH=$out/bin 29 30# sanity check 31$out/bin/true || exit 1 32 33# meticulously replace every nix store path with the right one 34# to work with binaries, make sure the path remains the same length by prefixing pathsep chars 35for f in $(find $out -type f); do 36 while true; do 37 BADMAN="$(strings $f | grep -o '/nix/store/.*' | grep -v "$out" | head -n1)" 38 if [ -z "$BADMAN" ]; then 39 break 40 fi 41 echo scorch $f 42 BADMAN="$(echo "$BADMAN" | cut -d/ -f-4)" 43 GOODMAN="$out" 44 if [ ${#GOODMAN} -gt ${#BADMAN} ]; then 45 echo "Can't patch $f: $BADMAN too short" 46 break 47 fi 48 while ! [ ${#GOODMAN} -eq ${#BADMAN} ]; do 49 GOODMAN="/$GOODMAN" 50 done 51 if ! sed -E -i -e "s@$BADMAN@$GOODMAN@g" $f; then 52 echo "Can't patch $f: sed failed" 53 break 54 fi 55 done 56done 57echo $out