about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix')
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix135
1 files changed, 135 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix b/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
new file mode 100644
index 000000000000..959c79405e86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
@@ -0,0 +1,135 @@
+{ stdenv, lib, buildPackages, makeWrapper, writeText, runCommand
+, CoreServices, ImageIO, CoreGraphics
+, runtimeShell
+, xcodePlatform ? stdenv.targetPlatform.xcodePlatform or "MacOSX"
+, xcodeVer ? stdenv.targetPlatform.xcodeVer or "9.4.1"
+, sdkVer ? stdenv.targetPlatform.sdkVer or "10.10" }:
+
+let
+
+  toolchainName = "com.apple.dt.toolchain.XcodeDefault";
+  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;
+  };
+
+  toolchains = buildPackages.callPackage ./toolchains.nix {
+    inherit toolchainName;
+  };
+
+  sdks = buildPackages.callPackage ./sdks.nix {
+    inherit toolchainName sdkName xcodePlatform;
+    version = sdkVer;
+  };
+
+  platforms = buildPackages.callPackage ./platforms.nix {
+    inherit sdks xcodePlatform;
+  };
+
+  xcconfig = writeText "nix.xcconfig" ''
+    SDKROOT=${sdkName}
+  '';
+
+  xcode-select = writeText "xcode-select" ''
+#!${runtimeShell}
+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 | --print-path) echo @DEVELOPER_DIR@ ;;
+         --install) ;; # noop
+    esac
+    shift
+done
+  '';
+
+  xcrun = writeText "xcrun" ''
+#!${runtimeShell}
+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;
+
+  # ensure that the toolchain goes in PATH
+  propagatedBuildInputs = [ "${toolchains}/XcodeDefault.xctoolchain" ];
+
+  passthru = {
+    inherit xcbuild;
+    toolchain = "${toolchains}/XcodeDefault.xctoolchain";
+    sdk = "${sdks}/${sdkName}";
+    platform = "${platforms}/${xcodePlatform}.platform";
+  };
+
+  preferLocalBuild = true;
+} ''
+  mkdir -p $out/bin
+
+  ln -s $out $out/usr
+
+  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" ] && [ "$#" -eq 1 ] && (echo Xcode ${xcodeVer}; echo Build version ${sdkBuildVersion}) && exit 0' \
+    --run '[ "$1" = "-license" ] && 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
+''