mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-25 18:14:15 +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 = []
|
gl_misc_deps = []
|
||||||
# Other preprocessor arguments
|
# Other preprocessor arguments
|
||||||
gl_cpp_args = []
|
gl_cpp_args = []
|
||||||
|
gl_includes = []
|
||||||
|
|
||||||
enabled_gl_apis = []
|
enabled_gl_apis = []
|
||||||
enabled_gl_platforms = []
|
enabled_gl_platforms = []
|
||||||
|
@ -264,6 +265,9 @@ gl_include_header = '''
|
||||||
#endif
|
#endif
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
# this will only use the includes if they're not found
|
||||||
|
compat_includes = subproject('gl-headers').get_variable('compatibility_includes')
|
||||||
|
|
||||||
# Desktop OpenGL checks
|
# Desktop OpenGL checks
|
||||||
gl_dep = unneeded_dep
|
gl_dep = unneeded_dep
|
||||||
glx_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)
|
gl_dep = cc.find_library('GL', required : false)
|
||||||
endif
|
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
|
gl_dep = unneeded_dep
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if not gl_dep.found() and need_api_opengl == 'yes'
|
if not gl_dep.found() and need_api_opengl == 'yes'
|
||||||
error ('Could not find requested OpenGL library')
|
error ('Could not find requested OpenGL library')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if gl_dep.found()
|
||||||
|
gl_includes += [compat_includes]
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
glx_dep = gl_dep
|
glx_dep = gl_dep
|
||||||
|
@ -331,16 +339,20 @@ if need_api_gles2 != 'no'
|
||||||
gles2_dep = cc.find_library('GLESv2', required : false)
|
gles2_dep = cc.find_library('GLESv2', required : false)
|
||||||
# endif
|
# 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
|
gles2_dep = unneeded_dep
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if not gles2_dep.found() and need_api_gles2 == 'yes'
|
if not gles2_dep.found() and need_api_gles2 == 'yes'
|
||||||
error ('Could not find requested OpenGL ES library')
|
error ('Could not find requested OpenGL ES library')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if gles2_dep.found()
|
||||||
|
gl_includes += [compat_includes]
|
||||||
|
endif
|
||||||
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 = '''
|
gles_includes = '''
|
||||||
#ifdef HAVE_IOS /* FIXME */
|
#ifdef HAVE_IOS /* FIXME */
|
||||||
|
@ -348,7 +360,8 @@ if need_api_gles2 != 'no'
|
||||||
# include <OpenGLES/ES2/glext.h>
|
# include <OpenGLES/ES2/glext.h>
|
||||||
#else'''
|
#else'''
|
||||||
if gles3_h
|
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 += '''
|
gles_includes += '''
|
||||||
# include <GLES3/gl3.h>
|
# include <GLES3/gl3.h>
|
||||||
# include <GLES2/gl2ext.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
|
gl_include_block = gl_include_header + gles_includes + opengl_includes
|
||||||
# TODO: Revert to passing gl_include_block via prefix: once
|
# TODO: Revert to passing gl_include_block via prefix: once
|
||||||
# https://github.com/mesonbuild/meson/issues/2364 is fixed
|
# 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')
|
message ('Cannot include both OpenGL and OpenGL ES headers')
|
||||||
if need_api_gles2 != 'yes'
|
if need_api_gles2 != 'yes'
|
||||||
gles2_dep = unneeded_dep
|
gles2_dep = unneeded_dep
|
||||||
|
@ -568,15 +581,16 @@ if need_platform_wgl == 'yes'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# XXX: untested
|
|
||||||
if need_platform_wgl != 'no' and need_win_win32 != 'no'
|
if need_platform_wgl != 'no' and need_win_win32 != 'no'
|
||||||
gdi_dep = cc.find_library('gdi32', required : false)
|
gdi_dep = cc.find_library('gdi32', required : false)
|
||||||
# FIXME: Revert back to has_header once it gains prefix support
|
# FIXME: Revert back to has_header once it gains prefix support
|
||||||
wglext_h = cc.has_header_symbol('GL/wglext.h', 'WGL_WGLEXT_VERSION',
|
wglext_h = cc.has_header_symbol('GL/wglext.h', 'WGL_WGLEXT_VERSION',
|
||||||
prefix : '''#include <windows.h>
|
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()
|
if wglext_h and gdi_dep.found() and gl_dep.found()
|
||||||
|
gl_includes += [compat_includes]
|
||||||
gl_platform_deps += gdi_dep
|
gl_platform_deps += gdi_dep
|
||||||
gl_sources += [
|
gl_sources += [
|
||||||
'win32/win32_message_source.c',
|
'win32/win32_message_source.c',
|
||||||
|
@ -649,7 +663,7 @@ if need_platform_egl != 'no' and need_win_viv_fb != 'no'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# TODO: Add rest of gl config here.
|
# TODO: Add rest of gl config here.
|
||||||
# iOS, OS X, win32 specific support
|
# iOS, OS X specific support
|
||||||
|
|
||||||
build_gstgl = true
|
build_gstgl = true
|
||||||
if enabled_gl_apis.length() == 0
|
if enabled_gl_apis.length() == 0
|
||||||
|
@ -667,28 +681,28 @@ endif
|
||||||
|
|
||||||
if build_gstgl
|
if build_gstgl
|
||||||
# find some types that may or may not be defined
|
# 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)
|
glconf.set('GST_GL_HAVE_GLEGLIMAGEOES', 1)
|
||||||
endif
|
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)
|
glconf.set('GST_GL_HAVE_GLCHAR', 1)
|
||||||
endif
|
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)
|
glconf.set('GST_GL_HAVE_GLSIZEIPTR', 1)
|
||||||
endif
|
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)
|
glconf.set('GST_GL_HAVE_GLINTPTR', 1)
|
||||||
endif
|
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)
|
glconf.set('GST_GL_HAVE_GLSYNC', 1)
|
||||||
endif
|
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)
|
glconf.set('GST_GL_HAVE_GLUINT64', 1)
|
||||||
endif
|
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)
|
glconf.set('GST_GL_HAVE_GLINT64', 1)
|
||||||
endif
|
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)
|
glconf.set('GST_GL_HAVE_EGLATTRIB', 1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -711,7 +725,7 @@ if build_gstgl
|
||||||
gstgl = library('gstgl-' + api_version,
|
gstgl = library('gstgl-' + api_version,
|
||||||
gl_sources,
|
gl_sources,
|
||||||
c_args : gst_plugins_base_args + gl_cpp_args,
|
c_args : gst_plugins_base_args + gl_cpp_args,
|
||||||
include_directories : [configinc, libsinc],
|
include_directories : [configinc, libsinc, gl_includes],
|
||||||
version : libversion,
|
version : libversion,
|
||||||
soversion : soversion,
|
soversion : soversion,
|
||||||
install : true,
|
install : true,
|
||||||
|
@ -736,7 +750,7 @@ if build_gstgl
|
||||||
|
|
||||||
|
|
||||||
gstgl_dep = declare_dependency(link_with : gstgl,
|
gstgl_dep = declare_dependency(link_with : gstgl,
|
||||||
include_directories : [libsinc],
|
include_directories : [libsinc, compat_includes],
|
||||||
sources: gen_sources,
|
sources: gen_sources,
|
||||||
dependencies : [video_dep, gst_base_dep] + gl_winsys_deps)
|
dependencies : [video_dep, gst_base_dep] + gl_winsys_deps)
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in a new issue