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:
Matthew Waters 2018-06-06 17:27:15 +10:00
parent 7ee358698d
commit 82c43ff9a3

View file

@ -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