summary refs log tree commit diff
path: root/pkgs/stdenv/darwin/make-bootstrap-tools.nix
diff options
context:
space:
mode:
authorDan Peebles <pumpkin@me.com>2016-10-15 21:36:51 -0400
committerDan Peebles <pumpkin@me.com>2016-10-15 21:36:51 -0400
commit6a380c20e02e7c36fb357d450c609180fafe5e47 (patch)
treef056fa6c9a663534e81bd24aad468360d6812f50 /pkgs/stdenv/darwin/make-bootstrap-tools.nix
parent31b286467c858480670dec7aa0f1f2dffb756f2b (diff)
downloadnixpkgs-6a380c20e02e7c36fb357d450c609180fafe5e47.tar
nixpkgs-6a380c20e02e7c36fb357d450c609180fafe5e47.tar.gz
nixpkgs-6a380c20e02e7c36fb357d450c609180fafe5e47.tar.bz2
nixpkgs-6a380c20e02e7c36fb357d450c609180fafe5e47.tar.lz
nixpkgs-6a380c20e02e7c36fb357d450c609180fafe5e47.tar.xz
nixpkgs-6a380c20e02e7c36fb357d450c609180fafe5e47.tar.zst
nixpkgs-6a380c20e02e7c36fb357d450c609180fafe5e47.zip
darwin.make-bootstrap-tools: Fix test target
I'll probably get rid of this eventually since the test-pkgs stuff is
more realistic, but this gives quick feedback for now.
Diffstat (limited to 'pkgs/stdenv/darwin/make-bootstrap-tools.nix')
-rw-r--r--pkgs/stdenv/darwin/make-bootstrap-tools.nix56
1 files changed, 53 insertions, 3 deletions
diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix
index 11a52eb423e..10d2b4decdd 100644
--- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix
+++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix
@@ -197,14 +197,49 @@ in rec {
         fi
       done
 
+      install_name_tool \
+        -id $out/lib/system/libsystem_c.dylib \
+        $out/lib/system/libsystem_c.dylib
+
+      install_name_tool \
+        -id $out/lib/system/libsystem_kernel.dylib \
+        $out/lib/system/libsystem_kernel.dylib
+
+      # TODO: this logic basically duplicates similar logic in the Libsystem expression. Deduplicate them!
+      libs=$(otool -arch x86_64 -L /usr/lib/libSystem.dylib | tail -n +3 | awk '{ print $1 }')
+
+      for i in $libs; do
+        if [ "$i" != "/usr/lib/system/libsystem_kernel.dylib" ] && [ "$i" != "/usr/lib/system/libsystem_c.dylib" ]; then
+          args="$args -reexport_library $i"
+        fi
+      done
+
+      ld -macosx_version_min 10.7 \
+         -arch x86_64 \
+         -dylib \
+         -o $out/lib/libSystem.B.dylib \
+         -compatibility_version 1.0 \
+         -current_version 1226.10.1 \
+         -reexport_library $out/lib/system/libsystem_c.dylib \
+         -reexport_library $out/lib/system/libsystem_kernel.dylib \
+         $args
+
+      ln -s libSystem.B.dylib $out/lib/libSystem.dylib
+
+      for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.10.4 gcc_s.10.5; do
+        ln -s libSystem.dylib $out/lib/lib$name.dylib
+      done
+
+      ln -s libresolv.9.dylib $out/lib/libresolv.dylib
+
       for i in $out/lib/*.dylib $out/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation; do
-        if ! test -L $i; then
-          echo patching $i
+        if test ! -L "$i" -a "$i" != "$out/lib/libSystem*.dylib"; then
+          echo "Patching $i"
 
           id=$(otool -D "$i" | tail -n 1)
           install_name_tool -id "$(dirname $i)/$(basename $id)" $i
 
-          libs=$(otool -L "$i" | tail -n +2 | grep -v Libsystem | cat)
+          libs=$(otool -L "$i" | tail -n +2 | grep -v libSystem | cat)
           if [ -n "$libs" ]; then
             install_name_tool -add_rpath $out/lib $i
           fi
@@ -214,9 +249,24 @@ in rec {
       ln -s bash $out/bin/sh
       ln -s bzip2 $out/bin/bunzip2
 
+      # Provide a gunzip script.
+      cat > $out/bin/gunzip <<EOF
+      #!$out/bin/sh
+      exec $out/bin/gzip -d "\$@"
+      EOF
+      chmod +x $out/bin/gunzip
+
+      # Provide fgrep/egrep.
+      echo "#! $out/bin/sh" > $out/bin/egrep
+      echo "exec $out/bin/grep -E \"\$@\"" >> $out/bin/egrep
+      echo "#! $out/bin/sh" > $out/bin/fgrep
+      echo "exec $out/bin/grep -F \"\$@\"" >> $out/bin/fgrep
+
       cat >$out/bin/dsymutil << EOF
       #!$out/bin/sh
       EOF
+
+      chmod +x $out/bin/egrep $out/bin/fgrep $out/bin/dsymutil
     '';
 
     allowedReferences = [ "out" ];