meson: re-add incorrect pkg-config files with GLVND for backward compatibility
authorEric Engestrom <eric.engestrom@intel.com>
Thu, 19 Sep 2019 13:18:55 +0000 (14:18 +0100)
committerEric Engestrom <eric.engestrom@intel.com>
Wed, 25 Sep 2019 16:27:54 +0000 (17:27 +0100)
This is a bit counter-intuitive, but the issue is that GLVND is broken
in versions <= 1.1.1, so we need to keep wrongly providing these files
to cover up their mistake, otherwise the rest of the world ends up
broken.

Suggested-by: Dylan Baker <dylan@pnwbakers.com>
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
meson.build
src/egl/meson.build
src/mapi/meson.build
src/meson.build

index 4a80d6a55addd232e42ac4c977837c160cdde186..0e46fde5edc970702bc89edefa327c561d06a4f8 100644 (file)
@@ -1328,6 +1328,10 @@ endif
 dep_glvnd = null_dep
 if with_glvnd
   dep_glvnd = dependency('libglvnd', version : '>= 0.2.0')
+  # GLVND until commit 0dfaea2bcb7cdcc785f9 ("Add pkg-config files for EGL, GL,
+  # GLES, and GLX.") was missing its pkg-config files, forcing every vendor to
+  # provide them and the distro maintainers to resolve the conflict.
+  glvnd_missing_pc_files = dep_glvnd.version().version_compare('< 1.2.0')
   pre_args += '-DUSE_LIBGLVND=1'
 endif
 
index 14aca2a2186ea62bd21b7756f00ea9b80f93a491..7038a68e955f3587b7679cac83d4e54668324762 100644 (file)
@@ -173,18 +173,25 @@ libegl = shared_library(
   version : egl_lib_version,
 )
 
-if not with_glvnd
-  pkg.generate(
-    name : 'egl',
-    description : 'Mesa EGL Library',
-    version : meson.project_version(),
-    libraries : libegl,
-    libraries_private: gl_priv_libs,
-    requires_private : gl_priv_reqs,
-    extra_cflags : gl_pkgconfig_c_flags,
-  )
+# If using glvnd the pkg-config header should not point to EGL_mesa, it should
+# point to EGL. glvnd is only available on unix like platforms so adding -l
+# should be safe here
+if with_glvnd and glvnd_missing_pc_files
+  _egl = '-L${libdir} -lEGL'
+else
+  _egl = libegl
 endif
 
+pkg.generate(
+  name : 'egl',
+  description : 'Mesa EGL Library',
+  version : meson.project_version(),
+  libraries : _egl,
+  libraries_private: gl_priv_libs,
+  requires_private : gl_priv_reqs,
+  extra_cflags : gl_pkgconfig_c_flags,
+)
+
 if with_tests and prog_nm.found()
   if with_glvnd
     egl_symbols = files('egl-glvnd-symbols.txt')
index 2c79a04f1df2dbaf3851540ef0830ee884d18203..39c1dba7ce0318d968f45899a8ec927e5d8f257c 100644 (file)
@@ -35,7 +35,7 @@ if with_shared_glapi
 else
   libglapi = []
 endif
-if not with_glvnd
+if not with_glvnd or glvnd_missing_pc_files
   if with_gles1
     subdir('es1api')
   endif
index 11e0011c057426edec4711d3087b40b93f8c86e7..ddbcd7f3ae42819cae40caaa1146589f4ff30d57 100644 (file)
@@ -111,12 +111,22 @@ endif
 
 # This must be after at least mesa, glx, and gallium, since libgl will be
 # defined in one of those subdirs depending on the glx provider.
-if with_glx != 'disabled' and not with_glvnd
+if with_glx != 'disabled'
+  # If using glvnd the pkg-config header should not point to GL_mesa, it should
+  # point to GL. glvnd is only available on unix like platforms so adding -l
+  # should be safe here
+  # TODO: in the glvnd case glvnd itself should really be providing this.
+  if with_glvnd and glvnd_missing_pc_files
+    _gl = '-L${libdir} -lGL'
+  else
+    _gl = libgl
+  endif
+
   pkg.generate(
     name : 'gl',
     description : 'Mesa OpenGL Library',
     version : meson.project_version(),
-    libraries : libgl,
+    libraries : _gl,
     libraries_private : gl_priv_libs,
     requires_private : gl_priv_reqs,
     variables : ['glx_tls=yes'],