summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2020-08-26 19:15:19 +1000
committerTim-Philipp Müller <tim@centricular.com>2020-08-27 00:08:08 +0000
commit1cc18ec186dcc5494994edd9e658dea987780741 (patch)
treed28afb253499751e7943d2e0ef727c137931cd01
parent8cacd54e8fa78cb471ce222a8881f57d6c209cbc (diff)
downloadgstreamer-plugins-base-1cc18ec186dcc5494994edd9e658dea987780741.tar.gz
gl/build: build with implicit_include_directories : false
Fixes case-insensitive file systems confusing gst-libs/gst/gl/egl/egl.h with EGL/egl.h when the source directory gst-libs/gst/gl is automatically added to the compiler's search path. Due to https://github.com/mesonbuild/meson/issues/7582 we also need to perform manual enumtype generation. Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/814
-rw-r--r--gst-libs/gst/gl/gl_mkenum.py55
-rw-r--r--gst-libs/gst/gl/meson.build27
2 files changed, 72 insertions, 10 deletions
diff --git a/gst-libs/gst/gl/gl_mkenum.py b/gst-libs/gst/gl/gl_mkenum.py
new file mode 100644
index 000000000..c8ffb1906
--- /dev/null
+++ b/gst-libs/gst/gl/gl_mkenum.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+# This is in its own file rather than inside meson.build
+# because a) mixing the two is ugly and b) trying to
+# make special characters such as \n go through all
+# backends is a fool's errand.
+
+import sys, subprocess
+
+h_array = ['--fhead',
+ "#pragma once\n\n#include <gst/gst.h>\n#include <gst/gl/gstgl_fwd.h>\nG_BEGIN_DECLS\n",
+ '--fprod',
+ "\n/* enumerations from \"@basename@\" */\n",
+ '--vhead',
+ "GST_GL_API\nGType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n",
+ '--ftail',
+ "G_END_DECLS"
+]
+
+c_array = ['--fhead',
+ "#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n#include \"gl-enumtypes.h\"\n\n#include <gst/gl/gl.h>\n\n#define C_ENUM(v) ((gint) v)\n#define C_FLAGS(v) ((guint) v)",
+ '--fprod',
+ "\n/* enumerations from \"@basename@\" */",
+ '--vhead',
+ "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {",
+ '--vprod',
+ " { C_@TYPE@ (@VALUENAME@), \"@VALUENAME@\", \"@valuenick@\" },",
+ '--vtail',
+ " { 0, NULL, NULL }\n };\n GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n }\n return g_define_type_id__volatile;\n}\n"
+]
+
+cmd = []
+argn = 1
+# Find the full command needed to run glib-mkenums
+# On UNIX-like, this is just the full path to glib-mkenums
+# On Windows, this is the full path to interpreter + full path to glib-mkenums
+for arg in sys.argv[1:]:
+ cmd.append(arg)
+ argn += 1
+ if arg.endswith('glib-mkenums'):
+ break
+ofilename = sys.argv[argn]
+headers = sys.argv[argn + 1:]
+
+if ofilename.endswith('.h'):
+ arg_array = h_array
+else:
+ arg_array = c_array
+
+cmd_array = cmd + arg_array + headers
+pc = subprocess.Popen(cmd_array, stdout=subprocess.PIPE)
+(stdo, _) = pc.communicate()
+if pc.returncode != 0:
+ sys.exit(pc.returncode)
+open(ofilename, 'wb').write(stdo)
diff --git a/gst-libs/gst/gl/meson.build b/gst-libs/gst/gl/meson.build
index c051e3823..aab2b1352 100644
--- a/gst-libs/gst/gl/meson.build
+++ b/gst-libs/gst/gl/meson.build
@@ -973,15 +973,20 @@ if build_gstgl
install_dir : get_option('libdir') + '/gstreamer-1.0/include/gst/gl',
configuration : glconf)
- gl_enums = gnome.mkenums_simple('gl-enumtypes',
- sources : gir_gl_headers,
- body_prefix : '#ifdef HAVE_CONFIG_H\n#include "config.h"\n#endif',
- header_prefix : '#include <gst/gl/gl-prelude.h>',
- decorator : 'GST_GL_API',
- install_header: true,
- install_dir : join_paths(get_option('includedir'), 'gstreamer-1.0/gst/gl'))
- gl_enumtypes_c = gl_enums[0]
- gl_enumtypes_h = gl_enums[1]
+ glib_mkenums = find_program('glib-mkenums')
+ mkenums = find_program('gl_mkenum.py')
+ gl_enumtypes_h = custom_target('gstglenumtypes_h',
+ output : 'gl-enumtypes.h',
+ input : gir_gl_headers,
+ install : true,
+ install_dir : join_paths(get_option('includedir'), 'gstreamer-1.0/gst/gl/'),
+ command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+ gl_enumtypes_c = custom_target('gstglenumtypes_c',
+ output : 'gl-enumtypes.c',
+ input : gir_gl_headers,
+ depends : [gl_enumtypes_h],
+ command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
gen_sources = [gl_enumtypes_h]
gstgl = library('gstgl-' + api_version,
@@ -995,7 +1000,9 @@ if build_gstgl
darwin_versions : osxversion,
install : true,
dependencies : [gst_base_dep, video_dep, allocators_dep, gmodule_dep,
- gl_lib_deps, gl_platform_deps, gl_winsys_deps, gl_misc_deps])
+ gl_lib_deps, gl_platform_deps, gl_winsys_deps, gl_misc_deps],
+ # don't confuse EGL/egl.h with gst-libs/gl/egl/egl.h on case-insensitive file systems
+ implicit_include_directories : true)
if build_gir
gl_gir = gnome.generate_gir(gstgl,