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>
.