1
0
forked from pool/qt6-webengine
Christophe Giboudeaux 2021-10-01 21:13:35 +00:00 committed by Git OBS Bridge
commit 5957a3226b
16 changed files with 1052 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

View File

@ -0,0 +1,48 @@
From 130089f928db6d8ae6a49b27abc774c7e669cee0 Mon Sep 17 00:00:00 2001
From: Michal Klocek <michal.klocek@qt.io>
Date: Mon, 13 Sep 2021 09:23:54 +0200
Subject: [PATCH] Fix build when x11 over egl/es2
Qt's xcb can be compiled without the glx support,
do not use Chromium flag to check that.
Task-number: QTBUG-96398
Pick-to: 6.2
Change-Id: Ie7f1fe74699cd83aee1f9e5aff59760d4d7a70bf
---
src/core/ozone/gl_context_qt.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/core/ozone/gl_context_qt.cpp b/src/core/ozone/gl_context_qt.cpp
index 55497751..1dd7d8f6 100644
--- a/src/core/ozone/gl_context_qt.cpp
+++ b/src/core/ozone/gl_context_qt.cpp
@@ -42,6 +42,7 @@
#include <QGuiApplication>
#include <QOpenGLContext>
#include <QThread>
+#include <QtGui/private/qtgui-config_p.h>
#include <qpa/qplatformnativeinterface.h>
#include "ui/gl/gl_context_egl.h"
#include "ui/gl/gl_implementation.h"
@@ -154,7 +155,7 @@ void* GLContextHelper::getNativeDisplay()
QFunctionPointer GLContextHelper::getGlXGetProcAddress()
{
QFunctionPointer get_proc_address = nullptr;
-#if QT_CONFIG(opengl)
+#if QT_CONFIG(xcb_glx)
if (QOpenGLContext *context = qt_gl_global_share_context()) {
get_proc_address = context->getProcAddress("glXGetProcAddress");
}
@@ -175,7 +176,7 @@ QFunctionPointer GLContextHelper::getEglGetProcAddress()
void *GLContextHelper::getGlxPlatformInterface()
{
-#if QT_CONFIG(opengl) && defined(USE_GLX)
+#if QT_CONFIG(xcb_glx)
if (QOpenGLContext *context = qt_gl_global_share_context())
return context->nativeInterface<QNativeInterface::QGLXContext>();
#endif
--
2.33.0

View File

@ -0,0 +1,54 @@
From 6dc7ed884091eb373f72d53f2b87371cd899378e Mon Sep 17 00:00:00 2001
From: Christophe Giboudeaux <christophe@krop.fr>
Date: Wed, 11 Aug 2021 11:39:59 +0200
Subject: [PATCH] Fix build with glibc 2.34
---
.../abseil-cpp/absl/debugging/failure_signal_handler.cc | 3 ++-
.../breakpad/src/client/linux/handler/exception_handler.cc | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/3rdparty/chromium/sandbox/linux/services/credentials.cc b/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
index d7b5d8c4413..a62cb21bd7a 100644
--- a/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
+++ b/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
@@ -98,7 +98,9 @@ bool ChrootToSafeEmptyDir() {
// attempt this optimization.
clone_flags |= CLONE_VM | CLONE_VFORK | CLONE_SETTLS;
- char tls_buf[PTHREAD_STACK_MIN] = {0};
+ const std::size_t pthread_stack_min = PTHREAD_STACK_MIN;
+ char tls_buf[pthread_stack_min];
+ memset(tls_buf, 0, pthread_stack_min);
tls = tls_buf;
#endif
diff --git a/src/3rdparty/chromium/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc b/src/3rdparty/chromium/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc
index 5d13bdbbbd1..2ed137b58f1 100644
--- a/src/3rdparty/chromium/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc
+++ b/src/3rdparty/chromium/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc
@@ -135,7 +135,8 @@ static bool SetupAlternateStackOnce() {
#else
const size_t page_mask = sysconf(_SC_PAGESIZE) - 1;
#endif
- size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
+ size_t stack_size =
+ (std::max<size_t>(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
defined(ABSL_HAVE_MEMORY_SANITIZER) || defined(ABSL_HAVE_THREAD_SANITIZER)
// Account for sanitizer instrumentation requiring additional stack space.
diff --git a/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc b/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
index ca353c40997..2e43ba6fc04 100644
--- a/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
+++ b/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
@@ -138,7 +138,7 @@ void InstallAlternateStackLocked() {
// SIGSTKSZ may be too small to prevent the signal handlers from overrunning
// the alternative stack. Ensure that the size of the alternative stack is
// large enough.
- static const unsigned kSigStackSize = std::max(16384, SIGSTKSZ);
+ static const unsigned kSigStackSize = std::max<size_t>(16384, SIGSTKSZ);
// Only set an alternative stack if there isn't already one, or if the current
// one is too small.
--
2.32.0

View File

@ -0,0 +1,42 @@
From 218438259dd795456f0a48f67cbe5b4e520db88b Mon Sep 17 00:00:00 2001
From: Matthew Denton <mpdenton@chromium.org>
Date: Thu, 3 Jun 2021 20:06:13 +0000
Subject: [PATCH] Linux sandbox: return ENOSYS for clone3
Because clone3 uses a pointer argument rather than a flags argument, we
cannot examine the contents with seccomp, which is essential to
preventing sandboxed processes from starting other processes. So, we
won't be able to support clone3 in Chromium. This CL modifies the
BPF policy to return ENOSYS for clone3 so glibc always uses the fallback
to clone.
Bug: 1213452
Change-Id: I7c7c585a319e0264eac5b1ebee1a45be2d782303
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2936184
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Cr-Commit-Position: refs/heads/master@{#888980}
---
.../sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc | 8 ++++++++
diff --git a/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc b/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
index 3c67b124786..81cb25e139e 100644
--- a/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+++ b/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
@@ -165,6 +165,14 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
return RestrictCloneToThreadsAndEPERMFork();
}
+ // clone3 takes a pointer argument which we cannot examine, so return ENOSYS
+ // to force the libc to use clone. See https://crbug.com/1213452.
+ #if defined(__NR_clone3)
+ if (sysno == __NR_clone3) {
+ return Error(ENOSYS);
+ }
+ #endif
+
if (sysno == __NR_fcntl)
return RestrictFcntlCommands();
--
2.32.0

19
_constraints Normal file
View File

@ -0,0 +1,19 @@
<constraints>
<overwrite>
<conditions>
<package>qt6-webengine</package>
</conditions>
<hardware>
<disk>
<size unit="G">12</size>
</disk>
<memory>
<size unit="G">20</size>
</memory>
<physicalmemory>
<size unit="G">8</size>
</physicalmemory>
<processors>8</processors>
</hardware>
</overwrite>
</constraints>

3
_multibuild Normal file
View File

@ -0,0 +1,3 @@
<multibuild>
<flavor>docs</flavor>
</multibuild>

53
chromium-90-fseal.patch Normal file
View File

@ -0,0 +1,53 @@
Define FSEAL for Leap 15.2
Origin: chromium package
--
--- a/src/3rdparty/chromium/mojo/core/channel_linux.cc.xx 2021-04-26 10:31:10.188705842 +0200
+++ b/src/3rdparty/chromium/mojo/core/channel_linux.cc 2021-04-26 11:23:26.997161282 +0200
@@ -5,6 +5,21 @@
#include "mojo/core/channel_linux.h"
#include <fcntl.h>
+#ifndef F_SEAL_SEAL
+# define F_SEAL_SEAL 0x0001
+#endif
+#ifndef F_SEAL_SHRINK
+# define F_SEAL_SHRINK 0x0002
+#endif
+#ifndef F_SEAL_GROW
+# define F_SEAL_GROW 0x0004
+#endif
+#ifndef F_ADD_SEALS
+# define F_ADD_SEALS 1033
+#endif
+#ifndef F_GET_SEALS
+# define F_GET_SEALS 1034
+#endif
#include <linux/futex.h>
#include <linux/memfd.h>
#include <sys/eventfd.h>
--- a/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc.xx 2021-04-26 16:39:18.387482941 +0200
+++ b/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc 2021-04-26 16:40:10.866754337 +0200
@@ -6,6 +6,21 @@
#include <errno.h>
#include <fcntl.h>
+#ifndef F_SEAL_SEAL
+# define F_SEAL_SEAL 0x0001
+#endif
+#ifndef F_SEAL_SHRINK
+# define F_SEAL_SHRINK 0x0002
+#endif
+#ifndef F_SEAL_GROW
+# define F_SEAL_GROW 0x0004
+#endif
+#ifndef F_ADD_SEALS
+# define F_ADD_SEALS 1033
+#endif
+#ifndef F_GET_SEALS
+# define F_GET_SEALS 1034
+#endif
#include <linux/net.h>
#include <sched.h>
#include <signal.h>

View File

@ -0,0 +1,96 @@
From: Antonio Larrosa <alarrosa@suse.com>
Subject: Disable GPU when using nouveau or running on wayland
References: boo#1005323, boo#1060990
Qt WebEngine uses multi-threaded OpenGL, which nouveau does not support.
It also crashes when running on wayland, the cause is not yet known.
Work around these issues by not doing GPU-accelerated rendering in such
cases.
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index c9f82c31..0f92e3de 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -133,6 +133,7 @@
#include <QOffscreenSurface>
#if QT_CONFIG(opengl)
# include <QOpenGLContext>
+# include <QOpenGLFunctions>
# include <qopenglcontext_platform.h>
#endif
#include <QQuickWindow>
@@ -206,11 +207,33 @@ bool usingSoftwareDynamicGL()
static const char *getGLType(bool enableGLSoftwareRendering)
{
const char *glType = nullptr;
+
+ bool disableGpu = qEnvironmentVariableIsSet("QT_WEBENGINE_DISABLE_GPU");
+
+ if (!qEnvironmentVariableIsSet("QT_WEBENGINE_DISABLE_WAYLAND_WORKAROUND") && qApp->platformName().startsWith("wayland", Qt::CaseInsensitive))
+ {
+ qWarning() << "Running on wayland. Qt WebEngine will disable usage of the GPU.\n"
+ "Note: you can set the QT_WEBENGINE_DISABLE_WAYLAND_WORKAROUND\n"
+ "environment variable before running this application, but this is \n"
+ "not recommended since this usually causes applications to crash.";
+ disableGpu = true;
+ }
+
+ if (!qEnvironmentVariableIsSet("QT_WEBENGINE_DISABLE_NOUVEAU_WORKAROUND") && openGLVendor() == QStringLiteral("nouveau"))
+ {
+ qWarning() << "Nouveau openGL driver detected. Qt WebEngine will disable usage of the GPU.\n"
+ "Note: you can set the QT_WEBENGINE_DISABLE_NOUVEAU_WORKAROUND\n"
+ "environment variable before running this application, but this is \n"
+ "not recommended since this usually causes applications to crash as\n"
+ "Nouveau openGL drivers don't support multithreaded rendering";
+ disableGpu = true;
+ }
+
const bool tryGL = (usingDefaultSGBackend() && !usingSoftwareDynamicGL()
&& QGuiApplicationPrivate::platformIntegration()->hasCapability(
QPlatformIntegration::OpenGL))
|| enableGLSoftwareRendering;
- if (tryGL) {
+ if (tryGL && !disableGpu) {
if (!qt_gl_global_share_context() || !qt_gl_global_share_context()->isValid()) {
qWarning("WebEngineContext used before QtWebEngineCore::initialize() or OpenGL context "
"creation failed.");
@@ -914,6 +937,39 @@ base::CommandLine* WebEngineContext::commandLine() {
}
}
+#ifndef QT_NO_OPENGL
+QString openGLVendor()
+{
+ QString vendor;
+
+ QOpenGLContext *oldContext = QOpenGLContext::currentContext();
+ QSurface *oldSurface = 0;
+ if (oldContext)
+ oldSurface = oldContext->surface();
+
+ QScopedPointer<QOffscreenSurface> surface( new QOffscreenSurface );
+ surface->create();
+ QOpenGLContext context;
+ if (!context.create()) {
+ qDebug() << "Error creating openGL context";
+ }
+ else if (!context.makeCurrent(surface.data())) {
+ qDebug() << "Error making openGL context current context";
+ } else {
+ const GLubyte *p;
+ QOpenGLFunctions *f = context.functions();
+ if ((p = f->glGetString(GL_VENDOR)))
+ vendor = QString::fromLatin1(reinterpret_cast<const char *>(p));
+ }
+
+ context.doneCurrent();
+ if (oldContext && oldSurface)
+ oldContext->makeCurrent(oldSurface);
+
+ return vendor;
+}
+#endif
+
} // namespace
QT_BEGIN_NAMESPACE

8
qt6-webengine-rpmlintrc Normal file
View File

@ -0,0 +1,8 @@
# using fdupes on include directories means looking for troubles
addFilter("files-duplicate .*")
# library and development package names don't match
addFilter("no-dependency-on .*")
# Only libraries used at link time are guaranteed to work
addFilter("shlib-fixed-dependency .*")

47
qt6-webengine.changes Normal file
View File

@ -0,0 +1,47 @@
-------------------------------------------------------------------
Thu Sep 30 12:31:00 UTC 2021 - Christophe Giboudeaux <christophe@krop.fr>
- Update to 6.2.0:
* https://www.qt.io/blog/qt-6.2-lts-released
-------------------------------------------------------------------
Sat Sep 25 07:18:46 UTC 2021 - Christophe Giboudeaux <christophe@krop.fr>
- Update to 6.2.0-rc2
-------------------------------------------------------------------
Thu Sep 16 14:24:30 UTC 2021 - Christophe Giboudeaux <christophe@krop.fr>
- Update to 6.2.0-rc
- Add arm build fix:
* 0001-Fix-build-when-x11-over-egl-es2.patch
-------------------------------------------------------------------
Sat Sep 11 12:47:13 UTC 2021 - Christophe Giboudeaux <christophe@krop.fr>
- Update to 6.2.0-beta4
- Add glibc 2.34 compatibility patch:
* 0001-Fix-build-with-glibc-2.34.patch
- Import patches from the chromium package:
* 0001-return-ENOSYS-for-clone3.patch
* chromium-90-fseal.patch
-------------------------------------------------------------------
Sun Aug 1 09:41:59 UTC 2021 - Christophe Giboudeaux <christophe@krop.fr>
- Drop chromium-glibc-2.33.patch. Merged upstream
- Rebase sandbox-statx-futex_time64.patch.
-------------------------------------------------------------------
Fri Jul 2 12:22:23 UTC 2021 - Christophe Giboudeaux <christophe@krop.fr>
- Add back patches from libqt5-qtwebengine:
* qtwebengine-boo1163766.patch
* rtc-dont-use-h264.patch
* sandbox-statx-futex_time64.patch
* chromium-glibc-2.33.patch
-------------------------------------------------------------------
Wed Jun 23 19:27:45 UTC 2021 - Christophe Giboudeaux <christophe@krop.fr>
- Init qt6-webengine

522
qt6-webengine.spec Normal file
View File

@ -0,0 +1,522 @@
#
# spec file for package qt6-webengine
#
# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define real_version 6.2.0
%define short_version 6.2
%define tar_name qtwebengine-everywhere-src
%define tar_suffix %{nil}
#
%global qt6_flavor @BUILD_FLAVOR@%{nil}
%define no_flavor ("%qt6_flavor" == "")
#
%if "%{qt6_flavor}" == "docs"
%define pkg_suffix -docs
%endif
#
%if %{?suse_version} > 1500 || 0%{?sle_version} > 150300
%bcond_without system_vpx
# icu >= 68 is required
%bcond_without system_icu
%define _use_system_icu ON
%else
%bcond_with system_vpx
%bcond_with system_icu
%define _use_system_icu OFF
%endif
%bcond_without system_ffmpeg
%bcond_without system_minizip
#
Name: qt6-webengine%{?pkg_suffix}
Version: 6.2.0
Release: 0
Summary: Web browser engine for Qt applications
License: LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
URL: https://www.qt.io
Source: https://download.qt.io/official_releases/qt/%{short_version}/%{real_version}%{tar_suffix}/submodules/%{tar_name}-%{real_version}%{tar_suffix}.tar.xz
Source99: qt6-webengine-rpmlintrc
# Patches 0-100 are upstream patches #
# PATCH-FIX-UPSTREAM
Patch0: 0001-Fix-build-when-x11-over-egl-es2.patch
# Patches 100-200 are openSUSE and/or non-upstream(able) patches #
Patch100: qtwebengine-boo1163766.patch
Patch101: rtc-dont-use-h264.patch
Patch102: sandbox-statx-futex_time64.patch
# PATCH-FIX-UPSTREAM
Patch103: 0001-Fix-build-with-glibc-2.34.patch
# PATCH-FIX-UPSTREAM
Patch104: 0001-return-ENOSYS-for-clone3.patch
# PATCH-FIX-OPENSUSE -- Needed for leap 15.2
Patch105: chromium-90-fseal.patch
# PATCH-FIX-OPENSUSE -- disable-gpu-when-using-nouveau-boo-1005323.diff
# PATCH-NEEDS-REBASE
%if 0
Patch106: disable-gpu-when-using-nouveau-boo-1005323.diff
%endif
#
# Chromium/blink don't support all archs
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64 %{mips} %{riscv}
BuildRequires: Mesa-KHR-devel
BuildRequires: bison
# Not pulled automatically on Leap
BuildRequires: cups-config
BuildRequires: flex
BuildRequires: gperf
BuildRequires: krb5-devel
BuildRequires: libjpeg-devel
BuildRequires: libpng-devel >= 1.6.0
BuildRequires: memory-constraints
# nodejs-default doesn't exist on Leap 15.2
%if 0%{?suse_version} == 1500 && 0%{?sle_version} == 150200
BuildRequires: nodejs-common
%else
BuildRequires: nodejs-default
%endif
BuildRequires: pipewire-devel
BuildRequires: pkgconfig
BuildRequires: python
BuildRequires: python-devel
BuildRequires: python-xml
BuildRequires: qt6-core-private-devel
BuildRequires: qt6-gui-private-devel
BuildRequires: qt6-qml-private-devel
BuildRequires: qt6-quick-private-devel
BuildRequires: qt6-quickwidgets-private-devel
BuildRequires: qt6-widgets-private-devel
BuildRequires: snappy-devel
BuildRequires: cmake(Qt6Core)
BuildRequires: cmake(Qt6Gui)
BuildRequires: cmake(Qt6GuiTools)
BuildRequires: cmake(Qt6Network)
BuildRequires: cmake(Qt6OpenGL)
BuildRequires: cmake(Qt6OpenGLWidgets)
BuildRequires: cmake(Qt6Positioning)
BuildRequires: cmake(Qt6PrintSupport)
BuildRequires: cmake(Qt6Qml)
BuildRequires: cmake(Qt6QmlModels)
BuildRequires: cmake(Qt6QmlTools)
BuildRequires: cmake(Qt6Quick)
BuildRequires: cmake(Qt6QuickWidgets)
BuildRequires: cmake(Qt6WebChannel)
BuildRequires: cmake(Qt6Widgets)
BuildRequires: cmake(Qt6WidgetsTools)
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(glib-2.0) >= 2.32.0
BuildRequires: pkgconfig(gio-2.0)
BuildRequires: pkgconfig(glproto)
BuildRequires: pkgconfig(harfbuzz) >= 2.4.0
%if %{with system_icu}
BuildRequires: pkgconfig(icu-uc) >= 68
BuildRequires: pkgconfig(icu-i18n) >= 68
%endif
BuildRequires: pkgconfig(lcms2)
%if %{with system_ffmpeg}
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavutil)
%endif
BuildRequires: pkgconfig(libcrypto)
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(libevent)
BuildRequires: pkgconfig(libpci)
BuildRequires: pkgconfig(libpulse) >= 0.9.10
BuildRequires: pkgconfig(libwebp)
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(libxslt)
BuildRequires: pkgconfig(nss) >= 3.26
BuildRequires: pkgconfig(opus) >= 1.3.1
BuildRequires: pkgconfig(re2)
%if %{with system_vpx}
BuildRequires: pkgconfig(vpx) >= 1.10.0
%endif
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xkbfile)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(xscrnsaver)
BuildRequires: pkgconfig(xshmfence)
BuildRequires: pkgconfig(xt)
BuildRequires: pkgconfig(xtst)
BuildRequires: pkgconfig(zlib)
%if %{with system_minizip}
BuildRequires: pkgconfig(minizip)
%endif
%if "%{qt6_flavor}" == "docs"
BuildRequires: qt6-tools
%{qt6_doc_packages}
%endif
%description
The Qt WebEngine module provides a web browser engine to embed web content into
Qt applications.
The functionality in Qt WebEngine is divided into the following
modules:
* Qt WebEngine Core module for interacting with Chromium
* Qt WebEngine Widgets module for creating widget-based web applications
* Qt WebEngine module for creating Qt Quick based web applications
%if %{no_flavor}
%package imports
Summary: Qt 6 WebEngine QML files and plugins
%description imports
QML files and plugins from the Qt 6 WebEngine module
%package -n libQt6Pdf6
Summary: Qt6 Pdf library
%description -n libQt6Pdf6
The Qt6 Pdf library.
%package -n qt6-pdf-imports
Summary: Qt 6 Pdf QML files and plugins
%description -n qt6-pdf-imports
QML files and plugins from the Qt 6 Pdf module
%package -n qt6-pdf-devel
Summary: Development files for the Qt 6 Pdf library
Requires: libQt6Pdf6 = %{version}
%description -n qt6-pdf-devel
Development files for the Qt 6 Pdf library.
%package -n qt6-pdf-private-devel
Summary: Non-ABI stable API for the Qt 6 Pdf library
Requires: cmake(Qt6Pdf) = %{real_version}
%description -n qt6-pdf-private-devel
This package provides private headers of libQt6Pdf that do not have any
ABI or API guarantees.
%package -n libQt6PdfQuick6
Summary: Qt6 PdfQuick library
%description -n libQt6PdfQuick6
The Qt6 PdfQuick library.
%package -n qt6-pdfquick-devel
Summary: Development files for the Qt 6 PdfQuick library
Requires: libQt6PdfQuick6 = %{version}
%description -n qt6-pdfquick-devel
Development files for the Qt 6 PdfQuick library.
%package -n qt6-pdfquick-private-devel
Summary: Non-ABI stable API for the Qt 6 PdfQuick library
Requires: cmake(Qt6PdfQuick) = %{real_version}
%description -n qt6-pdfquick-private-devel
This package provides private headers of libQt6PdfQuick that do not have any
ABI or API guarantees.
%package -n libQt6PdfWidgets6
Summary: Qt6 PdfWidgets library
%description -n libQt6PdfWidgets6
The Qt6 PdfWidgets library.
%package -n qt6-pdfwidgets-devel
Summary: Development files for the Qt 6 PdfWidgets library
Requires: libQt6PdfWidgets6 = %{version}
%description -n qt6-pdfwidgets-devel
Development files for the Qt 6 PdfWidgets library.
%package -n qt6-pdfwidgets-private-devel
Summary: Non-ABI stable API for the Qt 6 PdfWidgets library
Requires: cmake(Qt6PdfWidgets) = %{real_version}
%description -n qt6-pdfwidgets-private-devel
This package provides private headers of libQt6PdfWidgets that do not have any
ABI or API guarantees.
%package -n libQt6WebEngineCore6
Summary: Qt6 WebEngineCore library
Requires: qt6-webengine = %{version}
%description -n libQt6WebEngineCore6
The Qt6 WebEngineCore library.
%package -n qt6-webenginecore-devel
Summary: Development files for the Qt 6 WebEngineCore library
Requires: libQt6WebEngineCore6 = %{version}
%description -n qt6-webenginecore-devel
Development files for the Qt 6 WebEngineCore library.
%package -n qt6-webenginecore-private-devel
Summary: Non-ABI stable API for the Qt 6 WebEngineCore library
Requires: cmake(Qt6WebEngineCore) = %{real_version}
%description -n qt6-webenginecore-private-devel
This package provides private headers of libQt6WebEngineCore that do not have any
ABI or API guarantees.
%package -n libQt6WebEngineQuick6
Summary: Qt6 WebEngineQuick library
Requires: qt6-webengine-imports = %{version}
%description -n libQt6WebEngineQuick6
The Qt6 WebEngineQuick library.
%package -n qt6-webenginequick-devel
Summary: Development files for the Qt 6 WebEngineQuick library
Requires: libQt6WebEngineQuick6 = %{version}
%description -n qt6-webenginequick-devel
Development files for the Qt 6 WebEngineQuick library.
%package -n qt6-webenginequick-private-devel
Summary: Non-ABI stable API for the Qt 6 WebEngineQuick library
Requires: cmake(Qt6WebEngineQuick) = %{real_version}
%description -n qt6-webenginequick-private-devel
This package provides private headers of libQt6WebEngineQuick that do not have any
ABI or API guarantees.
%package -n libQt6WebEngineWidgets6
Summary: Qt6 WebEngineWidgets library
%description -n libQt6WebEngineWidgets6
The Qt6 WebEngineWidgets library.
%package -n qt6-webenginewidgets-devel
Summary: Development files for the Qt 6 WebEngineWidgets library
Requires: libQt6WebEngineWidgets6 = %{version}
%description -n qt6-webenginewidgets-devel
Development files for the Qt 6 WebEngineWidgets library.
%package -n qt6-webenginewidgets-private-devel
Summary: Non-ABI stable API for the Qt 6 WebEngineWidgets library
Requires: cmake(Qt6WebEngineWidgets) = %{real_version}
%description -n qt6-webenginewidgets-private-devel
This package provides private headers of libQt6WebEngineWidgets that do not have any
ABI or API guarantees.
# Examples cause build failure (6.2.0-beta4)
# %%{qt6_examples_package}
%endif
%prep
%autosetup -p1 -n %{tar_name}-%{real_version}%{tar_suffix}
%build
# Determine the right number of parallel processes based on the available memory
# Copied from the Qt 5 webengine package
%limit_build -m 2750
# Ensure that also the internal chromium build follows the right number of
# parallel processes instead of its defaults.
export NINJAFLAGS="%{?_smp_mflags}"
%cmake_qt6 \
-DCMAKE_TOOLCHAIN_FILE:STRING="%{_qt6_cmakedir}/Qt6/qt.toolchain.cmake" \
-DFEATURE_printer:BOOL=ON \
-DFEATURE_qtpdf_build:BOOL=ON \
-DFEATURE_webengine_developer_build:BOOL=OFF \
-DFEATURE_webengine_embedded_build:BOOL=OFF \
-DFEATURE_webengine_extensions:BOOL=ON \
-DFEATURE_webengine_kerberos:BOOL=ON \
-DFEATURE_webengine_native_spellchecker:BOOL=OFF \
-DFEATURE_webengine_system_libevent:BOOL=ON \
-DFEATURE_webengine_webrtc:BOOL=ON \
-DFEATURE_webengine_webrtc_pipewire:BOOL=ON \
-DFEATURE_webengine_system_icu:BOOL=%{_use_system_icu} \
%if %{with system_ffmpeg}
-DFEATURE_webengine_system_ffmpeg:BOOL=ON \
-DFEATURE_webengine_proprietary_codecs:BOOL=ON \
%endif
-DQT_BUILD_EXAMPLES:BOOL=OFF
%{qt6_build}
%install
%{qt6_install}
%if %{no_flavor}
# CMake files are not needed for plugins
rm -r %{buildroot}%{_qt6_cmakedir}/Qt6Gui/
rm -r %{buildroot}%{_qt6_cmakedir}/Qt6Qml/QmlPlugins
# This shouldn't be needed
rm -r %{buildroot}%{_qt6_cmakedir}/Qt6BuildInternals
%post -n libQt6Pdf6 -p /sbin/ldconfig
%post -n libQt6PdfQuick6 -p /sbin/ldconfig
%post -n libQt6PdfWidgets6 -p /sbin/ldconfig
%post -n libQt6WebEngineCore6 -p /sbin/ldconfig
%post -n libQt6WebEngineQuick6 -p /sbin/ldconfig
%post -n libQt6WebEngineWidgets6 -p /sbin/ldconfig
%postun -n libQt6Pdf6 -p /sbin/ldconfig
%postun -n libQt6PdfQuick6 -p /sbin/ldconfig
%postun -n libQt6PdfWidgets6 -p /sbin/ldconfig
%postun -n libQt6WebEngineCore6 -p /sbin/ldconfig
%postun -n libQt6WebEngineQuick6 -p /sbin/ldconfig
%postun -n libQt6WebEngineWidgets6 -p /sbin/ldconfig
%files
%{_qt6_datadir}/resources/
%{_qt6_translationsdir}/qtwebengine_locales/
%{_qt6_libexecdir}/QtWebEngineProcess
%files imports
%{_qt6_qmldir}/QtWebEngine/
%files -n libQt6Pdf6
%dir %{_qt6_pluginsdir}/imageformats
%{_qt6_libdir}/libQt6Pdf.so.*
%{_qt6_pluginsdir}/imageformats/libqpdf.so
%files -n qt6-pdf-imports
%dir %{_qt6_qmldir}/QtQuick
%{_qt6_qmldir}/QtQuick/Pdf
%files -n qt6-pdf-devel
%{_qt6_cmakedir}/Qt6Pdf/
%{_qt6_descriptionsdir}/Pdf.json
%{_qt6_includedir}/QtPdf/
%{_qt6_libdir}/libQt6Pdf.prl
%{_qt6_libdir}/libQt6Pdf.so
%{_qt6_metatypesdir}/qt6pdf_*_metatypes.json
%{_qt6_mkspecsdir}/modules/qt_lib_pdf.pri
%exclude %{_qt6_includedir}/QtPdf/%{real_version}
%files -n qt6-pdf-private-devel
%{_qt6_includedir}/QtPdf/%{real_version}/
%{_qt6_mkspecsdir}/modules/qt_lib_pdf_private.pri
%files -n libQt6PdfQuick6
%{_qt6_libdir}/libQt6PdfQuick.so.*
%files -n qt6-pdfquick-devel
%{_qt6_cmakedir}/Qt6PdfQuick/
%{_qt6_descriptionsdir}/PdfQuick.json
%{_qt6_includedir}/QtPdfQuick/
%{_qt6_libdir}/libQt6PdfQuick.prl
%{_qt6_libdir}/libQt6PdfQuick.so
%{_qt6_metatypesdir}/qt6pdfquick_*_metatypes.json
%{_qt6_mkspecsdir}/modules/qt_lib_pdfquick.pri
%exclude %{_qt6_includedir}/QtPdfQuick/%{real_version}
%files -n qt6-pdfquick-private-devel
%{_qt6_includedir}/QtPdfQuick/%{real_version}/
%{_qt6_mkspecsdir}/modules/qt_lib_pdfquick_private.pri
%files -n libQt6PdfWidgets6
%{_qt6_libdir}/libQt6PdfWidgets.so.*
%files -n qt6-pdfwidgets-devel
%{_qt6_cmakedir}/Qt6PdfWidgets/
%{_qt6_descriptionsdir}/PdfWidgets.json
%{_qt6_includedir}/QtPdfWidgets/
%{_qt6_libdir}/libQt6PdfWidgets.prl
%{_qt6_libdir}/libQt6PdfWidgets.so
%{_qt6_metatypesdir}/qt6pdfwidgets_*_metatypes.json
%{_qt6_mkspecsdir}/modules/qt_lib_pdfwidgets.pri
%exclude %{_qt6_includedir}/QtPdfWidgets/%{real_version}
%files -n qt6-pdfwidgets-private-devel
%{_qt6_includedir}/QtPdfWidgets/%{real_version}/
%{_qt6_mkspecsdir}/modules/qt_lib_pdfwidgets_private.pri
%files -n libQt6WebEngineCore6
%license LICENSE.*
%{_qt6_libdir}/libQt6WebEngineCore.so.*
%files -n qt6-webenginecore-devel
%{_qt6_cmakedir}/Qt6/FindGPerf.cmake
%{_qt6_cmakedir}/Qt6/FindGn.cmake
%{_qt6_cmakedir}/Qt6/FindNinja.cmake
%{_qt6_cmakedir}/Qt6/FindNodejs.cmake
%{_qt6_cmakedir}/Qt6/FindPkgConfigHost.cmake
%{_qt6_cmakedir}/Qt6/FindSnappy.cmake
%{_qt6_cmakedir}/Qt6WebEngineCore/
%{_qt6_cmakedir}/Qt6WebEngineCoreTools/
%{_qt6_descriptionsdir}/WebEngineCore.json
%{_qt6_includedir}/QtWebEngineCore/
%{_qt6_libdir}/libQt6WebEngineCore.prl
%{_qt6_libdir}/libQt6WebEngineCore.so
%{_qt6_libexecdir}/gn
%{_qt6_libexecdir}/qwebengine_convert_dict
%{_qt6_metatypesdir}/qt6webenginecore_*_metatypes.json
%{_qt6_mkspecsdir}/modules/qt_lib_webenginecore.pri
%exclude %{_qt6_includedir}/QtWebEngineCore/%{real_version}
%files -n qt6-webenginecore-private-devel
%{_qt6_includedir}/QtWebEngineCore/%{real_version}/
%{_qt6_mkspecsdir}/modules/qt_lib_webenginecore_private.pri
%files -n libQt6WebEngineQuick6
%{_qt6_libdir}/libQt6WebEngineQuick.so.*
%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.so.*
%files -n qt6-webenginequick-devel
%{_qt6_cmakedir}/Qt6WebEngineQuick/
%{_qt6_cmakedir}/Qt6WebEngineQuickDelegatesQml/
%{_qt6_descriptionsdir}/WebEngineQuick.json
%{_qt6_descriptionsdir}/WebEngineQuickDelegatesQml.json
%{_qt6_includedir}/QtWebEngineQuick/
%{_qt6_libdir}/libQt6WebEngineQuick.prl
%{_qt6_libdir}/libQt6WebEngineQuick.so
%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.prl
%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.so
%{_qt6_metatypesdir}/qt6webenginequick_*_metatypes.json
%{_qt6_metatypesdir}/qt6webenginequickdelegatesqml_*_metatypes.json
%{_qt6_mkspecsdir}/modules/qt_lib_webenginequick.pri
%{_qt6_mkspecsdir}/modules/qt_lib_webenginequickdelegatesqml.pri
%exclude %{_qt6_includedir}/QtWebEngineQuick/%{real_version}
%files -n qt6-webenginequick-private-devel
%{_qt6_includedir}/QtWebEngineQuick/%{real_version}/
%{_qt6_mkspecsdir}/modules/qt_lib_webenginequick_private.pri
%{_qt6_mkspecsdir}/modules/qt_lib_webenginequickdelegatesqml_private.pri
%files -n libQt6WebEngineWidgets6
%{_qt6_libdir}/libQt6WebEngineWidgets.so.*
%files -n qt6-webenginewidgets-devel
%{_qt6_cmakedir}/Qt6WebEngineWidgets/
%{_qt6_descriptionsdir}/WebEngineWidgets.json
%{_qt6_includedir}/QtWebEngineWidgets/
%{_qt6_libdir}/libQt6WebEngineWidgets.prl
%{_qt6_libdir}/libQt6WebEngineWidgets.so
%{_qt6_metatypesdir}/qt6webenginewidgets_*_metatypes.json
%{_qt6_mkspecsdir}/modules/qt_lib_webenginewidgets.pri
%exclude %{_qt6_includedir}/QtWebEngineWidgets/%{real_version}
%files -n qt6-webenginewidgets-private-devel
%{_qt6_includedir}/QtWebEngineWidgets/%{real_version}/
%{_qt6_mkspecsdir}/modules/qt_lib_webenginewidgets_private.pri
%endif
%changelog

View File

@ -0,0 +1,62 @@
From eaae274cb1975be558d8a535ba2310bc67c073a6 Mon Sep 17 00:00:00 2001
From: "Bernhard M. Wiedemann" <bwiedemann suse de>
Date: Wed, 24 Mar 2021 16:00:08 +0100
Subject: [PATCH] https://bugzilla.opensuse.org/show_bug.cgi?id=1163766
seccomp filters disallow a new kernel syscall to get time
used on i586
---
src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc | 6 ++++++
src/3rdparty/chromium/sandbox/linux/system_headers/x86_32_linux_syscalls.h | 8 ++++++++
src/3rdparty/chromium/sandbox/policy/linux/bpf_ime_policy_linux.cc | 3 +++
3 files changed, 17 insertions(+)
Index: qtwebengine-everywhere-src-5.15.3/src/3rdparty/chromium/sandbox/linux/system_headers/x86_32_linux_syscalls.h
===================================================================
--- qtwebengine-everywhere-src-5.15.3.orig/src/3rdparty/chromium/sandbox/linux/system_headers/x86_32_linux_syscalls.h
+++ qtwebengine-everywhere-src-5.15.3/src/3rdparty/chromium/sandbox/linux/system_headers/x86_32_linux_syscalls.h
@@ -1710,5 +1710,13 @@
#define __NR_clone3 435
#endif
+#if !defined(__NR_clock_gettime64)
+#define __NR_clock_gettime64 403
+#endif
+
+#if !defined(__NR_clock_nanosleep_time64)
+#define __NR_clock_nanosleep_time64 407
+#endif
+
#endif // SANDBOX_LINUX_SYSTEM_HEADERS_X86_32_LINUX_SYSCALLS_H_
Index: qtwebengine-everywhere-src-5.15.3/src/3rdparty/chromium/sandbox/policy/linux/bpf_ime_policy_linux.cc
===================================================================
--- qtwebengine-everywhere-src-5.15.3.orig/src/3rdparty/chromium/sandbox/policy/linux/bpf_ime_policy_linux.cc
+++ qtwebengine-everywhere-src-5.15.3/src/3rdparty/chromium/sandbox/policy/linux/bpf_ime_policy_linux.cc
@@ -32,6 +32,9 @@ ResultExpr ImeProcessPolicy::EvaluateSys
#if defined(__NR_clock_gettime)
case __NR_clock_gettime:
#endif
+#if defined(__NR_clock_gettime64)
+ case __NR_clock_gettime64:
+#endif
return Allow();
// https://crbug.com/991435
#if defined(__NR_getrusage)
Index: qtwebengine-everywhere-src-5.15.3/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
===================================================================
--- qtwebengine-everywhere-src-5.15.3.orig/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+++ qtwebengine-everywhere-src-5.15.3/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
@@ -161,6 +161,12 @@ ResultExpr EvaluateSyscallImpl(int fs_de
return RestrictClockID();
}
+#if defined(__NR_clock_gettime64)
+ if (sysno == __NR_clock_gettime64 || sysno == __NR_clock_nanosleep_time64) {
+ return RestrictClockID();
+ }
+#endif
+
if (sysno == __NR_clone) {
return RestrictCloneToThreadsAndEPERMFork();
}

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c6e530a61bea2e7fbb50308a2b4e7fdb4f7c7b61a28797973270acffc020809d
size 369733760

32
rtc-dont-use-h264.patch Normal file
View File

@ -0,0 +1,32 @@
From: Fabian Vogt <fabian@ritter-vogt.de>
Subject: Don't require open264 when proprietary_codecs are supported
diff --git a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni b/chromium/third_party/webrtc/webrtc.gni
index ca8acdbf259..36897a72aa8 100644
--- a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
+++ b/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
@@ -151,8 +151,7 @@ declare_args() {
#
# Enabling H264 when building with MSVC is currently not supported, see
# bugs.webrtc.org/9213#c13 for more info.
- rtc_use_h264 =
- proprietary_codecs && !is_android && !is_ios && !(is_win && !is_clang)
+ rtc_use_h264 = false
# Enable this flag to make webrtc::Mutex be implemented by absl::Mutex.
rtc_use_absl_mutex = false
diff --git a/src/core/config/common.pri b/src/core/config/common.pri
index d9d64e76..cd0fd120 100644
--- a/src/core/config/common.pri
+++ b/src/core/config/common.pri
@@ -26,9 +26,6 @@ qtConfig(webengine-webrtc) {
qtConfig(webengine-proprietary-codecs) {
gn_args += proprietary_codecs=true ffmpeg_branding=\"Chrome\"
- qtConfig(webengine-webrtc) {
- gn_args += rtc_use_h264=true
- }
} else {
gn_args += proprietary_codecs=false
}

View File

@ -0,0 +1,39 @@
From: Fabian Vogt <fabian@ritter-vogt.de>
Subject: Sandbox: Handle statx and futex_time64
glibc uses statx in some more places now (e.g stat64 -> __fstatat64_time64),
but it's caught by the sandbox, which doesn't handle it and breaks.
Return -ENOSYS instead to trigger the fallback in glibc.
futex_time64 is also used internally in glibc, so handle that as well.
The signature is identical where it matters.
diff --git a/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc b/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
index 5e997009667..1cfe1f382cf 100644
--- a/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+++ b/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
@@ -196,6 +196,11 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
if (sysno == __NR_futex)
return RestrictFutex();
+#if defined(__NR_futex_time64)
+ if (sysno == __NR_futex_time64)
+ return RestrictFutex();
+#endif
+
if (sysno == __NR_set_robust_list)
return Error(EPERM);
@@ -281,6 +286,12 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
}
#endif
+#if defined(__NR_statx)
+ if (sysno == __NR_statx) {
+ return Error(ENOSYS);
+ }
+#endif
+
if (SyscallSets::IsFileSystem(sysno) ||
SyscallSets::IsCurrentDirectory(sysno)) {
return Error(fs_denied_errno);