From aa7839c145faad0fb78dbe52e6cbd7d21a0e4c6e Mon Sep 17 00:00:00 2001
From: Daniel Peebles <pumpkin@me.com>
Date: Sat, 4 Oct 2014 14:52:39 -0400
Subject: [PATCH] Clean up command-line tools a bit to allow us to use an
 impure hdiutil (for an upcoming bootstrapped stdenv for darwin!)

Closes #4382
---
 .../darwin/command-line-tools/default.nix     | 82 +++++++++++++------
 .../darwin/command-line-tools/sdk.nix         | 25 ------
 .../darwin/command-line-tools/tools.nix       | 25 ------
 pkgs/top-level/all-packages.nix               |  2 +-
 4 files changed, 59 insertions(+), 75 deletions(-)
 delete mode 100644 pkgs/os-specific/darwin/command-line-tools/sdk.nix
 delete mode 100644 pkgs/os-specific/darwin/command-line-tools/tools.nix

diff --git a/pkgs/os-specific/darwin/command-line-tools/default.nix b/pkgs/os-specific/darwin/command-line-tools/default.nix
index fa7a5e7f26e4..a4ac20fa0851 100644
--- a/pkgs/os-specific/darwin/command-line-tools/default.nix
+++ b/pkgs/os-specific/darwin/command-line-tools/default.nix
@@ -1,37 +1,71 @@
-{ stdenv, callPackage, fetchadc, xpwn, xar, gzip, cpio }:
+{ stdenv, fetchadc, xar, gzip, cpio }:
 
 let
