diff options
author | Timothy DeHerrera <tim.deh@pm.me> | 2022-10-09 10:24:35 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-09 10:24:35 -0600 |
commit | 4a0123e49eb75863f2ca5570e696bf9b61674c72 (patch) | |
tree | 1dec9cc3cba1aacf8d30a82169f4deddceccc594 /pkgs | |
parent | c0972c16dcbdce1b7505751e1ce537142071bb15 (diff) | |
parent | ae28acabb0884a1f46b4b741a8f51e303b75042d (diff) |
Merge pull request #194833 from nrdxp/pyqt6-webengine-new
pyqt6-webengine: init
Diffstat (limited to 'pkgs')
9 files changed, 173 insertions, 61 deletions
diff --git a/pkgs/applications/networking/browsers/qutebrowser/default.nix b/pkgs/applications/networking/browsers/qutebrowser/default.nix index ce2392ab4edca..a3f5b32369730 100644 --- a/pkgs/applications/networking/browsers/qutebrowser/default.nix +++ b/pkgs/applications/networking/browsers/qutebrowser/default.nix @@ -1,5 +1,5 @@ -{ stdenv, lib, fetchurl, fetchzip, python3 -, mkDerivationWith, wrapQtAppsHook, wrapGAppsHook, qtbase, qtwebengine, glib-networking +{ stdenv, lib, fetchurl, fetchzip, fetchFromGitHub, python3 +, wrapQtAppsHook, glib-networking , asciidoc, docbook_xml_dtd_45, docbook_xsl, libxml2 , libxslt, gst_all_1 ? null , withPdfReader ? true @@ -7,35 +7,56 @@ , backend ? "webengine" , pipewireSupport ? stdenv.isLinux , pipewire_0_2 -}: +, qtwayland +, mkDerivationWith ? null +, qtbase ? null +, qtwebengine ? null +, wrapGAppsHook ? null +}: let + isQt6 = mkDerivationWith == null; -assert withMediaPlayback -> gst_all_1 != null; - -let python3Packages = python3.pkgs; pdfjs = let version = "2.14.305"; in - fetchzip rec { + fetchzip { url = "https://github.com/mozilla/pdf.js/releases/download/v${version}/pdfjs-${version}-dist.zip"; hash = "sha256-E7t+0AUndrgi4zfJth0w28RmWLqLyXMUCnueNf/gNi4="; stripRoot = false; }; backendPackage = - if backend == "webengine" then python3Packages.pyqtwebengine else + if backend == "webengine" then if isQt6 then python3Packages.pyqt6-webengine else python3Packages.pyqtwebengine else if backend == "webkit" then python3Packages.pyqt5_with_qtwebkit else throw '' Unknown qutebrowser backend "${backend}". Valid choices are qtwebengine (recommended) or qtwebkit. ''; -in mkDerivationWith python3Packages.buildPythonApplication rec { + buildPythonApplication = if isQt6 then python3Packages.buildPythonApplication else mkDerivationWith python3Packages.buildPythonApplication; + pname = "qutebrowser"; - version = "2.5.2"; + version = if isQt6 then "unstable-2022-09-16" else "2.5.2"; +in + +assert withMediaPlayback -> gst_all_1 != null; +assert isQt6 -> backend != "webkit"; + +buildPythonApplication { + inherit pname version; + + src = if isQt6 then + # comes from qt6-v2 branch of upstream + # https://github.com/qutebrowser/qutebrowser/issues/7202 + fetchFromGitHub { + owner = "qutebrowser"; + repo = "qutebrowser"; + rev = "5e11e6c7d413cf5c77056ba871a545aae1cfd66a"; + sha256 = "sha256-5HNzPO07lUQe/Q3Nb4JiS9kb9GMQ5/FqM5029vLNNWo="; + } # the release tarballs are different from the git checkout! - src = fetchurl { + else fetchurl { url = "https://github.com/qutebrowser/qutebrowser/releases/download/v${version}/${pname}-${version}.tar.gz"; hash = "sha256-qb/OFN3EA94N6y7t+YPCMc4APgdZmV7H706jTkl06Qg="; }; @@ -66,6 +87,7 @@ in mkDerivationWith python3Packages.buildPythonApplication rec { adblock ] ++ lib.optional (pythonOlder "3.9") importlib-resources + ++ lib.optional stdenv.isLinux qtwayland ); patches = [ @@ -94,14 +116,15 @@ in mkDerivationWith python3Packages.buildPythonApplication rec { # Install icons for i in 16 24 32 48 64 128 256 512; do - install -Dm644 "icons/qutebrowser-''${i}x''${i}.png" \ + install -Dm644 "qutebrowser/icons/qutebrowser-''${i}x''${i}.png" \ "$out/share/icons/hicolor/''${i}x''${i}/apps/qutebrowser.png" done - install -Dm644 icons/qutebrowser.svg \ + install -Dm644 ${if isQt6 then "qutebrowser/" else ""}icons/qutebrowser.svg \ "$out/share/icons/hicolor/scalable/apps/qutebrowser.svg" # Install scripts sed -i "s,/usr/bin/,$out/bin/,g" scripts/open_url_in_instance.sh + ${if isQt6 then "rm -rf scripts/{testbrowser,dev}" else ""} install -Dm755 -t "$out/share/qutebrowser/scripts/" $(find scripts -type f) install -Dm755 -t "$out/share/qutebrowser/userscripts/" misc/userscripts/* diff --git a/pkgs/development/libraries/qt-6/modules/qtwebengine.nix b/pkgs/development/libraries/qt-6/modules/qtwebengine.nix index e4b56e7e7664b..c365f3c068532 100644 --- a/pkgs/development/libraries/qt-6/modules/qtwebengine.nix +++ b/pkgs/development/libraries/qt-6/modules/qtwebengine.nix @@ -69,7 +69,7 @@ , enableProprietaryCodecs ? true }: -qtModule rec { +qtModule { pname = "qtwebengine"; qtInputs = [ qtdeclarative qtwebchannel qtwebsockets qtpositioning ]; nativeBuildInputs = [ @@ -94,6 +94,12 @@ qtModule rec { # which cannot be set at the same time as -Wformat-security hardeningDisable = [ "format" ]; + patches = [ + # fixes consistent crashing in github on 6.4.0, can probably remove when there is a patch release + # https://codereview.qt-project.org/c/qt/qtwebengine/+/436316 + ../patches/qtwebengine-fix.patch + ]; + postPatch = '' # Patch Chromium build tools ( diff --git a/pkgs/development/libraries/qt-6/patches/qtwebengine-fix.patch b/pkgs/development/libraries/qt-6/patches/qtwebengine-fix.patch new file mode 100644 index 0000000000000..672421ed43d46 --- /dev/null +++ b/pkgs/development/libraries/qt-6/patches/qtwebengine-fix.patch @@ -0,0 +1,28 @@ +From 81bf140583f7b7bf13cc8dd522e1ca2aba873fc4 Mon Sep 17 00:00:00 2001 +From: Martin Negyokru <negyokru@inf.u-szeged.hu> +Date: Mon, 03 Oct 2022 12:20:00 +0200 +Subject: [PATCH] Do not intercept websocket connection when there is no associated frame + +This fix is based on chrome's implementation. + +Fixes: QTBUG-107144 +Change-Id: If042e4156b8a4bdb27a210c4db94e3a6198aed7d +Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> +(cherry picked from commit 64b7da9dab82713fdcb2e03d8a2715421eae5685) +Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> +--- + +diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp +index 020ae91..99a3aa3 100644 +--- a/src/core/content_browser_client_qt.cpp ++++ b/src/core/content_browser_client_qt.cpp +@@ -1237,8 +1237,7 @@ + + bool ContentBrowserClientQt::WillInterceptWebSocket(content::RenderFrameHost *frame) + { +- Q_UNUSED(frame); +- return true; // It is probably not worth it to only intercept when interceptors are installed ++ return frame != nullptr; + } + + QWebEngineUrlRequestInterceptor *getProfileInterceptorFromFrame(content::RenderFrameHost *frame) diff --git a/pkgs/development/python-modules/pyqt-builder/default.nix b/pkgs/development/python-modules/pyqt-builder/default.nix index 5e87e700a55f6..1aef6e13d2c75 100644 --- a/pkgs/development/python-modules/pyqt-builder/default.nix +++ b/pkgs/development/python-modules/pyqt-builder/default.nix @@ -2,20 +2,14 @@ buildPythonPackage rec { pname = "pyqt-builder"; - version = "1.13.0"; + version = "1.14.0"; src = fetchPypi { pname = "PyQt-builder"; inherit version; - sha256 = "sha256-SHdYDDjOtTIOEps4HQg7CoYBxoFm2LmXB/CPoKFonu8="; + sha256 = "sha256-Z1WTHG0viUBVPgM00QyTPOXMGLZEJelP2hrM9P93T1k="; }; - patches = [ - # use the sip-distinfo executable from PATH instead of trying to guess, - # we know it's the right one because it's the _only_ one - ./use-sip-distinfo-from-path.patch - ]; - propagatedBuildInputs = [ packaging sip ]; pythonImportsCheck = [ "pyqtbuild" ]; @@ -27,6 +21,6 @@ buildPythonPackage rec { description = "PEP 517 compliant build system for PyQt"; homepage = "https://pypi.org/project/PyQt-builder/"; license = licenses.gpl3Only; - maintainers = with maintainers; [ ]; + maintainers = with maintainers; [ nrdxp ]; }; } diff --git a/pkgs/development/python-modules/pyqt6-webengine.nix b/pkgs/development/python-modules/pyqt6-webengine.nix new file mode 100644 index 0000000000000..96fa057a47cae --- /dev/null +++ b/pkgs/development/python-modules/pyqt6-webengine.nix @@ -0,0 +1,89 @@ +{ lib +, buildPythonPackage +, fetchPypi +, pkg-config +, lndir +, sip +, pyqt-builder +, qt6Packages +, pythonOlder +, pyqt6 +, python +}: + +buildPythonPackage rec { + pname = "PyQt6_WebEngine"; + version = "6.4.0"; + format = "pyproject"; + + disabled = pythonOlder "3.6"; + + src = fetchPypi { + inherit pname version; + sha256 = "sha256-THHBMIYKvNEeBMr7IuM5g/qaOu6DI8UZCbFaFwGCjiE="; + }; + + # fix include path and increase verbosity + postPatch = '' + sed -i \ + '/\[tool.sip.project\]/a\ + verbose = true\ + sip-include-dirs = [\"${pyqt6}/${python.sitePackages}/PyQt6/bindings\"]' \ + pyproject.toml + ''; + + enableParallelBuilding = true; + # HACK: paralellize compilation of make calls within pyqt's setup.py + # pkgs/stdenv/generic/setup.sh doesn't set this for us because + # make gets called by python code and not its build phase + # format=pyproject means the pip-build-hook hook gets used to build this project + # pkgs/development/interpreters/python/hooks/pip-build-hook.sh + # does not use the enableParallelBuilding flag + postUnpack = '' + export MAKEFLAGS+=" -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES" + ''; + + outputs = [ "out" "dev" ]; + + dontWrapQtApps = true; + + nativeBuildInputs = with qt6Packages; [ + pkg-config + lndir + sip + qtwebengine + qmake + pyqt-builder + ]; + + buildInputs = with qt6Packages; [ + qtwebengine + ]; + + propagatedBuildInputs = [ + pyqt6 + ]; + + passthru = { + inherit sip; + }; + + dontConfigure = true; + + # Checked using pythonImportsCheck, has no tests + doCheck = true; + + pythonImportsCheck = [ + "PyQt6.QtWebEngineCore" + "PyQt6.QtWebEngineQuick" + "PyQt6.QtWebEngineWidgets" + ]; + + meta = with lib; { + description = "Python bindings for Qt6 WebEngine"; + homepage = "https://riverbankcomputing.com/"; + license = licenses.gpl3Only; + platforms = platforms.mesaPlatforms; + maintainers = with maintainers; [ LunNova nrdxp ]; + }; +} diff --git a/pkgs/development/python-modules/sip/default.nix b/pkgs/development/python-modules/sip/default.nix index 68052145766c3..ab2701fefdc33 100644 --- a/pkgs/development/python-modules/sip/default.nix +++ b/pkgs/development/python-modules/sip/default.nix @@ -2,35 +2,19 @@ buildPythonPackage rec { pname = "sip"; - version = "6.6.2"; + version = "6.7.1"; src = fetchPypi { pname = "sip"; inherit version; - sha256 = "sha256-Dj76wcXf2OUlrlcUCSffJpk+E/WLidFXfDFPQQW/2Q0="; + sha256 = "sha256-KBcP34gPk3Am/If6qcF3sGLDU8XRaeoyQrB4AmFN3Qw="; }; - patches = [ - # on non-x86 Linux platforms, sip incorrectly detects the manylinux version - # and PIP will refuse to install the resulting wheel. - # remove once upstream fixes this, hopefully in 6.5.2 - ./fix-manylinux-version.patch - - # fix issue triggered by QGIS 3.26.x, already fixed upstream - # in SIP, waiting for release past 6.6.2 - (fetchpatch { - url = "https://riverbankcomputing.com/hg/sip/raw-diff/323d39a2d602/sipbuild/generator/parser/instantiations.py"; - hash = "sha256-QEQuRzXA+wK9Dt22U/LgIwtherY9pJURGJYpKpJkiok="; - }) - ]; - propagatedBuildInputs = [ packaging ply toml ]; # There aren't tests doCheck = false; - pythonImportsCheck = [ "sipbuild" ]; - # FIXME: Why isn't this detected automatically? # Needs to be specified in pyproject.toml, e.g.: # [tool.sip.bindings.MODULE] @@ -45,10 +29,12 @@ buildPythonPackage rec { else throw "unsupported platform"; + pythonImportsCheck = [ "sipbuild" ]; + meta = with lib; { description = "Creates C++ bindings for Python modules"; homepage = "https://riverbankcomputing.com/"; license = licenses.gpl3Only; - maintainers = with maintainers; [ ]; + maintainers = with maintainers; [ nrdxp ]; }; } diff --git a/pkgs/development/python-modules/sip/fix-manylinux-version.patch b/pkgs/development/python-modules/sip/fix-manylinux-version.patch deleted file mode 100644 index 4b8e99ae8e472..0000000000000 --- a/pkgs/development/python-modules/sip/fix-manylinux-version.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/sipbuild/project.py b/sipbuild/project.py ---- a/sipbuild/project.py -+++ b/sipbuild/project.py -@@ -336,13 +336,13 @@ class Project(AbstractProject, Configurable): - # We expect a two part tag so leave anything else unchanged. - parts = platform_tag.split('-') - if len(parts) == 2: -- if self.minimum_glibc_version > (2, 17): -+ if self.minimum_glibc_version > (2, 17) or parts[1] not in {"x86_64", "i686", "aarch64", "armv7l", "ppc64", "ppc64le", "s390x"}: - # PEP 600. - parts[0] = 'manylinux' - parts.insert(1, - '{}.{}'.format(self.minimum_glibc_version[0], - self.minimum_glibc_version[1])) -- elif self.minimum_glibc_version > (2, 12): -+ elif self.minimum_glibc_version > (2, 12) or parts[1] not in {"x86_64", "i686"}: - # PEP 599. - parts[0] = 'manylinux2014' - elif self.minimum_glibc_version > (2, 5): diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0586a6575fd18..383eba56b826b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -31104,6 +31104,9 @@ with pkgs; }; qutebrowser = libsForQt5.callPackage ../applications/networking/browsers/qutebrowser { }; + qutebrowser-qt6 = callPackage ../applications/networking/browsers/qutebrowser { + inherit (qt6Packages) qtbase qtwebengine wrapQtAppsHook qtwayland; + }; qxw = callPackage ../applications/editors/qxw {}; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 004fb9827c369..a0780fa249d1a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8421,6 +8421,8 @@ in { pyqt6-sip = callPackage ../development/python-modules/pyqt/pyqt6-sip.nix { }; + pyqt6-webengine = callPackage ../development/python-modules/pyqt6-webengine.nix { }; + pyqtgraph = callPackage ../development/python-modules/pyqtgraph { }; pyqtwebengine = pkgs.libsForQt5.callPackage ../development/python-modules/pyqtwebengine { |