mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-01 05:39:51 +00:00
gl/meson: add support for using bundled headers in a subproject
This is most useful when building on windows which does not ship the necessary OpenGL headers.
This commit is contained in:
parent
7ee358698d
commit
82c43ff9a3
1 changed files with 32 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,9 @@ gl_include_header = '''
|
|||
#endif
|
||||
'''
|
||||
|
||||
# this will only use the includes if they're not found
|
||||
compat_includes = subproject('gl-headers').get_variable('compatibility_includes')
|
||||
|
||||
# Desktop OpenGL checks
|
||||
gl_dep = unneeded_dep
|
||||
glx_dep = unneeded_dep
|
||||
|
@ -280,13 +284,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 +339,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 +360,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 +384,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 +581,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 +663,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 +681,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 +725,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 +750,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