From 35b2c0edf2d3e12f1ca7dae2a91f5232a1ab1445 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Fri, 6 Jul 2018 18:49:38 -0400 Subject: [PATCH 1/3] xcbuild: refactor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reworks some of xcbuild logic to make it more compatible with Apple’s SDK. - Add a fake version of xcrun & xcode-select - Cleanup platform generation. Clang does not like having 20 char hashes in sysroot so it is much easier to just build the parent directory for each runCommand. This is a little awkward but I have renamed everything with an added ‘s’ to make the distinction more clear. - Cleaned up wrapper.nix in some different ways - Reuse some versioning logic so that we don’t end up with two different versions of Xcode or SDK reported. --- .../xcbuild/{platform.nix => platforms.nix} | 28 +-- .../tools/xcbuild/{sdk.nix => sdks.nix} | 13 +- pkgs/development/tools/xcbuild/toolchain.nix | 69 -------- pkgs/development/tools/xcbuild/toolchains.nix | 71 ++++++++ pkgs/development/tools/xcbuild/wrapper.nix | 160 ++++++++++++------ 5 files changed, 199 insertions(+), 142 deletions(-) rename pkgs/development/tools/xcbuild/{platform.nix => platforms.nix} (93%) rename pkgs/development/tools/xcbuild/{sdk.nix => sdks.nix} (63%) delete mode 100644 pkgs/development/tools/xcbuild/toolchain.nix create mode 100644 pkgs/development/tools/xcbuild/toolchains.nix diff --git a/pkgs/development/tools/xcbuild/platform.nix b/pkgs/development/tools/xcbuild/platforms.nix similarity index 93% rename from pkgs/development/tools/xcbuild/platform.nix rename to 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 similarity index 63% rename from pkgs/development/tools/xcbuild/sdk.nix rename to 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/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 - - 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} + 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 ''; + 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 +'' From 0534ceac816cb708434b126e38e98b925516498a Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Fri, 6 Jul 2018 18:53:50 -0400 Subject: [PATCH 2/3] xcbuild: move setup hook to xcbuildHook Not every package that needs xcbuild will want to use its build phase. I have moved the xcbuild setup hook to the new attribute xcbuildHook. This means that dontUseXcbuild is no longer needed. If you just need to call xcbuild on its own you can just refer to xcbuild. --- pkgs/development/tools/xcbuild/setup-hook.sh | 8 +++----- .../apple-source-releases/PowerManagement/default.nix | 5 +++-- .../apple-source-releases/SmartCardServices/default.nix | 5 +++-- .../darwin/apple-source-releases/adv_cmds/xcode.nix | 4 ++-- .../darwin/apple-source-releases/basic_cmds/default.nix | 4 ++-- .../apple-source-releases/developer_cmds/default.nix | 4 ++-- .../darwin/apple-source-releases/diskdev_cmds/default.nix | 6 ++++-- .../darwin/apple-source-releases/dtrace/xcode.nix | 6 ++++-- .../darwin/apple-source-releases/file_cmds/default.nix | 5 +++-- .../darwin/apple-source-releases/libutil/new.nix | 4 ++-- .../darwin/apple-source-releases/network_cmds/default.nix | 6 ++++-- .../security_systemkeychain/default.nix | 5 +++-- .../darwin/apple-source-releases/shell_cmds/default.nix | 4 ++-- .../darwin/apple-source-releases/text_cmds/default.nix | 5 +++-- .../darwin/apple-source-releases/top/default.nix | 5 +++-- pkgs/os-specific/darwin/insert_dylib/default.nix | 4 ++-- pkgs/tools/misc/contacts/default.nix | 5 +++-- pkgs/tools/security/pinentry/mac.nix | 5 +++-- pkgs/top-level/all-packages.nix | 3 +++ 19 files changed, 54 insertions(+), 39 deletions(-) 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/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 a2f78782e6ab..ac92e8d2b625 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8607,6 +8607,9 @@ with pkgs; inherit (darwin.apple_sdk.frameworks) CoreServices CoreGraphics ImageIO; stdenv = buildPackages.clangStdenv; }; + xcbuildHook = makeSetupHook { + deps = [ xcbuild ]; + } ../development/tools/xcbuild/setup-hook.sh ; xmlindent = callPackage ../development/web/xmlindent {}; From 2621171e58549ccc7d2b5230ebca024ee14d7f5a Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Fri, 6 Jul 2018 23:51:28 -0400 Subject: [PATCH 3/3] xcbuild: add alias You can now refer to it as xcodebuild. This is meant to be more discoverable for not familiar with xcbuild. xcodebuild should work in the same way as the xcodebuild that comes with Xcode.app, but it is built entirely with free software. --- pkgs/top-level/all-packages.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ac92e8d2b625..a75f6e5ce14f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8603,10 +8603,11 @@ 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 ;