00012bf9d5
The build was broken in 5.6.2 and was disabled. It compiles fine since 5.6.3. The two additional patches are useful at run-time. The first one avoid the need to specify the path to the SSL certificate directory (using an additional environment variable). The second one is the same used in 5.9.x (plus resolved conflicts). It uses the process's context to get handles on EGL and GLESv2 libraries. Those libraries are linked to Qt WebEngine at compile time. The patch is particularly usefull for RPI boards since the raspberrypi userland package does not provide the libEGLv2.so.2 and libGLES.so.1 symlinks. Both library paths are hardcoded in Qt WebEngine. Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
94 lines
3.5 KiB
Diff
94 lines
3.5 KiB
Diff
From bdfd084296681bcead17c42f1e5cf0e24ee04f65 Mon Sep 17 00:00:00 2001
|
|
From: Viktor Engelmann <viktor.engelmann@qt.io>
|
|
Date: Fri, 7 Jul 2017 12:56:19 +0200
|
|
Subject: [PATCH] Load libEGL and libGLES2 symbols implicitly
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=utf-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Instead of explicitly loading libraries from hard-coded locations,
|
|
we now just call dlopen(NULL, RTLD_LAZY). This returns a handle to
|
|
the host process'es context, which already contains the symbols of
|
|
both these libraries, because we link against them.
|
|
It was necessary to bypass LoadLibrary, because that expects a non-NULL
|
|
file path, so we couldn't pass NULL through that interface.
|
|
|
|
Upstream-Status: Merged
|
|
Task-number: QTBUG-57761
|
|
Change-Id: I29f037dfe542222b5188a33c7727c81a464a87bb
|
|
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
|
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
|
|
Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
|
|
[gportay: backport from 5.9 and merge conflicts]
|
|
---
|
|
src/core/surface_factory_qt.cpp | 40 ++++++++--------------------------------
|
|
1 file changed, 8 insertions(+), 32 deletions(-)
|
|
|
|
diff --git a/src/core/surface_factory_qt.cpp b/src/core/surface_factory_qt.cpp
|
|
index 48c91bfc..c6059b67 100644
|
|
--- a/src/core/surface_factory_qt.cpp
|
|
+++ b/src/core/surface_factory_qt.cpp
|
|
@@ -51,51 +51,27 @@
|
|
#if defined(USE_OZONE)
|
|
|
|
#include <EGL/egl.h>
|
|
-
|
|
-#ifndef QT_LIBDIR_EGL
|
|
-#define QT_LIBDIR_EGL "/usr/lib"
|
|
-#endif
|
|
-#ifndef QT_LIBDIR_GLES2
|
|
-#define QT_LIBDIR_GLES2 QT_LIBDIR_EGL
|
|
-#endif
|
|
+#include <dlfcn.h>
|
|
|
|
namespace QtWebEngineCore {
|
|
|
|
-base::NativeLibrary LoadLibrary(const base::FilePath& filename) {
|
|
- base::NativeLibraryLoadError error;
|
|
- base::NativeLibrary library = base::LoadNativeLibrary(filename, &error);
|
|
- if (!library) {
|
|
- LOG(ERROR) << "Failed to load " << filename.MaybeAsASCII() << ": " << error.ToString();
|
|
- return NULL;
|
|
- }
|
|
- return library;
|
|
-}
|
|
-
|
|
bool SurfaceFactoryQt::LoadEGLGLES2Bindings(AddGLLibraryCallback add_gl_library, SetGLGetProcAddressProcCallback set_gl_get_proc_address)
|
|
{
|
|
- base::FilePath libEGLPath = QtWebEngineCore::toFilePath(QT_LIBDIR_EGL);
|
|
- libEGLPath = libEGLPath.Append("libEGL.so.1");
|
|
- base::NativeLibrary eglLibrary = LoadLibrary(libEGLPath);
|
|
- if (!eglLibrary)
|
|
- return false;
|
|
-
|
|
- base::FilePath libGLES2Path = QtWebEngineCore::toFilePath(QT_LIBDIR_GLES2);
|
|
- libGLES2Path = libGLES2Path.Append("libGLESv2.so.2");
|
|
- base::NativeLibrary gles2Library = LoadLibrary(libGLES2Path);
|
|
- if (!gles2Library)
|
|
+ base::NativeLibrary eglgles2Library = dlopen(NULL, RTLD_LAZY);
|
|
+ if (!eglgles2Library) {
|
|
+ LOG(ERROR) << "Failed to open EGL/GLES2 context " << dlerror();
|
|
return false;
|
|
+ }
|
|
|
|
- gfx::GLGetProcAddressProc get_proc_address = reinterpret_cast<gfx::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglLibrary, "eglGetProcAddress"));
|
|
+ gfx::GLGetProcAddressProc get_proc_address = reinterpret_cast<gfx::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglgles2Library, "eglGetProcAddress"));
|
|
if (!get_proc_address) {
|
|
LOG(ERROR) << "eglGetProcAddress not found.";
|
|
- base::UnloadNativeLibrary(eglLibrary);
|
|
- base::UnloadNativeLibrary(gles2Library);
|
|
+ base::UnloadNativeLibrary(eglgles2Library);
|
|
return false;
|
|
}
|
|
|
|
gfx::SetGLGetProcAddressProc(get_proc_address);
|
|
- gfx::AddGLNativeLibrary(eglLibrary);
|
|
- gfx::AddGLNativeLibrary(gles2Library);
|
|
+ gfx::AddGLNativeLibrary(eglgles2Library);
|
|
return true;
|
|
}
|
|
|
|
--
|
|
2.15.0
|
|
|