summary refs log tree commit diff
path: root/pkgs/development/libraries
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2018-04-24 23:18:35 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2018-04-24 23:57:46 -0500
commitec632b745fb72e5070983dd3dff78ed81466243d (patch)
treea5c8d6c2e74538cc771344a977760f8d6cf67eeb /pkgs/development/libraries
parentb87cb29d1be6a7729199aa33a5f0e5fd5f9801ef (diff)
downloadnixpkgs-ec632b745fb72e5070983dd3dff78ed81466243d.tar
nixpkgs-ec632b745fb72e5070983dd3dff78ed81466243d.tar.gz
nixpkgs-ec632b745fb72e5070983dd3dff78ed81466243d.tar.bz2
nixpkgs-ec632b745fb72e5070983dd3dff78ed81466243d.tar.lz
nixpkgs-ec632b745fb72e5070983dd3dff78ed81466243d.tar.xz
nixpkgs-ec632b745fb72e5070983dd3dff78ed81466243d.tar.zst
nixpkgs-ec632b745fb72e5070983dd3dff78ed81466243d.zip
qtwebengine: rewrite
Fixes #39334
and Fixes #36729

Also, Fixes #36932 (hopefully it's still building)

(This might be able to be able to be cherry-picked to 18.03 but be
careful - chromium is extremely touchy. Probably best to wait for it
to be built successfully on Hydra a few times.)
Diffstat (limited to 'pkgs/development/libraries')
-rw-r--r--pkgs/development/libraries/qt-5/mkDerivation.nix5
-rw-r--r--pkgs/development/libraries/qt-5/modules/qtwebengine.nix95
2 files changed, 82 insertions, 18 deletions
diff --git a/pkgs/development/libraries/qt-5/mkDerivation.nix b/pkgs/development/libraries/qt-5/mkDerivation.nix
index 739c9b4a160..96014cfbc77 100644
--- a/pkgs/development/libraries/qt-5/mkDerivation.nix
+++ b/pkgs/development/libraries/qt-5/mkDerivation.nix
@@ -9,9 +9,8 @@ args:
 let
   args_ = {
 
-    qmakeFlags =
-      (args.qmakeFlags or [])
-      ++ [ ("CONFIG+=" + (if debug then "debug" else "release")) ];
+    qmakeFlags = [ ("CONFIG+=" + (if debug then "debug" else "release")) ]
+              ++ (args.qmakeFlags or []);
 
     NIX_CFLAGS_COMPILE =
       optional (!debug) "-DQT_NO_DEBUG"
diff --git a/pkgs/development/libraries/qt-5/modules/qtwebengine.nix b/pkgs/development/libraries/qt-5/modules/qtwebengine.nix
index 08345510d78..e798d529ce1 100644
--- a/pkgs/development/libraries/qt-5/modules/qtwebengine.nix
+++ b/pkgs/development/libraries/qt-5/modules/qtwebengine.nix
@@ -11,9 +11,8 @@
 , libcap
 , pciutils
 , systemd
-
 , enableProprietaryCodecs ? true
-
+, gn, darwin, openbsm
 , lib, stdenv # lib.optional, needsPax
 }:
 
