summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/gn/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/tools/build-managers/gn/default.nix')
-rw-r--r--pkgs/development/tools/build-managers/gn/default.nix164
1 files changed, 111 insertions, 53 deletions
diff --git a/pkgs/development/tools/build-managers/gn/default.nix b/pkgs/development/tools/build-managers/gn/default.nix
index 5e7dd5214a04..35f54369abd9 100644
--- a/pkgs/development/tools/build-managers/gn/default.nix
+++ b/pkgs/development/tools/build-managers/gn/default.nix
@@ -1,77 +1,135 @@
-{ stdenv, lib, fetchgit, fetchurl, libevent, ninja, python }:
+{ stdenv, lib, fetchgit, fetchzip, fetchpatch
+, libevent, ninja, python, darwin }:
 
 let
   depsGit = {
     "tools/gn" = fetchgit {
       url = "https://chromium.googlesource.com/chromium/src/tools/gn";
-      rev = "d0c518db129975ce88ff1de26c857873b0619c4b";
-      sha256 = "0l15vzmjyx6bwlz1qhn3fy7yx3qzzxr3drnkj3l0p0fmyxza52vx";
+      rev = "0fa417a0d2d8484e9a5a636e3301da322f586601";
+      sha256 = "0pigcl14yc4aak6q1ghfjxdz2ah4fg4m2r5y3asw2rz6mpr5y9z0";
     };
     "base" = fetchgit {
       url = "https://chromium.googlesource.com/chromium/src/base";
-      rev = "bc6e3ce8ca01b894751e1f7b22b561e3ae2e7f17";
-      sha256 = "1yl49v6nxbrfms52xf7fiwh7d4301m2aj744pa3hzzh989c5j6g5";
+      rev = "ab1d7c3b92ce9c9bc756bdefb8338360d1a33a1e";
+      sha256 = "15wis6qg9ka62k6v1vamg0bp3v5vkpapg485jsn4bbfcaqp6di0f";
     };
     "build" = fetchgit {
       url = "https://chromium.googlesource.com/chromium/src/build";
-      rev = "e934a19ae908081fba13769924e4ea45a7a451ce";
-      sha256 = "0jhy418vaiin7djg9zvk83f8zhasigki4442x5j7gkmgmgmyc4am";
+      rev = "8d44c08a4c9997695db8098198bdd5026bc7a6f9";
+      sha256 = "19sajgf55xfmvnwvy2ss7g6pyljp751cfsws30w415m6m00lmpxl";
     };
     "config" = fetchgit {
       url = "https://chromium.googlesource.com/chromium/src/build/config";
-      rev = "df16c6a2c070704b0a25efe46ee9af16de1e65b3";
-      sha256 = "1x18syzz1scwhd8lf448hy5lnfpq118l403x9qmwm0np318w09wg";
+      rev = "14116c0cdcb9e28995ca8bb384a12e5c9dbd1dbb";
+      sha256 = "04nif0lm4wcy05b7xhal023874s4r0iq067q57cgwdm72i2gml40";
     };
     "testing/gtest" = fetchgit {
       url = "https://chromium.googlesource.com/chromium/testing/gtest";
       rev = "585ec31ea716f08233a815e680fc0d4699843938";
       sha256 = "0csn1cza66851nmxxiw42smsm3422mx67vcyykwn0a71lcjng6rc";
     };
+    "third_party/apple_apsl" = fetchzip {
+      url = "https://chromium.googlesource.com/chromium/src/third_party/+archive/8e6ccb8c74db6dfa15dd21401ace3ac96c054cf7/apple_apsl.tar.gz";
+      sha256 = "1vgcg741lwz84kdy0qc5wn9dxx3j9zh6a9d185fpygdsipwikqv8";
+      stripRoot = false;
+    };
+    "buildtools/third_party/libc++/trunk" = fetchgit {
+      url = "https://chromium.googlesource.com/chromium/llvm-project/libcxx";
+      rev = "ece1de8658d749e19c12cacd4458cc330eca94e3";
+      sha256 = "1nlyvfkzhchwv9b18bh82jcamqv3acj26ah9ajs31f2dql05amhg";
+    };
+    "buildtools/third_party/libc++abi/trunk" = fetchgit {
+      url = "https://chromium.googlesource.com/chromium/llvm-project/libcxxabi";
+      rev = "52c7a3760aef1df328a9bc957f686410872f0dc0";
+      sha256 = "1aam539j01381q27b7xhij18pz3h0lhw08hglvqq4hgvlqx5cn2s";
+    };
   };
 
