gtk+3: Do not try to initialize GL without libgl

Gdk initialization ends up calling epoxy GLX api, which calls exit()
if libGL.so.1 is not present. In practice this prevents all GTK+
applications from starting if GLX is not present.

If opengl and x11 distro features are set, make gtk+3 RDEPEND on libgl.
If opengl and x11 distro features are not set, use #ifdef to prevent
the GL initialization.

Remove libgl dependency from gtk3-demo: it can now run without
libgl (although trying to run the glarea demo will exit in that case).

[YOCTO #8529]

(From OE-Core rev: f9540f50ea661e260ec2b82436238cfb989e23c5)

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Jussi Kukkonen 2015-10-21 16:25:31 +03:00 committed by Richard Purdie
parent 59fdbaed99
commit 48443ccd93
3 changed files with 64 additions and 1 deletions

View File

@ -32,9 +32,11 @@ EXTRA_OECONF += " \
"
PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "x11", "x11", "", d)} \
${@bb.utils.contains("DISTRO_FEATURES", "opengl x11", "glx", "", d)} \
${@bb.utils.contains("DISTRO_FEATURES", "wayland", "wayland", "", d)}"
PACKAGECONFIG[x11] = "--enable-x11-backend,--disable-x11-backend,at-spi2-atk fontconfig libx11 libxext libxcursor libxi libxdamage libxrandr libxrender libxcomposite libxfixes"
PACKAGECONFIG[glx] = "--enable-glx,--disable-glx,,libgl"
PACKAGECONFIG[wayland] = "--enable-wayland-backend,--disable-wayland-backend,wayland libxkbcommon virtual/mesa"
do_install_append() {
@ -57,7 +59,7 @@ FILES_${PN}-demo = "${bindir}/gtk3-demo \
# The demo uses PNG files and mime type sniffing, so ensure that these
# dependencies are present.
RDEPENDS_${PN}-demo += "gdk-pixbuf-loader-png shared-mime-info libgl"
RDEPENDS_${PN}-demo += "gdk-pixbuf-loader-png shared-mime-info"
FILES_${PN} = "${bindir}/gtk-update-icon-cache-3.0 \
${bindir}/gtk-query-immodules-3.0 \

View File

@ -0,0 +1,60 @@
From fc22058a10db913534f11348f86681fe9e1838e5 Mon Sep 17 00:00:00 2001
From: Jussi Kukkonen <jussi.kukkonen@intel.com>
Date: Fri, 16 Oct 2015 16:35:16 +0300
Subject: [PATCH] Do not try to initialize GL without libGL
_gdk_x11_screen_update_visuals_for_gl() will end up calling epoxys
GLX api which will exit() if libGL.so.1 is not present. We do not
want that to happen and we don't want every app to have to set
"GDK_GL=disabled" environment variable: so use #ifdef set based on
opengl distro feature.
Upstream is not interested in the fix as it is: Either epoxy should be
fixed (to not exit) or GTK+ possibly could do some additional probing
before calling epoxy APIs.
Upstream-Status: Denied
Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
---
configure.ac | 7 +++++++
gdk/x11/gdkvisual-x11.c | 5 +++++
2 files changed, 12 insertions(+)
diff --git a/configure.ac b/configure.ac
index 729a62e..58cc1ac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -328,6 +328,13 @@ AC_ARG_ENABLE(mir-backend,
[enable the Mir gdk backend])],
[backend_set=yes])
+AC_ARG_ENABLE(glx,
+ [AS_HELP_STRING([--enable-glx],
+ [When enabled Gdk will try to initialize GLX])])
+AS_IF([test "x$enable_glx" != "xno"], [
+ AC_DEFINE([HAVE_GLX], [], [GLX will be available at runtime])
+])
+
if test -z "$backend_set"; then
if test "$platform_win32" = yes; then
enable_win32_backend=yes
diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c
index f3b062d..c8243f4 100644
--- a/gdk/x11/gdkvisual-x11.c
+++ b/gdk/x11/gdkvisual-x11.c
@@ -345,7 +345,12 @@ _gdk_x11_screen_init_visuals (GdkScreen *screen)
/* If GL is available we want to pick better default/rgba visuals,
as we care about glx details such as alpha/depth/stencil depth,
stereo and double buffering */
+ /* update_visuals_for_gl() will end up calling epoxy GLX api which
+ will exit if libgl is not there: so only do this if we know GL
+ is available */
+#ifdef HAVE_GLX
_gdk_x11_screen_update_visuals_for_gl (screen);
+#endif
}
gint
--
2.1.4

View File

@ -5,6 +5,7 @@ MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk+/${MAJ_VER}/gtk+-${PV}.tar.xz \
file://hardcoded_libtool.patch \
file://Dont-force-csd.patch \
file://Do-not-try-to-initialize-GL-without-libGL.patch \
"
SRC_URI[md5sum] = "fc59e5c8b5a4585b60623dd708df400b"