about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2018-07-09 17:16:50 -0400
committerGitHub <noreply@github.com>2018-07-09 17:16:50 -0400
commit81f78e6d3dd5fe5ba0c6ea0830b329488712e418 (patch)
treeb123ee8a266eb4c9768a4d5f69d37c2aa0cec0d3 /pkgs
parent63aed85367d62a5126e7ecbf81adf41b18b90391 (diff)
parent2621171e58549ccc7d2b5230ebca024ee14d7f5a (diff)
downloadnixlib-81f78e6d3dd5fe5ba0c6ea0830b329488712e418.tar
nixlib-81f78e6d3dd5fe5ba0c6ea0830b329488712e418.tar.gz
nixlib-81f78e6d3dd5fe5ba0c6ea0830b329488712e418.tar.bz2
nixlib-81f78e6d3dd5fe5ba0c6ea0830b329488712e418.tar.lz
nixlib-81f78e6d3dd5fe5ba0c6ea0830b329488712e418.tar.xz
nixlib-81f78e6d3dd5fe5ba0c6ea0830b329488712e418.tar.zst
nixlib-81f78e6d3dd5fe5ba0c6ea0830b329488712e418.zip
Merge pull request #43256 from matthewbauer/xcbuild-refactor
xcbuild refactor
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/tools/xcbuild/platforms.nix (renamed from pkgs/development/tools/xcbuild/platform.nix)28
-rw-r--r--pkgs/development/tools/xcbuild/sdks.nix (renamed from pkgs/development/tools/xcbuild/sdk.nix)13
-rw-r--r--pkgs/development/tools/xcbuild/setup-hook.sh8
-rw-r--r--pkgs/development/tools/xcbuild/toolchain.nix69
-rw-r--r--pkgs/development/tools/xcbuild/toolchains.nix71
-rw-r--r--pkgs/development/tools/xcbuild/wrapper.nix158
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/PowerManagement/default.nix5
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/SmartCardServices/default.nix5
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/adv_cmds/xcode.nix4
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/basic_cmds/default.nix4
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/developer_cmds/default.nix4
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/diskdev_cmds/default.nix6
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/dtrace/xcode.nix6
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/file_cmds/default.nix5
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/libutil/new.nix4
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/network_cmds/default.nix6
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/security_systemkeychain/default.nix5
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/shell_cmds/default.nix4
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/text_cmds/default.nix5
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/top/default.nix5
-rw-r--r--pkgs/os-specific/darwin/insert_dylib/default.nix4
-rw-r--r--pkgs/tools/misc/contacts/default.nix5
-rw-r--r--pkgs/tools/security/pinentry/mac.nix5
-rw-r--r--pkgs/top-level/all-packages.nix6
24 files changed, 254 insertions, 181 deletions
diff --git a/pkgs/development/tools/xcbuild/platform.nix b/pkgs/development/tools/xcbuild/platforms.nix
index bb91df474aae..bc60af9e1a5c 100644
--- a/pkgs/development/tools/xcbuild/platform.nix
+++ b/pkgs/development/tools/xcbuild/platforms.nix
@@ -1,13 +1,13 @@
-{ runCommand, lib, sdk, platformName, writeText }:
+{ runCommand, lib, sdks, xcodePlatform, writeText }:
 
 let
 
   inherit (lib.generators) toPlist;
 
   Info = {
-    CFBundleIdentifier = platformName;
+    CFBundleIdentifier = "com.apple.platform.${lib.toLower xcodePlatform}";
     Type = "Platform";
-    Name = "macosx";
+    Name = lib.toLower xcodePlatform;
   };
 
   Version = {
@@ -285,14 +285,18 @@ let
 
 in
 
-runCommand "MacOSX.platform" {} ''
-  install -D ${writeText "Info.plist" (toPlist {} Info)} $out/Info.plist
-  install -D ${writeText "version.plist" (toPlist {} Version)} $out/version.plist
-  install -D ${writeText "Architectures.xcspec" (toPlist {} Architectures)} $out/Developer/Library/Xcode/Specifications/Architectures.xcspec
-  install -D ${writeText "PackageTypes.xcspec" (toPlist {} PackageTypes)} $out/Developer/Library/Xcode/Specifications/PackageTypes.xcspec
-  install -D ${writeText "ProductTypes.xcspec" (toPlist {} ProductTypes)} $out/Developer/Library/Xcode/Specifications/ProductTypes.xcspec
+runCommand "Platforms" {} ''
+  platform=$out/${xcodePlatform}.platform
 
-  mkdir -p $out/Developer/SDKs/
-  cd $out/Developer/SDKs/
-  cp -r ${sdk} ${sdk.name}
+  install -D ${writeText "Info.plist" (toPlist {} Info)} $platform/Info.plist
+  install -D ${writeText "version.plist" (toPlist {} Version)} $platform/version.plist
+  install -D ${writeText "Architectures.xcspec" (toPlist {} Architectures)} $platform/Developer/Library/Xcode/Specifications/Architectures.xcspec
+  install -D ${writeText "PackageTypes.xcspec" (toPlist {} PackageTypes)} $platform/Developer/Library/Xcode/Specifications/PackageTypes.xcspec
+  install -D ${writeText "ProductTypes.xcspec" (toPlist {} ProductTypes)} $platform/Developer/Library/Xcode/Specifications/ProductTypes.xcspec
+
+  # per-platform bins go here
+  mkdir -p $platform/usr/bin
+
+  mkdir -p $platform/Developer
+  ln -s ${sdks} $platform/Developer/SDKs
 ''
diff --git a/pkgs/development/tools/xcbuild/sdk.nix b/pkgs/development/tools/xcbuild/sdks.nix
index c97d17d739ba..b0af26e87c12 100644
--- a/pkgs/development/tools/xcbuild/sdk.nix
+++ b/pkgs/development/tools/xcbuild/sdks.nix
@@ -1,11 +1,8 @@
-{ runCommand, lib, toolchainName, sdkName, writeText }:
+{ runCommand, lib, toolchainName, sdkName, writeText, version, xcodePlatform }:
 
 let
   inherit (lib.generators) toPlist;
 
-  # TODO: expose MACOSX_DEPLOYMENT_TARGET in nix so we can use it here.
-  version = "10.10";
-
   SDKSettings = {
     CanonicalName = sdkName;
     DisplayName = sdkName;
@@ -21,9 +18,11 @@ let
   };
 in
 
-runCommand "MacOSX${version}.sdk" {
+runCommand "SDKs" {
   inherit version;
 } ''
-  install -D ${writeText "SDKSettings.plist" (toPlist {} SDKSettings)} $out/SDKSettings.plist
-  install -D ${writeText "SystemVersion.plist" (toPlist {} SystemVersion)} $out/System/Library/CoreServices/SystemVersion.plist
+  sdk=$out/${sdkName}.sdk
+  install -D ${writeText "SDKSettings.plist" (toPlist {} SDKSettings)} $sdk/SDKSettings.plist
+  install -D ${writeText "SystemVersion.plist" (toPlist {} SystemVersion)} $sdk/System/Library/CoreServices/SystemVersion.plist
+  ln -s $sdk $out/${xcodePlatform}.sdk
 ''
diff --git a/pkgs/development/tools/xcbuild/setup-hook.sh b/pkgs/development/tools/xcbuild/setup-hook.sh
index 70100c196973..9dc03a61f62e 100644
--- a/pkgs/development/tools/xcbuild/setup-hook.sh
+++ b/pkgs/development/tools/xcbuild/setup-hook.sh
@@ -19,11 +19,9 @@ xcbuildInstallPhase () {
     runHook postInstall
 }
 
-if [ -z "$dontUseXcbuild" ]; then
-    buildPhase=xcbuildBuildPhase
-    if [ -z "$installPhase" ]; then
-        installPhase=xcbuildInstallPhase
-    fi
+buildPhase=xcbuildBuildPhase
+if [ -z "$installPhase" ]; then
+    installPhase=xcbuildInstallPhase
 fi
 
 # if [ -d "*.xcodeproj" ]; then
diff --git a/pkgs/development/tools/xcbuild/toolchain.nix b/pkgs/development/tools/xcbuild/toolchain.nix
deleted file mode 100644
index 3c20b510c3b5..000000000000
--- a/pkgs/development/tools/xcbuild/toolchain.nix
+++ /dev/null
@@ -1,69 +0,0 @@
-{ runCommand, toolchainName, fetchurl, makeWrapper, stdenv
-, buildPackages, lib, writeText }:
-
-let
-
-  inherit (lib) getBin optionalString;
-  inherit (lib.generators) toPlist;
-
-  ToolchainInfo = {
-    Identifier = toolchainName;
-  };
-
-  # We could pull this out of developer_cmds but it adds an annoying
-  # loop if we want to bootstrap and this is just a tiny script so I'm
-  # not going to bother.
-  mkdep-darwin-src = fetchurl {
-    url        = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh";
-    sha256     = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541";
-    executable = true;
-  };
-in
-
-runCommand "nixpkgs.xctoolchain" {
-  nativeBuildInputs = [ makeWrapper ];
-} (''
-  mkdir -p $out
-  install -D ${writeText "ToolchainInfo.plist" (toPlist {} ToolchainInfo)} $out/ToolchainInfo.plist
-
-  mkdir -p $out/usr/include
-  mkdir -p $out/usr/lib
-  mkdir -p $out/usr/libexec
-  mkdir -p $out/usr/share
-  mkdir -p $out/usr/bin
-
-  for bin in ${getBin stdenv.cc}/bin/*; do
-    ln -s $bin $out/usr/bin
-  done
-
-  for bin in ${getBin stdenv.cc.bintools.bintools}/bin/*; do
-    if ! [ -e "$out/usr/bin/$(basename $bin)" ]; then
-      ln -s $bin $out/usr/bin
-    fi
-  done
-
-  ln -s ${buildPackages.yacc}/bin/yacc $out/usr/bin/yacc
-  ln -s ${buildPackages.yacc}/bin/bison $out/usr/bin/bison
-  ln -s ${buildPackages.flex}/bin/flex $out/usr/bin/flex
-  ln -s ${buildPackages.flex}/bin/flex++ $out/usr/bin/flex++
-  ln -s $out/bin/flex $out/usr/bin/lex
-
-  ln -s ${buildPackages.m4}/bin/m4 $out/usr/bin/m4
-  ln -s $out/usr/bin/m4 $out/usr/bin/gm4
-
-  ln -s ${buildPackages.unifdef}/bin/unifdef $out/usr/bin/unifdef
-  ln -s ${buildPackages.unifdef}/bin/unifdefall $out/usr/bin/unifdefall
-
-  ln -s ${buildPackages.gperf}/bin/gperf $out/usr/bin/gperf
-  ln -s ${buildPackages.indent}/bin/indent $out/usr/bin/indent
-  ln -s ${buildPackages.ctags}/bin/ctags $out/usr/bin/ctags
-'' + optionalString stdenv.isDarwin ''
-  for bin in ${getBin buildPackages.darwin.cctools}/bin/*; do
-    if ! [ -e "$out/usr/bin/$(basename $bin)" ]; then
-      ln -s $bin $out/usr/bin
-    fi
-  done
-
-  ln -s ${buildPackages.darwin.bootstrap_cmds}/bin/mig $out/usr/bin
-  ln -s ${mkdep-darwin-src} $out/usr/bin/mkdep
-'')
diff --git a/pkgs/development/tools/xcbuild/toolchains.nix b/pkgs/development/tools/xcbuild/toolchains.nix
new file mode 100644
index 000000000000..01a8fbdb0b06
--- /dev/null
+++ b/pkgs/development/tools/xcbuild/toolchains.nix
@@ -0,0 +1,71 @@
+{ runCommand, toolchainName, fetchurl, makeWrapper, stdenv
+, buildPackages, lib, writeText }:
+
+let
+
+  inherit (lib) getBin optionalString;
+  inherit (lib.generators) toPlist;
+
+  ToolchainInfo = {
+    Identifier = toolchainName;
+  };
+
+  # We could pull this out of developer_cmds but it adds an annoying
+  # loop if we want to bootstrap and this is just a tiny script so I'm
+  # not going to bother.
+  mkdep-darwin-src = fetchurl {
+    url        = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh";
+    sha256     = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541";
+    executable = true;
+  };
+in
+
+runCommand "Toolchains" {
+  nativeBuildInputs = [ makeWrapper ];
+} (''
+  toolchain=$out/XcodeDefault.xctoolchain
+  mkdir -p $toolchain
+
+  install -D ${writeText "ToolchainInfo.plist" (toPlist {} ToolchainInfo)} $toolchain/ToolchainInfo.plist
+
+  mkdir -p $toolchain/usr/include
+  mkdir -p $toolchain/usr/lib
+  mkdir -p $toolchain/usr/libexec
+  mkdir -p $toolchain/usr/share
+  mkdir -p $toolchain/usr/bin
+
+  for bin in ${getBin stdenv.cc}/bin/*; do
+    ln -s $bin $toolchain/usr/bin
+  done
+
+  for bin in ${getBin stdenv.cc.bintools.bintools}/bin/*; do
+    if ! [ -e "$toolchain/usr/bin/$(basename $bin)" ]; then
+      ln -s $bin $toolchain/usr/bin
+    fi
+  done
+
+  ln -s ${buildPackages.yacc}/bin/yacc $toolchain/usr/bin/yacc
+  ln -s ${buildPackages.yacc}/bin/bison $toolchain/usr/bin/bison
+  ln -s ${buildPackages.flex}/bin/flex $toolchain/usr/bin/flex
+  ln -s ${buildPackages.flex}/bin/flex++ $toolchain/usr/bin/flex++
+  ln -s $toolchain/bin/flex $toolchain/usr/bin/lex
+
+  ln -s ${buildPackages.m4}/bin/m4 $toolchain/usr/bin/m4
+  ln -s $toolchain/usr/bin/m4 $toolchain/usr/bin/gm4
+
+  ln -s ${buildPackages.unifdef}/bin/unifdef $toolchain/usr/bin/unifdef
+  ln -s ${buildPackages.unifdef}/bin/unifdefall $toolchain/usr/bin/unifdefall
+
+  ln -s ${buildPackages.gperf}/bin/gperf $toolchain/usr/bin/gperf
+  ln -s ${buildPackages.indent}/bin/indent $toolchain/usr/bin/indent
+  ln -s ${buildPackages.ctags}/bin/ctags $toolchain/usr/bin/ctags
+'' + optionalString stdenv.isDarwin ''
+  for bin in ${getBin buildPackages.darwin.cctools}/bin/*; do
+    if ! [ -e "$toolchain/usr/bin/$(basename $bin)" ]; then
+      ln -s $bin $toolchain/usr/bin
+    fi
+  done
+
+  ln -s ${buildPackages.darwin.bootstrap_cmds}/bin/mig $toolchain/usr/bin
+  ln -s ${mkdep-darwin-src} $toolchain/usr/bin/mkdep
+'')
diff --git a/pkgs/development/tools/xcbuild/wrapper.nix b/pkgs/development/tools/xcbuild/wrapper.nix
index cfa855e23cd8..f8b1c1bf31e9 100644
--- a/pkgs/development/tools/xcbuild/wrapper.nix
+++ b/pkgs/development/tools/xcbuild/wrapper.nix
@@ -1,80 +1,132 @@
-{ stdenv, buildPackages, makeWrapper, writeText, runCommand
-, CoreServices, ImageIO, CoreGraphics }:
+{ stdenv, lib, buildPackages, makeWrapper, writeText, runCommand
+, CoreServices, ImageIO, CoreGraphics
+, targetPlatform
+, xcodePlatform ? targetPlatform.xcodePlatform or "MacOSX"
+, xcodeVer ? targetPlatform.xcodeVer or "9.4.1"
+, sdkVer ? targetPlatform.sdkVer or "10.10" }:
 
 let
 
+  inherit (lib) toLower;
+
   toolchainName = "com.apple.dt.toolchain.XcodeDefault";
-  platformName = "com.apple.platform.macosx";
-  sdkName = "macosx10.10";
+  sdkName = "${xcodePlatform}${sdkVer}";
+
+  # TODO: expose MACOSX_DEPLOYMENT_TARGET in nix so we can use it here.
+  sdkBuildVersion = "17E189";
+  xcodeSelectVersion = "2349";
 
   xcbuild = buildPackages.callPackage ./default.nix {
     inherit CoreServices ImageIO CoreGraphics;
   };
 
-  toolchain = buildPackages.callPackage ./toolchain.nix {
+  toolchains = buildPackages.callPackage ./toolchains.nix {
     inherit toolchainName;
   };
 
-  sdk = buildPackages.callPackage ./sdk.nix {
-    inherit toolchainName sdkName;
+  sdks = buildPackages.callPackage ./sdks.nix {
+    inherit toolchainName sdkName xcodePlatform;
+    version = sdkVer;
   };
 
-  platform = buildPackages.callPackage ./platform.nix {
-    inherit sdk platformName;
+  platforms = buildPackages.callPackage ./platforms.nix {
+    inherit sdks xcodePlatform;
   };
 
   xcconfig = writeText "nix.xcconfig" ''
     SDKROOT=${sdkName}
   '';
 
-in
-
-stdenv.mkDerivation {
-  name = "xcbuild-wrapper-${xcbuild.version}";
-
-  nativeBuildInputs = [ makeWrapper ];
-
-  setupHook = ./setup-hook.sh;
-
-  phases = [ "installPhase" "fixupPhase" ];
-
-  installPhase = ''
-    mkdir -p $out/bin
-
-    for file in ${xcbuild}/bin/*; do
-      ln -s $file $out/bin
-    done
-
-    mkdir -p $out/usr
-    ln -s $out/bin $out/usr/bin
-
-    mkdir -p $out/Library/Xcode
-    ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications
-
-    mkdir -p $out/Platforms
-    ln -s ${platform} $out/Platforms/nixpkgs.platform
-
-    mkdir -p $out/Toolchains
-    ln -s ${toolchain} $out/Toolchains/nixpkgs.xctoolchain
+  xcode-select = writeText "xcode-select" ''
+#!/usr/bin/env sh
+while [ $# -gt 0 ]; do
+   case "$1" in
+         -h | --help) ;; # noop
+         -s | --switch) shift;; # noop
+         -r | --reset) ;; # noop
+         -v | --version) echo xcode-select version ${xcodeSelectVersion} ;;
+         -p | --print-path) echo @DEVELOPER_DIR@ ;;
+         --install) ;; # noop
+    esac
+    shift
+done
+  '';
 
-    wrapProgram $out/bin/xcodebuild \
-      --add-flags "-xcconfig ${xcconfig}" \
-      --add-flags "DERIVED_DATA_DIR=." \
-      --set DEVELOPER_DIR "$out" \
-      --set SDKROOT ${sdkName}
-    wrapProgram $out/bin/xcrun \
-      --set DEVELOPER_DIR "$out" \
-      --set SDKROOT ${sdkName}
-    wrapProgram $out/bin/xcode-select \
-      --set DEVELOPER_DIR "$out" \
-      --set SDKROOT ${sdkName}
+  xcrun = writeText "xcrun" ''
+#!/usr/bin/env sh
+while [ $# -gt 0 ]; do
+   case "$1" in
+         --sdk | -sdk) shift ;;
+         --find | -find)
+           shift
+           command -v $1 ;;
+         --log | -log) ;; # noop
+         --verbose | -verbose) ;; # noop
+         --no-cache | -no-cache) ;; # noop
+         --kill-cache | -kill-cache) ;; # noop
+         --show-sdk-path | -show-sdk-path)
+           echo ${sdks}/${sdkName}.sdk ;;
+         --show-sdk-platform-path | -show-sdk-platform-path)
+           echo ${platforms}/${xcodePlatform}.platform ;;
+         --show-sdk-version | -show-sdk-version)
+           echo ${sdkVer} ;;
+         --show-sdk-build-version | -show-sdk-build-version)
+           echo ${sdkBuildVersion} ;;
+         *) break ;;
+    esac
+    shift
+done
+if ! [[ -z "$@" ]]; then
+   exec "$@"
+fi
   '';
 
+in
+
+runCommand "xcodebuild-${xcbuild.version}" {
+  nativeBuildInputs = [ makeWrapper ];
   inherit (xcbuild) meta;
 
-  passthru = {
-    raw = xcbuild;
-  };
+  # ensure that the toolchain goes in PATH
+  propagatedBuildInputs = [ "${toolchains}/XcodeDefault.xctoolchain/usr" ];
+
+  passthru = { inherit xcbuild; };
 
   preferLocalBuild = true;
-}
+} ''
+  mkdir -p $out/bin
+
+  mkdir -p $out/usr
+  ln -s $out/bin $out/usr/bin
+
+  mkdir -p $out/Library/Xcode
+  ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications
+
+  ln -s ${platforms} $out/Platforms
+  ln -s ${toolchains} $out/Toolchains
+
+  makeWrapper ${xcbuild}/bin/xcodebuild $out/bin/xcodebuild \
+    --add-flags "-xcconfig ${xcconfig}" \
+    --add-flags "DERIVED_DATA_DIR=." \
+    --set DEVELOPER_DIR "$out" \
+    --set SDKROOT ${sdkName} \
+    --run '[ "$1" = "-version" ] && (echo Xcode ${xcodeVer}; echo Build version ${sdkBuildVersion}) && exit 0'
+
+  substitute ${xcode-select} $out/bin/xcode-select \
+    --subst-var-by DEVELOPER_DIR $out
+  chmod +x $out/bin/xcode-select
+
+  substitute ${xcrun} $out/bin/xcrun
+  chmod +x $out/bin/xcrun
+
+  for bin in PlistBuddy actool builtin-copy builtin-copyPlist \
+             builtin-copyStrings builtin-copyTiff \
+             builtin-embeddedBinaryValidationUtility \
+             builtin-infoPlistUtility builtin-lsRegisterURL \
+             builtin-productPackagingUtility builtin-validationUtility \
+             lsbom plutil; do
+    ln -s ${xcbuild}/bin/$bin $out/bin/$bin
+  done
+
+  fixupPhase
+''
diff --git a/pkgs/os-specific/darwin/apple-source-releases/PowerManagement/default.nix b/pkgs/os-specific/darwin/apple-source-releases/PowerManagement/default.nix
index a866c9414d52..2d5520b9bf9c 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/PowerManagement/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/PowerManagement/default.nix
@@ -1,7 +1,8 @@
-{ appleDerivation, xcbuild, IOKit }:
+{ appleDerivation, xcbuildHook, IOKit }:
 
 appleDerivation {
-  buildInputs = [ xcbuild IOKit ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ IOKit ];
   xcbuildFlags = "-target caffeinate";
   installPhase = ''
     install -D Products/Deployment/caffeinate $out/bin/caffeinate
diff --git a/pkgs/os-specific/darwin/apple-source-releases/SmartCardServices/default.nix b/pkgs/os-specific/darwin/apple-source-releases/SmartCardServices/default.nix
index 1cb85b1e9884..6e9003350780 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/SmartCardServices/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/SmartCardServices/default.nix
@@ -1,8 +1,9 @@
-{ stdenv, appleDerivation, xcbuild, gnumake, Security
+{ stdenv, appleDerivation, xcbuildHook, gnumake, Security
 , libsecurity_utilities, libsecurity_cdsa_utilities }:
 
 appleDerivation {
-  buildInputs = [ xcbuild libsecurity_utilities libsecurity_cdsa_utilities ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ libsecurity_utilities libsecurity_cdsa_utilities ];
 
   DSTROOT = "$out";
 
diff --git a/pkgs/os-specific/darwin/apple-source-releases/adv_cmds/xcode.nix b/pkgs/os-specific/darwin/apple-source-releases/adv_cmds/xcode.nix
index dcfb4aefe1f5..fda7cd85e4f7 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/adv_cmds/xcode.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/adv_cmds/xcode.nix
@@ -2,7 +2,6 @@
 
 appleDerivation {
   # We can't just run the root build, because https://github.com/facebook/xcbuild/issues/264
-  dontUseXcbuild = true;
 
   # pkill requires special private headers that are unavailable in
   # NixPkgs. These ones are needed:
@@ -49,7 +48,8 @@ appleDerivation {
     # ln -s $out/share/man/man1/pkill.1 $out/share/man/man1/pgrep.1
   '';
 
-  buildInputs = [ xcbuild ncurses libutil-new ];
+  nativeBuildInputs = [ xcbuild ];
+  buildInputs = [ ncurses libutil-new ];
 
   meta = {
     platforms = stdenv.lib.platforms.darwin;
diff --git a/pkgs/os-specific/darwin/apple-source-releases/basic_cmds/default.nix b/pkgs/os-specific/darwin/apple-source-releases/basic_cmds/default.nix
index b52ec3306dc4..596ca25d70a4 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/basic_cmds/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/basic_cmds/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, appleDerivation, fetchurl, xcbuild }:
+{ stdenv, appleDerivation, fetchurl, xcbuildHook }:
 
 appleDerivation rec {
-  buildInputs = [ xcbuild ];
+  nativeBuildInputs = [ xcbuildHook ];
 
   # These PBXcp calls should be patched in xcbuild to allow them to
   # automatically be prefixed.
diff --git a/pkgs/os-specific/darwin/apple-source-releases/developer_cmds/default.nix b/pkgs/os-specific/darwin/apple-source-releases/developer_cmds/default.nix
index 1f35e3008b3b..a572d46ceab5 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/developer_cmds/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/developer_cmds/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, appleDerivation, xcbuild }:
+{ stdenv, fetchurl, appleDerivation, xcbuildHook }:
 
 appleDerivation rec {
-  buildInputs = [ xcbuild ];
+  nativeBuildInputs = [ xcbuildHook ];
 
   patchPhase = ''
     substituteInPlace rpcgen/rpc_main.c \
diff --git a/pkgs/os-specific/darwin/apple-source-releases/diskdev_cmds/default.nix b/pkgs/os-specific/darwin/apple-source-releases/diskdev_cmds/default.nix
index aba2472af602..b947267ab14d 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/diskdev_cmds/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/diskdev_cmds/default.nix
@@ -1,7 +1,9 @@
-{ stdenv, appleDerivation, xcbuild, lib, hostPlatform, Libc, xnu, libutil-new }:
+{ stdenv, appleDerivation, xcbuildHook
+, lib, hostPlatform, Libc, xnu, libutil-new }:
 
 appleDerivation {
-  buildInputs = [ xcbuild libutil-new ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ libutil-new ];
 
   NIX_CFLAGS_COMPILE = "-I.";
   NIX_LDFLAGS = "-lutil";
diff --git a/pkgs/os-specific/darwin/apple-source-releases/dtrace/xcode.nix b/pkgs/os-specific/darwin/apple-source-releases/dtrace/xcode.nix
index dd193f2c07dc..f8636403ed54 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/dtrace/xcode.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/dtrace/xcode.nix
@@ -1,7 +1,9 @@
-{ appleDerivation, xcbuild, CoreSymbolication, xnu, bison, flex, darling, stdenv }:
+{ appleDerivation, xcbuildHook, CoreSymbolication
+, xnu, bison, flex, darling, stdenv }:
 
 appleDerivation {
-  buildInputs = [ xcbuild CoreSymbolication xnu bison flex darling ];
+  nativeBuildInputs = [ xcbuildHook flex bison ];
+  buildInputs = [ CoreSymbolication darling ];
   NIX_CFLAGS_COMPILE = "-DCTF_OLD_VERSIONS -DPRIVATE -DYYDEBUG=1 -I${xnu}/Library/Frameworks/System.framework/Headers";
   NIX_LDFLAGS = "-L./Products/Release";
   xcbuildFlags = "-target dtrace";
diff --git a/pkgs/os-specific/darwin/apple-source-releases/file_cmds/default.nix b/pkgs/os-specific/darwin/apple-source-releases/file_cmds/default.nix
index 47a587966b44..a19e0736336d 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/file_cmds/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/file_cmds/default.nix
@@ -1,7 +1,8 @@
-{ stdenv, appleDerivation, xcbuild, zlib, bzip2, lzma, ncurses, libutil-new }:
+{ stdenv, appleDerivation, xcbuildHook, zlib, bzip2, lzma, ncurses, libutil-new }:
 
 appleDerivation rec {
-  buildInputs = [ xcbuild zlib bzip2 lzma ncurses libutil-new ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ zlib bzip2 lzma ncurses libutil-new ];
 
   # some commands not working:
   # mtree: _simple.h not found
diff --git a/pkgs/os-specific/darwin/apple-source-releases/libutil/new.nix b/pkgs/os-specific/darwin/apple-source-releases/libutil/new.nix
index 7facea2b8936..0115ce537e27 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/libutil/new.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/libutil/new.nix
@@ -1,8 +1,8 @@
-{ stdenv, appleDerivation, xcbuild }:
+{ stdenv, appleDerivation, xcbuildHook }:
 
 # TODO: make this the official libutil expression once we've integrated xcbuild in the bootstrap
 appleDerivation {
-  buildInputs = [ xcbuild ];
+  nativeBuildInputs = [ xcbuildHook ];
 
   prePatch = ''
     substituteInPlace tzlink.c \
diff --git a/pkgs/os-specific/darwin/apple-source-releases/network_cmds/default.nix b/pkgs/os-specific/darwin/apple-source-releases/network_cmds/default.nix
index 23777c941576..dccc83a70bff 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/network_cmds/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/network_cmds/default.nix
@@ -1,7 +1,9 @@
-{ stdenv, appleDerivation, xcbuild, openssl, Librpcsvc, xnu, libpcap, developer_cmds }:
+{ stdenv, appleDerivation, xcbuildHook
+, openssl, Librpcsvc, xnu, libpcap, developer_cmds }:
 
 appleDerivation rec {
-  buildInputs = [ xcbuild openssl xnu Librpcsvc libpcap developer_cmds ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ openssl xnu Librpcsvc libpcap developer_cmds ];
 
   NIX_CFLAGS_COMPILE = " -I./unbound -I${xnu}/Library/Frameworks/System.framework/Headers/";
 
diff --git a/pkgs/os-specific/darwin/apple-source-releases/security_systemkeychain/default.nix b/pkgs/os-specific/darwin/apple-source-releases/security_systemkeychain/default.nix
index 1a0208ef3a08..d5bc3483c389 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/security_systemkeychain/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/security_systemkeychain/default.nix
@@ -1,9 +1,10 @@
-{ appleDerivation, xcbuild, Security
+{ appleDerivation, xcbuildHook, Security
 , libsecurity_codesigning, libsecurity_utilities, libsecurity_cdsa_utilities
 , xnu, osx_private_sdk, pcsclite}:
 
 appleDerivation {
-  buildInputs = [ xcbuild Security libsecurity_utilities
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ Security libsecurity_utilities
                   libsecurity_cdsa_utilities libsecurity_codesigning
                   pcsclite ];
 
diff --git a/pkgs/os-specific/darwin/apple-source-releases/shell_cmds/default.nix b/pkgs/os-specific/darwin/apple-source-releases/shell_cmds/default.nix
index 8ce916feb38a..bec05ef85757 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/shell_cmds/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/shell_cmds/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, appleDerivation, xcbuild }:
+{ stdenv, appleDerivation, xcbuildHook }:
 
 appleDerivation rec {
-  buildInputs = [ xcbuild ];
+  nativeBuildInputs = [ xcbuildHook ];
 
   patchPhase = ''
     # NOTE: these hashes must be recalculated for each version change
diff --git a/pkgs/os-specific/darwin/apple-source-releases/text_cmds/default.nix b/pkgs/os-specific/darwin/apple-source-releases/text_cmds/default.nix
index 196276b0b273..08df235ed8c2 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/text_cmds/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/text_cmds/default.nix
@@ -1,7 +1,8 @@
-{ stdenv, appleDerivation, fetchurl, xcbuild, ncurses, bzip2, zlib, lzma }:
+{ stdenv, appleDerivation, fetchurl, xcbuildHook, ncurses, bzip2, zlib, lzma }:
 
 appleDerivation {
-  buildInputs = [ xcbuild ncurses bzip2 zlib lzma ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ ncurses bzip2 zlib lzma ];
 
   # patches to use ncursees
   # disables md5
diff --git a/pkgs/os-specific/darwin/apple-source-releases/top/default.nix b/pkgs/os-specific/darwin/apple-source-releases/top/default.nix
index 4ddec2a30c90..3513cb2e172c 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/top/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/top/default.nix
@@ -1,7 +1,8 @@
-{xcbuild, appleDerivation, apple_sdk, ncurses, libutil-new, lib}:
+{xcbuildHook, appleDerivation, apple_sdk, ncurses, libutil-new, lib}:
 
 appleDerivation {
-  buildInputs = [ xcbuild apple_sdk.frameworks.IOKit ncurses libutil-new ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ apple_sdk.frameworks.IOKit ncurses libutil-new ];
   NIX_LDFLAGS = "-lutil";
   installPhase = ''
     install -D Products/Release/libtop.a $out/lib/libtop.a
diff --git a/pkgs/os-specific/darwin/insert_dylib/default.nix b/pkgs/os-specific/darwin/insert_dylib/default.nix
index b3790b8c87c3..510c7154f2bc 100644
--- a/pkgs/os-specific/darwin/insert_dylib/default.nix
+++ b/pkgs/os-specific/darwin/insert_dylib/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, xcbuild }:
+{ stdenv, fetchFromGitHub, xcbuildHook }:
 
 stdenv.mkDerivation
   { name = "insert_dylib-2016.08.28";
@@ -8,7 +8,7 @@ stdenv.mkDerivation
         rev = "c8beef66a08688c2feeee2c9b6eaf1061c2e67a9";
         sha256 = "0az38y06pvvy9jf2wnzdwp9mp98lj6nr0ldv0cs1df5p9x2qvbya";
       };
-    buildInputs = [ xcbuild ];
+    nativeBuildInputs = [ xcbuildHook ];
     installPhase =
       ''
         prog=$(find . -type f -name insert_dylib)
diff --git a/pkgs/tools/misc/contacts/default.nix b/pkgs/tools/misc/contacts/default.nix
index 47a74e84b55a..dc8f776cef66 100644
--- a/pkgs/tools/misc/contacts/default.nix
+++ b/pkgs/tools/misc/contacts/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xcbuild, Foundation, AddressBook }:
+{ stdenv, fetchurl, xcbuildHook, Foundation, AddressBook }:
 
 stdenv.mkDerivation rec {
   version = "1.1a-3";
@@ -9,7 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "0wdqc1ndgrdhqapvvgx5xihc750szv08lp91x4l6n0gh59cpxpg3";
   };
 
-  buildInputs = [ xcbuild Foundation AddressBook ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ Foundation AddressBook ];
 
   installPhase = ''
     mkdir -p $out/bin
diff --git a/pkgs/tools/security/pinentry/mac.nix b/pkgs/tools/security/pinentry/mac.nix
index e555889d1abb..b198d7446a92 100644
--- a/pkgs/tools/security/pinentry/mac.nix
+++ b/pkgs/tools/security/pinentry/mac.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, fetchFromGitHub, xcbuild, libiconv, Cocoa, ncurses }:
+{ fetchurl, stdenv, fetchFromGitHub, xcbuildHook, libiconv, Cocoa, ncurses }:
 
 stdenv.mkDerivation rec {
   name = "pinentry-mac-0.9.4";
@@ -10,7 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "0g75302697gqcxyf2hyqzvcbd5pyss1bl2xvfd40wqav7dlyvj83";
   };
 
-  buildInputs = [ xcbuild libiconv Cocoa ncurses ];
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ libiconv Cocoa ncurses ];
 
   installPhase = ''
     mkdir -p $out/Applications
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 6ce402148dbf..e31a55782f15 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -8604,10 +8604,14 @@ with pkgs;
 
   xc3sprog = callPackage ../development/tools/misc/xc3sprog { };
 
-  xcbuild  = callPackage ../development/tools/xcbuild/wrapper.nix {
+  xcodebuild = callPackage ../development/tools/xcbuild/wrapper.nix {
     inherit (darwin.apple_sdk.frameworks) CoreServices CoreGraphics ImageIO;
     stdenv = buildPackages.clangStdenv;
   };
+  xcbuild = xcodebuild;
+  xcbuildHook = makeSetupHook {
+    deps = [ xcbuild ];
+  } ../development/tools/xcbuild/setup-hook.sh  ;
 
   xmlindent = callPackage ../development/web/xmlindent {};