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;