-in
-  stdenv.mkDerivation rec {
-    name = "gn";
-    version = "0.0.0.20170629";
-    sourceRoot = ".";
+in stdenv.mkDerivation {
+  name = "gn";
+  version = "20180423";
+  sourceRoot = ".";
 
-    unpackPhase = ''
-      ${lib.concatStringsSep "\n" (
-        lib.mapAttrsToList (n: v: ''
-          mkdir -p $sourceRoot/${n}
+  unpackPhase = ''
+    ${lib.concatStringsSep "\n" (
+      lib.mapAttrsToList (n: v: ''
+        mkdir -p $sourceRoot/${n}
+        if [ -d ${v} ]; then
           cp -r ${v}/* $sourceRoot/${n}
-        '') depsGit)}
-    '';
-
-    postPatch = ''
-      # Patch shebands (for sandbox build)
-      chmod u+w -R build
-      patchShebangs build
-
-      # Patch out Chromium-bundled libevent
-      chmod u+w tools/gn/bootstrap tools/gn/bootstrap/bootstrap.py
-      sed -i -e '/static_libraries.*libevent/,/^ *\]\?[})]$/d' \
-          tools/gn/bootstrap/bootstrap.py
-    '';
-
-    NIX_LDFLAGS = "-levent";
-
-    nativeBuildInputs = [ ninja python ];
-    buildInputs = [ libevent ];
-
-    buildPhase = ''
-      python tools/gn/bootstrap/bootstrap.py -s
-    '';
-
-    installPhase = ''
-      install -vD out/Release/gn "$out/bin/gn"
-    '';
-
-    meta = with stdenv.lib; {
-      description = "A meta-build system that generates NinjaBuild files";
-      homepage = https://chromium.googlesource.com/chromium/src/tools/gn;
-      license = licenses.bsd3;
-      platforms = platforms.linux;
-      maintainers = [ maintainers.stesie ];
-    };
-  }
+        else
+          mkdir -p $sourceRoot/${n}
+          pushd $sourceRoot/${n}
+          unpackFile ${v}
+          popd
+        fi
+      '') depsGit)}
+
+    chmod u+w -R $sourceRoot
+  '';
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/Eloston/ungoogled-chromium/master/resources/patches/ungoogled-chromium/macos/fix-gn-bootstrap.patch";
+      sha256 = "1h8jgxznm7zrxlzb4wcfx4zx4lyvfrmpd0r7cd7h0s23wn8ibb3a";
+    })
+  ];
+
+  postPatch = ''
+    # Disable libevent bootstrapping (we will provide it).
+    sed -i -e '/static_libraries.*libevent/,/^ *\]\?[})]$/d' \
+      tools/gn/bootstrap/bootstrap.py
+
+    # FIXME Needed with old Apple SDKs
+    substituteInPlace base/mac/foundation_util.mm \
+      --replace "NSArray<NSString*>*" "NSArray*"
+    substituteInPlace base/mac/sdk_forward_declarations.h \
+      --replace "NSDictionary<VNImageOption, id>*" "NSDictionary*" \
+      --replace "NSArray<VNRequest*>*" "NSArray*" \
+      --replace "typedef NSString* VNImageOption NS_STRING_ENUM" "typedef NSString* VNImageOption"
+
+    # Patch shebangs (for sandbox build)
+    patchShebangs build
+  '';
+
+  # FIXME again this shouldn't be necessary but I can't figure out a better way
+  NIX_CFLAGS_COMPILE = "-DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_10 -DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_10";
+
+  NIX_LDFLAGS = "-levent";
+
+  nativeBuildInputs = [ ninja python ];
+  buildInputs = [ libevent ]
+
+  # FIXME These dependencies shouldn't be needed but can't find a way
+  # around it. Chromium pulls this in while bootstrapping GN.
+  ++ lib.optionals stdenv.isDarwin (with darwin; with apple_sdk.frameworks; [
+    libobjc
+    cctools
+
+    # frameworks
+    ApplicationServices
+    Foundation
+    AppKit
+    ImageCaptureCore
+    CoreBluetooth
+    IOBluetooth
+    CoreWLAN
+    Quartz
+    Cocoa
+  ]);
+
+  buildPhase = ''
+    python tools/gn/bootstrap/bootstrap.py -s
+  '';
+
+  installPhase = ''
+    install -vD out/Release/gn "$out/bin/gn"
+  '';
+
+  meta = with lib; {
+    description = "A meta-build system that generates NinjaBuild files";
+    homepage = https://chromium.googlesource.com/chromium/src/tools/gn;
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ stesie matthewbauer ];
+  };
+}