@@ -25,7 +24,7 @@ qtModule {
   name = "qtwebengine";
   qtInputs = [ qtdeclarative qtquickcontrols qtlocation qtwebchannel ];
   nativeBuildInputs = [
-    bison coreutils flex git gperf ninja pkgconfig python2 which
+    bison coreutils flex git gperf ninja pkgconfig python2 which gn
   ];
   doCheck = true;
   outputs = [ "bin" "dev" "out" ];
@@ -61,8 +60,50 @@ qtModule {
 
       sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \
         src/3rdparty/chromium/gpu/config/gpu_info_collector_linux.cc
+    ''
+    + optionalString stdenv.isDarwin ''
+      # Remove annoying xcode check
+      substituteInPlace mkspecs/features/platform.prf \
+        --replace "lessThan(QMAKE_XCODE_VERSION, 7.3)" false
+      substituteInPlace src/core/config/mac_osx.pri \
+        --replace /usr ${stdenv.cc} \
+        --replace "isEmpty(QMAKE_MAC_SDK_VERSION)" false
+
+    # FIXME Needed with old Apple SDKs
+    # Abandon all hope ye who try to make sense of this.
+    substituteInPlace src/3rdparty/chromium/base/mac/foundation_util.mm \
+      --replace "NSArray<NSString*>*" "NSArray*"
+    substituteInPlace src/3rdparty/chromium/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"
+
+    cat <<EOF > src/3rdparty/chromium/build/mac/find_sdk.py
+#!/usr/bin/env python
+print("10.10.0")
+print("")
+EOF
+
+    cat <<EOF > src/3rdparty/chromium/build/config/mac/sdk_info.py
+#!/usr/bin/env python
+print('xcode_version="9.1"')
+print('xcode_version_int=9')
+print('xcode_build="9B55"')
+print('machine_os_build="17E199"')
+print('sdk_path=""')
+print('sdk_version="10.10"')
+print('sdk_platform_path=""')
+print('sdk_build="17B41"')
+EOF
+
+    # Apple has some secret stuff they don't share with OpenBSM
+    substituteInPlace src/3rdparty/chromium/base/mac/mach_port_broker.mm \
+      --replace "audit_token_to_pid(msg.trailer.msgh_audit)" "msg.trailer.msgh_audit.val[5]"
+    substituteInPlace src/3rdparty/chromium/sandbox/mac/bootstrap_sandbox.cc \
+      --replace "audit_token_to_pid(msg.trailer.msgh_audit)" "msg.trailer.msgh_audit.val[5]"
     '';
 
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_10 -DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_10";
 
   preConfigure = ''
     export NINJAFLAGS=-j$NIX_BUILD_CORES
@@ -70,13 +111,9 @@ qtModule {
     if [ -d "$PWD/tools/qmake" ]; then
         QMAKEPATH="$PWD/tools/qmake''${QMAKEPATH:+:}$QMAKEPATH"
     fi
- '';
+   '';
 
-  qmakeFlags =
-    [
-      # Use system Ninja because bootstrapping it is fragile
-      "WEBENGINE_CONFIG+=use_system_ninja"
-    ] ++ optional enableProprietaryCodecs "WEBENGINE_CONFIG+=use_proprietary_codecs";
+  qmakeFlags = optional enableProprietaryCodecs "-- -proprietary-codecs";
 
   propagatedBuildInputs = [
     # Image formats
@@ -90,9 +127,10 @@ qtModule {
 
     # Text rendering
     harfbuzz icu
-  ]
-  ++ optionals (!stdenv.isDarwin) [
-    dbus zlib minizip snappy nss protobuf jsoncpp libevent
+
+    libevent
+  ] ++ optionals (!stdenv.isDarwin) [
+    dbus zlib minizip snappy nss protobuf jsoncpp
 
     # Audio formats
     alsaLib
@@ -106,17 +144,44 @@ qtModule {
     # X11 libs
     xorg.xrandr libXScrnSaver libXcursor libXrandr xorg.libpciaccess libXtst
     xorg.libXcomposite xorg.libXdamage libdrm
-  ];
+  ]
+
+  # 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
+
+    openbsm
+    libunwind
+  ]);
 
   dontUseNinjaBuild = true;
   dontUseNinjaInstall = true;
 
-  postInstall = ''
+  postInstall = lib.optionalString stdenv.isLinux ''
     cat > $out/libexec/qt.conf <<EOF
     [Paths]
     Prefix = ..
     EOF
-
     paxmark m $out/libexec/QtWebEngineProcess
   '';
+
+  meta = with lib; {
+    description = "A web engine based on the Chromium web browser";
+    maintainers = with maintainers; [ matthewbauer ];
+    platforms = platforms.unix;
+  };
+
 }