-  cmdline_packages = stdenv.mkDerivation {
-    name = "osx-10.9-command-line-tools-packages";
+  name = "command-line-tools-mac-os-10.9";
 
-    src = fetchadc {
-      # Isn't this a beautiful path? Note the subtle differences before and after the slash!
-      path   = "Developer_Tools/command_line_tools_os_x_10.9_for_xcode__xcode_6/command_line_tools_for_os_x_10.9_for_xcode_6.dmg";
-      sha256 = "0zrpf73r3kfk9pdh6p6j6w1sbw7s2pp0f8rd83660r5hk1y3j5jc";
-    };
+  pkg = { installPhase }: stdenv.mkDerivation {
+    name = "${name}.pkg";
 
-    phases = [ "unpackPhase" "installPhase" ];
+    phases = [ "installPhase" ];
 
-    outputs = [ "devsdk" "cltools" ];
-
-    unpackPhase = ''
-      ${xpwn}/bin/hdutil $src extract "Command Line Tools (OS X 10.9).pkg" "Command Line Tools (OS X 10.9).pkg"
-      ${xar}/bin/xar -x -f "Command Line Tools (OS X 10.9).pkg"
-    '';
-
-    installPhase = ''
-      cp -r DevSDK_OSX109.pkg/ $devsdk
-      cp -r CLTools_Executables.pkg/ $cltools
-    '';
+    inherit installPhase;
 
     meta = with stdenv.lib; {
-      description = "Basis for the Mac OS command-line tools package";
+      description = "Developer tools .pkg file";
       maintainers = with maintainers; [ copumpkin ];
       platforms   = platforms.darwin;
       license     = licenses.unfree;
     };
   };
-in {
-  sdk   = callPackage ./sdk.nix   { inherit cmdline_packages; };
-  tools = callPackage ./tools.nix { inherit cmdline_packages; };
+
+  basic = pkg: stdenv.mkDerivation {
+    inherit name;
+
+    phases = [ "unpackPhase" "installPhase" ];
+
+    outputs = [ "sdk" "tools" ];
+
+    unpackPhase = ''
+      ${xar}/bin/xar -x -f "${pkg}"
+    '';
+
+    installPhase = ''
+      start="$(pwd)"
+      mkdir -p $sdk
+      mkdir -p $tools
+
+      cd $sdk
+      cat $start/DevSDK_OSX109.pkg/Payload | ${gzip}/bin/gzip -d | ${cpio}/bin/cpio -idm
+
+      cd $tools
+      cat $start/CLTools_Executables.pkg/Payload | ${gzip}/bin/gzip -d | ${cpio}/bin/cpio -idm
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Mac OS command-line developer tools and SDK";
+      maintainers = with maintainers; [ copumpkin ];
+      platforms   = platforms.darwin;
+      license     = licenses.unfree;
+    };
+  };
+in rec {
+  dmg = fetchadc {
+    # Isn't this a beautiful path? Note the subtle differences before and after the slash!
+    path   = "Developer_Tools/command_line_tools_os_x_10.9_for_xcode__xcode_6/command_line_tools_for_os_x_10.9_for_xcode_6.dmg";
+    sha256 = "0zrpf73r3kfk9pdh6p6j6w1sbw7s2pp0f8rd83660r5hk1y3j5jc";
+  };
+
+  pure = { xpwn }: basic (pkg {
+    installPhase = ''
+      ${xpwn}/bin/hdutil ${dmg} extract "Command Line Tools (OS X 10.9).pkg" $out
+    '';
+  });
+
+  impure = basic (pkg {
+    installPhase = ''
+      /usr/bin/hdiutil attach ${dmg} -mountpoint clt-mount -nobrowse
+      cp "clt-mount/Command Line Tools (OS X 10.9).pkg" $out
+      /usr/bin/hdiutil unmount clt-mount
+    '';
+  });
 }
diff --git a/pkgs/os-specific/darwin/command-line-tools/sdk.nix b/pkgs/os-specific/darwin/command-line-tools/sdk.nix
deleted file mode 100644
index 618f4f3641da..000000000000
--- a/pkgs/os-specific/darwin/command-line-tools/sdk.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ stdenv, cpio, gzip, cmdline_packages }:
-
-stdenv.mkDerivation {
-  name = "osx-command-line-sdk-10.9";
-  src  = cmdline_packages.devsdk;
-
-  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
-
-  unpackPhase = ''
-    cat $src/Payload | ${gzip}/bin/gzip -d | ${cpio}/bin/cpio -idm
-  '';
-
-  installPhase = ''
-    mkdir -p $out
-    cp -r System $out
-    cp -r usr/* $out
-  '';
-
-  meta = with stdenv.lib; {
-    description = "Apple command-line tools SDK (headers and man pages)";
-    maintainers = with maintainers; [ copumpkin ];
-    platforms   = platforms.darwin;
-    license     = licenses.unfree;
-  };
-}
diff --git a/pkgs/os-specific/darwin/command-line-tools/tools.nix b/pkgs/os-specific/darwin/command-line-tools/tools.nix
deleted file mode 100644
index 0c4eb4ab44a0..000000000000
--- a/pkgs/os-specific/darwin/command-line-tools/tools.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ stdenv, cpio, gzip, cmdline_packages }:
-
-stdenv.mkDerivation {
-  name = "osx-command-line-sdk-10.9";
-  src  = cmdline_packages.cltools;
-
-  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
-
-  unpackPhase = ''
-    cat $src/Payload | ${gzip}/bin/gzip -d | ${cpio}/bin/cpio -idm
-  '';
-
-  installPhase = ''
-    mkdir -p $out
-    cp -r Library/Developer/CommandLineTools/Library $out
-    cp -r Library/Developer/CommandLineTools/usr/* $out
-  '';
-
-  meta = with stdenv.lib; {
-    description = "Apple command-line developer tools";
-    maintainers = with maintainers; [ copumpkin ];
-    platforms   = platforms.darwin;
-    license     = licenses.unfree;
-  };
-}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 24f8b0678cd8..d65445b27f56 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -7563,7 +7563,7 @@ let
   cramfsswap = callPackage ../os-specific/linux/cramfsswap { };
 
   darwin = let
-    cmdline = callPackage ../os-specific/darwin/command-line-tools {};
+    cmdline = (callPackage ../os-specific/darwin/command-line-tools {}).pure { inherit xpwn; };
   in rec {
     cctools = forceNativeDrv (callPackage ../os-specific/darwin/cctools-port {
       cross = assert crossSystem != null; crossSystem;