Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • mutter mutter
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 1,106
    • Issues 1,106
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 126
    • Merge requests 126
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GNOMEGNOME
  • muttermutter
  • Issues
  • #876
Closed
Open
Issue created Oct 21, 2019 by Jan Alexander Steffens@heftig

Missing include of eglmesaext.h

Arch Linux recently moved its GL headers from mesa to libglvnd:
Change to mesa package
Change to libglvnd package

Now Mutter fails to build:

FAILED: cogl/cogl/d9c41d2@@mutter-cogl-5@sha/winsys_cogl-winsys-egl.c.o 
ccache cc -Icogl/cogl/d9c41d2@@mutter-cogl-5@sha -Icogl/cogl -I../cogl/cogl -Icogl -I../cogl -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib/libffi-3.2.1/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/sysprof-3 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -g -D_GNU_SOURCE -fno-strict-aliasing -Wpointer-arith -Wmissing-declarations -Wimplicit-function-declaration -Wformat=2 -Wformat-nonliteral -Wformat-security -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wundef -Wunused -Wcast-align -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-include-dirs -Wlogical-op -Wignored-qualifiers -Werror=redundant-decls -Werror=implicit -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces -Werror=sequence-point -Werror=return-type -Werror=trigraphs -Werror=array-bounds -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast -Werror=empty-body -Werror=write-strings -DG_ENABLE_DEBUG -fno-omit-frame-pointer -fPIC -pthread '-DCOGL_LOCALEDIR="/usr/share/locale"' -DCOGL_COMPILATION '-DCOGL_GL_LIBNAME="libGL.so.1"' '-DCOGL_GLES2_LIBNAME="libGLESv2.so"' -DCOGL_GL_DEBUG -DCOGL_OBJECT_DEBUG -DCOGL_ENABLE_DEBUG -fno-omit-frame-pointer -MD -MQ 'cogl/cogl/d9c41d2@@mutter-cogl-5@sha/winsys_cogl-winsys-egl.c.o' -MF 'cogl/cogl/d9c41d2@@mutter-cogl-5@sha/winsys_cogl-winsys-egl.c.o.d' -o 'cogl/cogl/d9c41d2@@mutter-cogl-5@sha/winsys_cogl-winsys-egl.c.o' -c ../cogl/cogl/winsys/cogl-winsys-egl.c
../cogl/cogl/winsys/cogl-winsys-egl.c: In function ‘_cogl_winsys_display_setup’:
../cogl/cogl/winsys/cogl-winsys-egl.c:465:23: error: ‘CoglRendererEGL’ {aka ‘struct _CoglRendererEGL’} has no member named ‘pf_eglBindWaylandDisplay’
  465 |       if (egl_renderer->pf_eglBindWaylandDisplay)
      |                       ^~
../cogl/cogl/winsys/cogl-winsys-egl.c:466:14: error: ‘CoglRendererEGL’ {aka ‘struct _CoglRendererEGL’} has no member named ‘pf_eglBindWaylandDisplay’
  466 |  egl_renderer->pf_eglBindWaylandDisplay (egl_renderer->edpy,
      |              ^~
../cogl/cogl/winsys/cogl-winsys-egl.c: In function ‘_cogl_egl_create_image’:
../cogl/cogl/winsys/cogl-winsys-egl.c:900:17: error: ‘EGL_WAYLAND_BUFFER_WL’ undeclared (first use in this function)
  900 |   if (target == EGL_WAYLAND_BUFFER_WL)
      |                 ^~~~~~~~~~~~~~~~~~~~~
../cogl/cogl/winsys/cogl-winsys-egl.c:900:17: note: each undeclared identifier is reported only once for each function it appears in

It seems the issue is that eglmesaext.h is no longer included by eglext.h. The following patch fixes the issue:

Patch adding #include <EGL/eglmesaext.h>
 cogl/cogl/meson.build       | 2 +-
 src/backends/meta-egl-ext.h | 1 +
 src/backends/meta-egl.c     | 1 +
 src/backends/meta-egl.h     | 1 +
 4 files changed, 4 insertions(+), 1 deletion(-)

diff --git c/cogl/cogl/meson.build i/cogl/cogl/meson.build
index 1057ef955..9a642947d 100644
--- c/cogl/cogl/meson.build
+++ i/cogl/cogl/meson.build
@@ -48,7 +48,7 @@ cogl_gl_header_h = configure_file(
 built_headers += [cogl_gl_header_h]
 
 if have_egl
-  cogl_egl_includes_string = '#include <EGL/egl.h>\n#include <EGL/eglext.h>'
+  cogl_egl_includes_string = '#include <EGL/egl.h>\n#include <EGL/eglext.h>\n#include <EGL/eglmesaext.h>'
 else
   cogl_egl_includes_string = ''
 endif
diff --git c/src/backends/meta-egl-ext.h i/src/backends/meta-egl-ext.h
index 8705e7d5b..db0b74f76 100644
--- c/src/backends/meta-egl-ext.h
+++ i/src/backends/meta-egl-ext.h
@@ -29,6 +29,7 @@
 
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
+#include <EGL/eglmesaext.h>
 
 /*
  * This is a little different to the tests shipped with EGL implementations,
diff --git c/src/backends/meta-egl.c i/src/backends/meta-egl.c
index 6554be935..fdeff4f77 100644
--- c/src/backends/meta-egl.c
+++ i/src/backends/meta-egl.c
@@ -27,6 +27,7 @@
 
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
+#include <EGL/eglmesaext.h>
 #include <gio/gio.h>
 #include <glib.h>
 #include <glib-object.h>
diff --git c/src/backends/meta-egl.h i/src/backends/meta-egl.h
index f2a816445..4591e7d85 100644
--- c/src/backends/meta-egl.h
+++ i/src/backends/meta-egl.h
@@ -28,6 +28,7 @@
 
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
+#include <EGL/eglmesaext.h>
 #include <glib-object.h>
 
 #define META_EGL_ERROR meta_egl_error_quark ()

I'm not sure this is the best approach, though. Are there configurations where the Mesa extensions are not needed?
I.e. the cogl_egl_includes_string would only conditionally contain #include <EGL/eglmesaext.h>.

Assignee
Assign to
Time tracking