mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-22 23:28:16 +00:00
gl: use dependency fallbacks to get at a possible gl-headers subproject
We would make the subproject conditional on the wrap-mode=nodownload however get_option('wrap-mode') or similar is not available from meson.build files as the wrap-mode is meant to be used automatically. Instead use the dependency fallback mechanism to get at the subproject where possible i.e. when downloading is allows and only add the compat includes when we have a valid internal dependency from the gl-headers subproject. https://bugzilla.gnome.org/show_bug.cgi?id=796534
This commit is contained in:
parent
3dd95b1311
commit
cfa5d64ff1
1 changed files with 43 additions and 18 deletions
|
@ -145,6 +145,7 @@ gl_winsys_deps = []
|
|||
gl_misc_deps = []
|
||||
# Other preprocessor arguments
|
||||
gl_cpp_args = []
|
||||
gl_includes = []
|
||||
|
||||
enabled_gl_apis = []
|
||||
enabled_gl_platforms = []
|
||||
|
@ -264,6 +265,20 @@ gl_include_header = '''
|
|||
#endif
|
||||
'''
|
||||
|
||||
# convoluted way of getting at the subproject taking into account the wrap-mode
|
||||
# so we don't download a subproject unless allowed
|
||||
# FIXME: dependency() needs a valid name to attempt to find otherwise meson
|
||||
# short-circuits and will always fail and never look into the fallback
|
||||
# subproject. https://github.com/mesonbuild/meson/issues/3754
|
||||
gl_header_dep = dependency('gl-headers-not-findable', method : 'pkg-config',
|
||||
fallback : ['gl-headers', 'gl_headers_dummy_dep'], required : false)
|
||||
if gl_header_dep.type_name() == 'internal'
|
||||
# this will only contain the includes of headers that are not found
|
||||
compat_includes = subproject('gl-headers').get_variable('compatibility_includes')
|
||||
else
|
||||
compat_includes = []
|
||||
endif
|
||||
|
||||
# Desktop OpenGL checks
|
||||
gl_dep = unneeded_dep
|
||||
glx_dep = unneeded_dep
|
||||
|
@ -280,13 +295,17 @@ if need_api_opengl != 'no' or need_platform_glx != 'no'
|
|||
gl_dep = cc.find_library('GL', required : false)
|
||||
endif
|
||||
|
||||
if not cc.has_header('GL/gl.h')
|
||||
if not cc.has_header('GL/gl.h', include_directories : compat_includes)
|
||||
gl_dep = unneeded_dep
|
||||
endif
|
||||
|
||||
if not gl_dep.found() and need_api_opengl == 'yes'
|
||||
error ('Could not find requested OpenGL library')
|
||||
endif
|
||||
|
||||
if gl_dep.found()
|
||||
gl_includes += [compat_includes]
|
||||
endif
|
||||
endif
|
||||
|
||||
glx_dep = gl_dep
|
||||
|
@ -331,16 +350,20 @@ if need_api_gles2 != 'no'
|
|||
gles2_dep = cc.find_library('GLESv2', required : false)
|
||||
# endif
|
||||
|
||||
if not cc.has_header('GLES2/gl2.h')
|
||||
if not cc.has_header('GLES2/gl2.h', include_directories : compat_includes)
|
||||
gles2_dep = unneeded_dep
|
||||
endif
|
||||
|
||||
if not gles2_dep.found() and need_api_gles2 == 'yes'
|
||||
error ('Could not find requested OpenGL ES library')
|
||||
endif
|
||||
|
||||
if gles2_dep.found()
|
||||
gl_includes += [compat_includes]
|
||||
endif
|
||||
endif
|
||||
|
||||
gles3_h = gles2_dep.found() and cc.has_header('GLES3/gl3.h', dependencies : gles2_dep)
|
||||
gles3_h = gles2_dep.found() and cc.has_header('GLES3/gl3.h', dependencies : gles2_dep, include_directories : compat_includes)
|
||||
|
||||
gles_includes = '''
|
||||
#ifdef HAVE_IOS /* FIXME */
|
||||
|
@ -348,7 +371,8 @@ if need_api_gles2 != 'no'
|
|||
# include <OpenGLES/ES2/glext.h>
|
||||
#else'''
|
||||
if gles3_h
|
||||
gles3ext3_h = gles3_h and cc.has_header('GLES3/gl3ext.h', dependencies : gles2_dep)
|
||||
gl_includes += [compat_includes]
|
||||
gles3ext3_h = gles3_h and cc.has_header('GLES3/gl3ext.h', dependencies : gles2_dep, include_directories : compat_includes)
|
||||
gles_includes += '''
|
||||
# include <GLES3/gl3.h>
|
||||
# include <GLES2/gl2ext.h>'''
|
||||
|
@ -371,7 +395,7 @@ if gles2_dep.found() and gl_dep.found()
|
|||
gl_include_block = gl_include_header + gles_includes + opengl_includes
|
||||
# TODO: Revert to passing gl_include_block via prefix: once
|
||||
# https://github.com/mesonbuild/meson/issues/2364 is fixed
|
||||
if not cc.compiles(gl_include_block + '\n' + 'void f (void) {}',dependencies : [gles2_dep, gl_dep])
|
||||
if not cc.compiles(gl_include_block + '\n' + 'void f (void) {}',dependencies : [gles2_dep, gl_dep], include_directories : compat_includes)
|
||||
message ('Cannot include both OpenGL and OpenGL ES headers')
|
||||
if need_api_gles2 != 'yes'
|
||||
gles2_dep = unneeded_dep
|
||||
|
@ -568,15 +592,16 @@ if need_platform_wgl == 'yes'
|
|||
endif
|
||||
endif
|
||||
|
||||
# XXX: untested
|
||||
if need_platform_wgl != 'no' and need_win_win32 != 'no'
|
||||
gdi_dep = cc.find_library('gdi32', required : false)
|
||||
# FIXME: Revert back to has_header once it gains prefix support
|
||||
wglext_h = cc.has_header_symbol('GL/wglext.h', 'WGL_WGLEXT_VERSION',
|
||||
prefix : '''#include <windows.h>
|
||||
#include <GL/gl.h>''')
|
||||
#include <GL/gl.h>''',
|
||||
include_directories : compat_includes)
|
||||
|
||||
if wglext_h and gdi_dep.found() and gl_dep.found()
|
||||
gl_includes += [compat_includes]
|
||||
gl_platform_deps += gdi_dep
|
||||
gl_sources += [
|
||||
'win32/win32_message_source.c',
|
||||
|
@ -649,7 +674,7 @@ if need_platform_egl != 'no' and need_win_viv_fb != 'no'
|
|||
endif
|
||||
|
||||
# TODO: Add rest of gl config here.
|
||||
# iOS, OS X, win32 specific support
|
||||
# iOS, OS X specific support
|
||||
|
||||
build_gstgl = true
|
||||
if enabled_gl_apis.length() == 0
|
||||
|
@ -667,28 +692,28 @@ endif
|
|||
|
||||
if build_gstgl
|
||||
# find some types that may or may not be defined
|
||||
if cc.has_type('GLeglImageOES', prefix : gl_include_block, dependencies : gl_lib_deps)
|
||||
if cc.has_type('GLeglImageOES', prefix : gl_include_block, dependencies : gl_lib_deps, include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_GLEGLIMAGEOES', 1)
|
||||
endif
|
||||
if cc.has_type('GLchar', prefix : gl_include_block, dependencies : gl_lib_deps)
|
||||
if cc.has_type('GLchar', prefix : gl_include_block, dependencies : gl_lib_deps, include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_GLCHAR', 1)
|
||||
endif
|
||||
if cc.has_type('GLsizeiptr', prefix : gl_include_block, dependencies : gl_lib_deps)
|
||||
if cc.has_type('GLsizeiptr', prefix : gl_include_block, dependencies : gl_lib_deps, include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_GLSIZEIPTR', 1)
|
||||
endif
|
||||
if cc.has_type('GLintptr', prefix : gl_include_block, dependencies : gl_lib_deps)
|
||||
if cc.has_type('GLintptr', prefix : gl_include_block, dependencies : gl_lib_deps, include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_GLINTPTR', 1)
|
||||
endif
|
||||
if cc.has_type('GLsync', prefix : gl_include_block, dependencies : gl_lib_deps)
|
||||
if cc.has_type('GLsync', prefix : gl_include_block, dependencies : gl_lib_deps, include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_GLSYNC', 1)
|
||||
endif
|
||||
if cc.has_type('GLuint64', prefix : gl_include_block, dependencies : gl_lib_deps)
|
||||
if cc.has_type('GLuint64', prefix : gl_include_block, dependencies : gl_lib_deps, include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_GLUINT64', 1)
|
||||
endif
|
||||
if cc.has_type('GLint64', prefix : gl_include_block, dependencies : gl_lib_deps)
|
||||
if cc.has_type('GLint64', prefix : gl_include_block, dependencies : gl_lib_deps, include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_GLINT64', 1)
|
||||
endif
|
||||
if egl_dep.found() and cc.has_type('EGLAttrib', prefix : gl_include_block + egl_includes, dependencies : gl_lib_deps + [egl_dep])
|
||||
if egl_dep.found() and cc.has_type('EGLAttrib', prefix : gl_include_block + egl_includes, dependencies : gl_lib_deps + [egl_dep], include_directories : gl_includes)
|
||||
glconf.set('GST_GL_HAVE_EGLATTRIB', 1)
|
||||
endif
|
||||
|
||||
|
@ -711,7 +736,7 @@ if build_gstgl
|
|||
gstgl = library('gstgl-' + api_version,
|
||||
gl_sources,
|
||||
c_args : gst_plugins_base_args + gl_cpp_args,
|
||||
include_directories : [configinc, libsinc],
|
||||
include_directories : [configinc, libsinc, gl_includes],
|
||||
version : libversion,
|
||||
soversion : soversion,
|
||||
install : true,
|
||||
|
@ -736,7 +761,7 @@ if build_gstgl
|
|||
|
||||
|
||||
gstgl_dep = declare_dependency(link_with : gstgl,
|
||||
include_directories : [libsinc],
|
||||
include_directories : [libsinc, compat_includes],
|
||||
sources: gen_sources,
|
||||
dependencies : [video_dep, gst_base_dep] + gl_winsys_deps)
|
||||
endif
|
||||
|
|
Loading…
Reference in a new issue