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:
parent
59fdbaed99
commit
48443ccd93
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue