From ec632b745fb72e5070983dd3dff78ed81466243d Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Tue, 24 Apr 2018 23:18:35 -0500 Subject: 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.) --- pkgs/development/libraries/qt-5/mkDerivation.nix | 5 +- .../libraries/qt-5/modules/qtwebengine.nix | 95 ++++++++++++++++++---- 2 files changed, 82 insertions(+), 18 deletions(-) (limited to 'pkgs/development/libraries/qt-5') diff --git a/pkgs/development/libraries/qt-5/mkDerivation.nix b/pkgs/development/libraries/qt-5/mkDerivation.nix index 739c9b4a1608..96014cfbc779 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 08345510d787..e798d529ce1b 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*" "NSArray*" + substituteInPlace src/3rdparty/chromium/base/mac/sdk_forward_declarations.h \ + --replace "NSDictionary*" "NSDictionary*" \ + --replace "NSArray*" "NSArray*" \ + --replace "typedef NSString* VNImageOption NS_STRING_ENUM" "typedef NSString* VNImageOption" + + cat < src/3rdparty/chromium/build/mac/find_sdk.py +#!/usr/bin/env python +print("10.10.0") +print("") +EOF + + cat < 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 <