about summary refs log tree commit diff
path: root/pkgs/development/tools/xcbuild/wrapper.nix
blob: cfa855e23cd81bd194d25f897626c21dfebb1789 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
{ stdenv, buildPackages, makeWrapper, writeText, runCommand
, CoreServices, ImageIO, CoreGraphics }:

let

  toolchainName = "com.apple.dt.toolchain.XcodeDefault";
  platformName = "com.apple.platform.macosx";
  sdkName = "macosx10.10";

  xcbuild = buildPackages.callPackage ./default.nix {
    inherit CoreServices ImageIO CoreGraphics;
  };

  toolchain = buildPackages.callPackage ./toolchain.nix {
    inherit toolchainName;
  };

  sdk = buildPackages.callPackage ./sdk.nix {
    inherit toolchainName sdkName;
  };

  platform = buildPackages.callPackage ./platform.nix {
    inherit sdk platformName;
  };

  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}
  '';

  inherit (xcbuild) meta;

  passthru = {
    raw = xcbuild;
  };

  preferLocalBuild = true;
}