From 82c43ff9a32f1c1d113cd6e1e8d046b7ab64422d Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Wed, 6 Jun 2018 17:27:15 +1000 Subject: [PATCH] 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. --- gst-libs/gst/gl/meson.build | 50 ++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/gst-libs/gst/gl/meson.build b/gst-libs/gst/gl/meson.build index 4b6a5f0c06..434392a430 100644 --- a/gst-libs/gst/gl/meson.build +++ b/gst-libs/gst/gl/meson.build @@ -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 #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 # include ''' @@ -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 - #include ''') + #include ''', + 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