summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJussi Kukkonen <jussi.kukkonen@intel.com>2015-10-21 16:25:31 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-10-27 07:24:26 +0000
commit48443ccd93d0406ebfe627b98ac9283f6767c1dd (patch)
tree0326914f0aa85ad9367c08be270accd3c4756315
parent59fdbaed99c9807ee943c4679d9115fe43fc7e2a (diff)
downloadpoky-48443ccd93d0406ebfe627b98ac9283f6767c1dd.tar.gz
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>
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3.inc4
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3/Do-not-try-to-initialize-GL-without-libGL.patch60
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3_3.16.6.bb1
3 files changed, 64 insertions, 1 deletions
diff --git a/meta/recipes-gnome/gtk+/gtk+3.inc b/meta/recipes-gnome/gtk+/gtk+3.inc
index 54f84fcbd2..22a40d8f05 100644
--- a/meta/recipes-gnome/gtk+/gtk+3.inc
+++ b/meta/recipes-gnome/gtk+/gtk+3.inc
@@ -32,9 +32,11 @@ EXTRA_OECONF += " \
32" 32"
33 33
34PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "x11", "x11", "", d)} \ 34PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "x11", "x11", "", d)} \
35 ${@bb.utils.contains("DISTRO_FEATURES", "opengl x11", "glx", "", d)} \
35 ${@bb.utils.contains("DISTRO_FEATURES", "wayland", "wayland", "", d)}" 36 ${@bb.utils.contains("DISTRO_FEATURES", "wayland", "wayland", "", d)}"
36 37
37PACKAGECONFIG[x11] = "--enable-x11-backend,--disable-x11-backend,at-spi2-atk fontconfig libx11 libxext libxcursor libxi libxdamage libxrandr libxrender libxcomposite libxfixes" 38PACKAGECONFIG[x11] = "--enable-x11-backend,--disable-x11-backend,at-spi2-atk fontconfig libx11 libxext libxcursor libxi libxdamage libxrandr libxrender libxcomposite libxfixes"
39PACKAGECONFIG[glx] = "--enable-glx,--disable-glx,,libgl"
38PACKAGECONFIG[wayland] = "--enable-wayland-backend,--disable-wayland-backend,wayland libxkbcommon virtual/mesa" 40PACKAGECONFIG[wayland] = "--enable-wayland-backend,--disable-wayland-backend,wayland libxkbcommon virtual/mesa"
39 41
40do_install_append() { 42do_install_append() {
@@ -57,7 +59,7 @@ FILES_${PN}-demo = "${bindir}/gtk3-demo \
57 59
58# The demo uses PNG files and mime type sniffing, so ensure that these 60# The demo uses PNG files and mime type sniffing, so ensure that these
59# dependencies are present. 61# dependencies are present.
60RDEPENDS_${PN}-demo += "gdk-pixbuf-loader-png shared-mime-info libgl" 62RDEPENDS_${PN}-demo += "gdk-pixbuf-loader-png shared-mime-info"
61 63
62FILES_${PN} = "${bindir}/gtk-update-icon-cache-3.0 \ 64FILES_${PN} = "${bindir}/gtk-update-icon-cache-3.0 \
63 ${bindir}/gtk-query-immodules-3.0 \ 65 ${bindir}/gtk-query-immodules-3.0 \
diff --git a/meta/recipes-gnome/gtk+/gtk+3/Do-not-try-to-initialize-GL-without-libGL.patch b/meta/recipes-gnome/gtk+/gtk+3/Do-not-try-to-initialize-GL-without-libGL.patch
new file mode 100644
index 0000000000..c8c480c5eb
--- /dev/null
+++ b/meta/recipes-gnome/gtk+/gtk+3/Do-not-try-to-initialize-GL-without-libGL.patch
@@ -0,0 +1,60 @@
1From fc22058a10db913534f11348f86681fe9e1838e5 Mon Sep 17 00:00:00 2001
2From: Jussi Kukkonen <jussi.kukkonen@intel.com>
3Date: Fri, 16 Oct 2015 16:35:16 +0300
4Subject: [PATCH] Do not try to initialize GL without libGL
5
6_gdk_x11_screen_update_visuals_for_gl() will end up calling epoxys
7GLX api which will exit() if libGL.so.1 is not present. We do not
8want that to happen and we don't want every app to have to set
9"GDK_GL=disabled" environment variable: so use #ifdef set based on
10opengl distro feature.
11
12Upstream is not interested in the fix as it is: Either epoxy should be
13fixed (to not exit) or GTK+ possibly could do some additional probing
14before calling epoxy APIs.
15
16Upstream-Status: Denied
17Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
18---
19 configure.ac | 7 +++++++
20 gdk/x11/gdkvisual-x11.c | 5 +++++
21 2 files changed, 12 insertions(+)
22
23diff --git a/configure.ac b/configure.ac
24index 729a62e..58cc1ac 100644
25--- a/configure.ac
26+++ b/configure.ac
27@@ -328,6 +328,13 @@ AC_ARG_ENABLE(mir-backend,
28 [enable the Mir gdk backend])],
29 [backend_set=yes])
30
31+AC_ARG_ENABLE(glx,
32+ [AS_HELP_STRING([--enable-glx],
33+ [When enabled Gdk will try to initialize GLX])])
34+AS_IF([test "x$enable_glx" != "xno"], [
35+ AC_DEFINE([HAVE_GLX], [], [GLX will be available at runtime])
36+])
37+
38 if test -z "$backend_set"; then
39 if test "$platform_win32" = yes; then
40 enable_win32_backend=yes
41diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c
42index f3b062d..c8243f4 100644
43--- a/gdk/x11/gdkvisual-x11.c
44+++ b/gdk/x11/gdkvisual-x11.c
45@@ -345,7 +345,12 @@ _gdk_x11_screen_init_visuals (GdkScreen *screen)
46 /* If GL is available we want to pick better default/rgba visuals,
47 as we care about glx details such as alpha/depth/stencil depth,
48 stereo and double buffering */
49+ /* update_visuals_for_gl() will end up calling epoxy GLX api which
50+ will exit if libgl is not there: so only do this if we know GL
51+ is available */
52+#ifdef HAVE_GLX
53 _gdk_x11_screen_update_visuals_for_gl (screen);
54+#endif
55 }
56
57 gint
58--
592.1.4
60
diff --git a/meta/recipes-gnome/gtk+/gtk+3_3.16.6.bb b/meta/recipes-gnome/gtk+/gtk+3_3.16.6.bb
index 1d736a4326..381e60750b 100644
--- a/meta/recipes-gnome/gtk+/gtk+3_3.16.6.bb
+++ b/meta/recipes-gnome/gtk+/gtk+3_3.16.6.bb
@@ -5,6 +5,7 @@ MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
5SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk+/${MAJ_VER}/gtk+-${PV}.tar.xz \ 5SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk+/${MAJ_VER}/gtk+-${PV}.tar.xz \
6 file://hardcoded_libtool.patch \ 6 file://hardcoded_libtool.patch \
7 file://Dont-force-csd.patch \ 7 file://Dont-force-csd.patch \
8 file://Do-not-try-to-initialize-GL-without-libGL.patch \
8 " 9 "
9 10
10SRC_URI[md5sum] = "fc59e5c8b5a4585b60623dd708df400b" 11SRC_URI[md5sum] = "fc59e5c8b5a4585b60623dd708df400b"