diff --git gdk/x11/gdkdisplay-x11.c gdk/x11/gdkdisplay-x11.c
index 84a45dc..685a1f9 100644
--- gdk/x11/gdkdisplay-x11.c
+++ gdk/x11/gdkdisplay-x11.c
@@ -56,7 +56,9 @@
 #include <errno.h>
 #include <unistd.h>
 
+#ifdef HAVE_EGL
 #include <epoxy/egl.h>
+#endif
 
 #include <X11/Xatom.h>
 #include <X11/Xlibint.h>
@@ -2916,6 +2918,7 @@ visual_is_rgba (XVisualInfo *visinfo)
     visinfo->visual->blue_mask  == 0x0000ff;
 }
 
+#ifdef HAVE_EGL
 static guint
 gdk_x11_display_rate_egl_config (GdkDisplay *display,
                                  gpointer    egl_display,
@@ -2942,7 +2945,9 @@ gdk_x11_display_rate_egl_config (GdkDisplay *display,
 
   return distance;
 }
+#endif
 
+#ifdef HAVE_EGL
 static gboolean
 gdk_x11_display_init_gl_backend (GdkX11Display  *self,
                                  Visual        **out_visual,
@@ -2997,6 +3002,26 @@ gdk_x11_display_init_gl_backend (GdkX11Display  *self,
 
   return TRUE;
 }
+#else /* HAVE_EGL */
+
+static gboolean
+gdk_x11_display_init_gl_backend (GdkX11Display  *self,
+                                 Visual        **out_visual,
+                                 int            *out_depth,
+                                 GError        **error)
+{
+  GdkDisplay *display = GDK_DISPLAY (self);
+  Display *dpy = gdk_x11_display_get_xdisplay (GDK_DISPLAY (self));
+  XVisualInfo *visinfo;
+  int visualid;
+
+  if (gdk_x11_display_init_glx (self, out_visual, out_depth, error))
+    return TRUE;
+  else
+    return FALSE;
+}
+#endif /* HAVE_EGL */
+
 
 static GdkGLContext *
 gdk_x11_display_init_gl (GdkDisplay  *display,
@@ -3011,8 +3036,12 @@ gdk_x11_display_init_gl (GdkDisplay  *display,
 
   if (self->glx_config != NULL)
     return g_object_new (GDK_TYPE_X11_GL_CONTEXT_GLX, "surface", self->leader_gdk_surface, NULL);
+
+#ifdef HAVE_EGL
   else if (gdk_display_get_egl_display (display))
     return g_object_new (GDK_TYPE_X11_GL_CONTEXT_EGL, "surface", self->leader_gdk_surface, NULL);
+#endif
+
   else
     g_return_val_if_reached (NULL);
 }
@@ -3048,7 +3077,10 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
   display_class->get_keymap = gdk_x11_display_get_keymap;
 
   display_class->init_gl = gdk_x11_display_init_gl;
+
+#ifdef HAVE_EGL
   display_class->rate_egl_config = gdk_x11_display_rate_egl_config;
+#endif
 
   display_class->get_default_seat = gdk_x11_display_get_default_seat;
 
diff --git gdk/x11/meson.build gdk/x11/meson.build
index 58d12bb..1e5f9c7 100644
--- gdk/x11/meson.build
+++ gdk/x11/meson.build
@@ -8,7 +8,6 @@ gdk_x11_public_sources = files([
   'gdkdevicemanager-x11.c',
   'gdkdevicemanager-xi2.c',
   'gdkdisplay-x11.c',
-  'gdkglcontext-egl.c',
   'gdkglcontext-glx.c',
   'gdkglcontext-x11.c',
   'gdkkeys-x11.c',
diff --git gtk/inspector/general.c gtk/inspector/general.c
index 951ce98..7f51083 100644
--- gtk/inspector/general.c
+++ gtk/inspector/general.c
@@ -40,8 +40,10 @@
 #ifdef GDK_WINDOWING_X11
 #include "x11/gdkx.h"
 #include <epoxy/glx.h>
+#ifdef HAVE_EGL
 #include <epoxy/egl.h>
 #endif
+#endif
 
 #ifdef GDK_WINDOWING_WIN32
 #include "win32/gdkwin32.h"
@@ -289,7 +291,7 @@ append_wgl_extension_row (GtkInspectorGeneral *gen,
 }
 #endif
 
-#if defined(GDK_WINDOWING_WAYLAND) || defined (GDK_WINDOWING_X11) || (defined (GDK_WINDOWING_WIN32) && defined(GDK_WIN32_ENABLE_EGL))
+#if defined(GDK_WINDOWING_WAYLAND) || (defined (GDK_WINDOWING_X11) && defined (HAVE_EGL)) || (defined (GDK_WINDOWING_WIN32) && defined(GDK_WIN32_ENABLE_EGL))
 static void
 append_egl_extension_row (GtkInspectorGeneral *gen,
                           EGLDisplay          dpy,
@@ -341,7 +343,7 @@ init_gl (GtkInspectorGeneral *gen)
       return;
     }
 
-#if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WAYLAND) || (defined(GDK_WINDOWING_WIN32) && defined(GDK_WIN32_ENABLE_EGL))
+#if defined(GDK_WINDOWING_WAYLAND) || (defined (GDK_WINDOWING_X11) && defined (HAVE_EGL)) || (defined (GDK_WINDOWING_WIN32) && defined(GDK_WIN32_ENABLE_EGL))
   EGLDisplay egl_display = get_egl_display (gen->display);
   if (egl_display)
     {
