gl_sources = [
  'gstglapi.c',
  'gstglbasefilter.c',
  'gstglbasememory.c',
  'gstglcolorconvert.c',
  'gstglbuffer.c',
  'gstglbufferpool.c',
  'gstglcontext.c',
  'gstgldebug.c',
  'gstgldisplay.c',
  'gstglfeature.c',
  'gstglfilter.c',
  'gstglformat.c',
  'gstglframebuffer.c',
  'gstglmemory.c',
  'gstglmemorypbo.c',
  'gstgloverlaycompositor.c',
  'gstglquery.c',
  'gstglrenderbuffer.c',
  'gstglshader.c',
  'gstglshaderstrings.c',
  'gstglsl.c',
  'gstglslstage.c',
  'gstglsyncmeta.c',
  'gstglupload.c',
  'gstglutils.c',
  'gstglviewconvert.c',
  'gstglwindow.c',
]

gl_headers = [
  'gl.h',
  'gl-prelude.h',
  'gstgl_enums.h',
  'gstgl_fwd.h',
  'gstglapi.h',
  'gstglbasefilter.h',
  'gstglbasememory.h',
  'gstglbuffer.h',
  'gstglbufferpool.h',
  'gstglcolorconvert.h',
  'gstglcontext.h',
  'gstgldebug.h',
  'gstgldisplay.h',
  'gstglfeature.h',
  'gstglfilter.h',
  'gstglformat.h',
  'gstglfuncs.h',
  'gstglframebuffer.h',
  'gstglmemory.h',
  'gstglmemorypbo.h',
  'gstgloverlaycompositor.h',
  'gstglquery.h',
  'gstglrenderbuffer.h',
  'gstglshader.h',
  'gstglshaderstrings.h',
  'gstglsl.h',
  'gstglslstage.h',
  'gstglsyncmeta.h',
  'gstglupload.h',
  'gstglutils.h',
  'gstglviewconvert.h',
  'gstglwindow.h',
]

gl_prototype_headers = [
  'glprototypes/all_functions.h',
  'glprototypes/base.h',
  'glprototypes/blending.h',
  'glprototypes/buffers.h',
  'glprototypes/debug.h',
  'glprototypes/eglimage.h',
  'glprototypes/fbo.h',
  'glprototypes/fixedfunction.h',
  'glprototypes/gles.h',
  'glprototypes/gstgl_compat.h',
  'glprototypes/gstgl_gles2compat.h',
  'glprototypes/opengl.h',
  'glprototypes/query.h',
  'glprototypes/shaders.h',
  'glprototypes/sync.h',
  'glprototypes/vao.h',
]

gl_x11_headers = []
gl_wayland_headers = []
gl_win32_headers = []
gl_cocoa_headers = []
gl_egl_headers = []

glconf = configuration_data()
glconf_options = [
    'GST_GL_HAVE_OPENGL',
    'GST_GL_HAVE_GLES2',
    'GST_GL_HAVE_GLES3',
    'GST_GL_HAVE_GLES3EXT3_H',

    'GST_GL_HAVE_WINDOW_X11',
    'GST_GL_HAVE_WINDOW_COCOA',
    'GST_GL_HAVE_WINDOW_WIN32',
    'GST_GL_HAVE_WINDOW_WAYLAND',
    'GST_GL_HAVE_WINDOW_ANDROID',
    'GST_GL_HAVE_WINDOW_DISPMANX',
    'GST_GL_HAVE_WINDOW_EAGL',
    'GST_GL_HAVE_WINDOW_VIV_FB',
    'GST_GL_HAVE_WINDOW_GBM',

    'GST_GL_HAVE_PLATFORM_EGL',
    'GST_GL_HAVE_PLATFORM_GLX',
    'GST_GL_HAVE_PLATFORM_WGL',
    'GST_GL_HAVE_PLATFORM_CGL',
    'GST_GL_HAVE_PLATFORM_EAGL',

    'GST_GL_HAVE_DMABUF',
    'GST_GL_HAVE_VIV_DIRECTVIV',

    'GST_GL_HAVE_GLEGLIMAGEOES',
    'GST_GL_HAVE_GLCHAR',
    'GST_GL_HAVE_GLSIZEIPTR',
    'GST_GL_HAVE_GLINTPTR',
    'GST_GL_HAVE_GLSYNC',
    'GST_GL_HAVE_GLUINT64',
    'GST_GL_HAVE_GLINT64',
    'GST_GL_HAVE_EGLATTRIB',
]

foreach option : glconf_options
  glconf.set10(option, false)
endforeach

gmodule_dep = dependency('gmodule-no-export-2.0',
  fallback: ['glib', 'libgmodule_dep'])
unneeded_dep = dependency('', required : false)
if unneeded_dep.found()
  error ('Found unfindable dependency')
endif

# OpenGL/GLES2 libraries
gl_lib_deps = []
# GL platform - EGL, GLX, CGL, WGL, etc
gl_platform_deps = []
# GL winsys - wayland, X11, Cocoa, win32, etc
gl_winsys_deps = []
# other things we need.
gl_misc_deps = []
# Other preprocessor arguments
gl_cpp_args = ['-DGST_EXPORTS']

enabled_gl_apis = []
enabled_gl_platforms = []
enabled_gl_winsys = []

# parse provided options
libegl_module_name = get_option('with_egl_module_name')
if libegl_module_name != ''
  gl_cpp_args += ['-DGST_GL_LIBEGL_MODULE_NAME="@0@"'.format(libegl_module_name)]
endif
libgles2_module_name = get_option('with_gles2_module_name')
if libgles2_module_name != ''
  gl_cpp_args += ['-DGST_GL_LIBGLESV2_MODULE_NAME="@0@"'.format(libgles2_module_name)]
endif
libgl_module_name = get_option('with_opengl_module_name')
if libgl_module_name != ''
  gl_cpp_args += ['-DGST_GL_LIBGL_MODULE_NAME="@0@"'.format(libgl_module_name)]
endif

gl_apis_s = get_option ('with_gl_api')
if gl_apis_s == 'auto'
  need_api_opengl = 'auto'
  need_api_gles2 = 'auto'
else
  need_api_opengl = 'no'
  need_api_gles2 = 'no'
  gl_apis = gl_apis_s.split(',')
  foreach api : gl_apis
    if api == 'opengl'
      need_api_opengl = 'yes'
    elif api == 'gles2'
      need_api_gles2 = 'yes'
    else
      error('Unsupported GL api provided ' + api)
    endif
  endforeach
endif

gl_platforms_s = get_option ('with_gl_platform')
if gl_platforms_s == 'auto'
  need_platform_egl = 'auto'
  need_platform_glx = 'auto'
  need_platform_cgl = 'auto'
  need_platform_wgl = 'auto'
  need_platform_eagl = 'auto'
else
  need_platform_egl = 'no'
  need_platform_glx = 'no'
  need_platform_cgl = 'no'
  need_platform_wgl = 'no'
  need_platform_eagl = 'no'
  gl_platforms = gl_platforms_s.split(',')
  foreach platform : gl_platforms
    if platform == 'egl'
      need_platform_egl = 'yes'
    elif platform == 'glx'
      need_platform_glx = 'yes'
#    elif platform == 'cgl'
#      need_platform_cgl = 'yes'
    elif platform == 'wgl'
      need_platform_wgl = 'yes'
#    elif platform == 'eagl'
#      need_platform_eagl = 'yes'
    else
      error('Unsupported GL platform provided ' + platform)
    endif
  endforeach
endif

gl_winsys_s = get_option ('with_gl_winsys')
if gl_winsys_s == 'auto'
  need_win_x11 = 'auto'
  need_win_wayland = 'auto'
  need_win_win32 = 'auto'
  need_win_cocoa = 'auto'
  need_win_eagl = 'auto'
  need_win_dispmanx = 'auto'
  need_win_viv_fb = 'auto'
  need_win_gbm = 'auto'
else
  need_win_x11 = 'no'
  need_win_wayland = 'no'
  need_win_win32 = 'no'
  need_win_cocoa = 'no'
  need_win_eagl = 'no'
  need_win_dispmanx = 'no'
  need_win_viv_fb = 'no'
  need_win_gbm = 'no'
  gl_winsys = gl_winsys_s.split(',')
  foreach winsys : gl_winsys
    if winsys == 'x11'
      need_win_x11 = 'yes'
    elif winsys == 'wayland'
      need_win_wayland = 'yes'
    elif winsys == 'win32'
      need_win_win32 = 'yes'
#    elif winsys == 'cocoa'
#      need_win_cocoa = 'yes'
#    elif winsys == 'eagl'
#      need_win_eagl = 'yes'
    elif winsys == 'dispmanx'
      need_win_dispmanx = 'yes'
    elif winsys == 'viv-fb'
      need_win_viv_fb = 'yes'
    elif winsys == 'gbm'
      need_win_gbm = 'no'
    else
      error('Unsupported GL winsys provided ' + winsys)
    endif
  endforeach
endif

gl_include_header = '''
#ifdef __GNUC__
#  pragma GCC diagnostic push
#  pragma GCC diagnostic ignored "-Wredundant-decls"
#endif
#ifndef GL_GLEXT_PROTOTYPES
#define GL_GLEXT_PROTOTYPES 1
#endif
'''

# Desktop OpenGL checks
gl_dep = unneeded_dep
glx_dep = unneeded_dep
if need_api_opengl != 'no' or need_platform_glx != 'no'
  gl_dep = dependency('gl', required : false)
  if not gl_dep.found()
    if host_machine.system() == 'windows'
      gl_dep = cc.find_library('opengl32', required : false)
#    elif host_machine.system() == 'darwin'
#      gl_dep = cc.find_library('OpenGL', required : false)
    else
      gl_dep = cc.find_library('GL', required : false)
    endif

    if not cc.has_header('GL/gl.h')
      gl_dep = unneeded_dep
    endif

    if not gl_dep.found() and need_api_opengl == 'yes'
      error ('Could not find requested OpenGL library')
    endif
  endif

  glx_dep = gl_dep
  if need_api_opengl == 'no'
    gl_dep = unneeded_dep
  endif
  if need_platform_glx == 'no'
    glx_dep = unneeded_dep
  endif

  opengl_includes = '''
#ifdef __APPLE__
# include <OpenGL/OpenGL.h>
# include <OpenGL/gl.h>
# if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#  define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
#  include <OpenGL/gl3.h>
# endif
#else
# if _MSC_VER
#  include <windows.h>
# endif
# include <GL/gl.h>
# if __WIN32__ || _WIN32
#  include <GL/glext.h>
# endif
#endif
'''
endif

# GLES2 checks
gles2_dep = unneeded_dep
gles3_h = false
gles3ext3_h = false
if need_api_gles2 != 'no'
  gles2_dep = dependency('glesv2', required : false)
  if not gles2_dep.found()
#    if host_machine.system() == 'windows'
#    elif host_machine.system() == 'darwin'
#      gles2_dep = cc.find_library('GLESv2', required : false)
#    else
      gles2_dep = cc.find_library('GLESv2', required : false)
#    endif

     if not cc.has_header('GLES2/gl2.h')
       gles2_dep = unneeded_dep
     endif

    if not gles2_dep.found() and need_api_gles2 == 'yes'
      error ('Could not find requested OpenGL ES library')
    endif
  endif

  gles3_h = gles2_dep.found() and cc.has_header('GLES3/gl3.h', dependencies : gles2_dep)

  gles_includes = '''
#ifdef HAVE_IOS /* FIXME */
# include <OpenGLES/ES2/gl.h>
# include <OpenGLES/ES2/glext.h>
#else'''
  if gles3_h
    gles3ext3_h = gles3_h and cc.has_header('GLES3/gl3ext.h', dependencies : gles2_dep)
    gles_includes += '''
# include <GLES3/gl3.h>
# include <GLES2/gl2ext.h>'''
    if gles3ext3_h
      gles_includes += '''
# include <GLES3/gl3ext.h>'''
    endif
  else
    gles_includes += '''
# include <GLES2/gl2.h>
# include <GLES2/gl2ext.h>'''
  endif
  gles_includes += '''
#endif
'''
endif

# can we include both gles2 and opengl headers?
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])
    message ('Cannot include both OpenGL and OpenGL ES headers')
    if need_api_gles2 != 'yes'
      gles2_dep = unneeded_dep
    elif need_api_opengl != 'yes'
      gl_dep = unneeded_dep
    else
      error('Both OpenGL and OpenGL ES were requested but cannot be included together')
    endif
  endif
endif
gl_include_block = gl_include_header
if gles2_dep.found()
  gl_include_block += gles_includes
endif
if gl_dep.found()
  gl_include_block += opengl_includes
endif

if gles2_dep.found()
  gl_lib_deps += gles2_dep
  glconf.set10('GST_GL_HAVE_GLES2', 1)
  if gles3_h
    glconf.set10('GST_GL_HAVE_GLES3', 1)
    if gles3ext3_h
      glconf.set10('GST_GL_HAVE_GLES3EXT3_H', 1)
    endif
  endif
  enabled_gl_apis += 'gles2'
endif

if gl_dep.found()
  gl_lib_deps += gl_dep
  glconf.set10('GST_GL_HAVE_OPENGL', 1)
  enabled_gl_apis += 'opengl'
endif

# EGL checks
egl_dep = unneeded_dep
if need_platform_egl != 'no'
  egl_dep = dependency('egl', required : false)
  if not egl_dep.found()
    egl_dep = cc.find_library('EGL', required : false)

    if not egl_dep.found() and need_platform_egl == 'yes'
      error ('Could not find requested EGL library')
    endif
  endif

  if egl_dep.found()
    gl_sources += [
      'egl/gstegl.c',
      'egl/gsteglimage.c',
      'egl/gstglcontext_egl.c',
      'egl/gstgldisplay_egl.c',
      'egl/gstglmemoryegl.c',
    ]
    gl_egl_headers += [
      'egl/gstegl.h',
      'egl/gsteglimage.h',
      'egl/gstgldisplay_egl.h',
      'egl/gstglmemoryegl.h',
    ]
    gl_platform_deps += egl_dep
    glconf.set10('GST_GL_HAVE_PLATFORM_EGL', 1)

    if cc.has_header('libdrm/drm_fourcc.h')
      gl_misc_deps += allocators_dep
      glconf.set10('GST_GL_HAVE_DMABUF', 1)
    endif

    egl_includes = '''
#include <EGL/egl.h>
#include <EGL/eglext.h>
'''
    enabled_gl_platforms += 'egl'
  endif

endif

# wayland checks
wayland_client_dep = unneeded_dep
wayland_cursor_dep = unneeded_dep
wayland_egl_dep = unneeded_dep
if need_win_wayland != 'no'
  if need_win_wayland == 'yes'
    if need_platform_egl == 'no'
      error('Impossible situation requested: Cannot use Wayland without EGL support')
    endif
  endif
  if not egl_dep.found()
    if need_win_wayland == 'yes'
      error ('Could not find EGL libraries for wayland')
    else
      message ('Could not find EGL libraries for wayland')
    endif
  else
    wayland_client_dep = dependency('wayland-client', version : '>= 1.0', required : false)
    wayland_cursor_dep = dependency('wayland-cursor', version : '>= 1.0', required : false)
    wayland_egl_dep = dependency('wayland-egl', version : '>= 1.0', required : false)

    if wayland_client_dep.found() and wayland_cursor_dep.found() and wayland_egl_dep.found()
      gl_sources += [
        'wayland/gstgldisplay_wayland.c',
        'wayland/gstglwindow_wayland_egl.c',
        'wayland/wayland_event_source.c',
      ]
      gl_wayland_headers += [
        'wayland/gstgldisplay_wayland.h'
      ]
      glconf.set('GST_GL_HAVE_WINDOW_WAYLAND', 1)
      gl_winsys_deps += [wayland_client_dep, wayland_cursor_dep, wayland_egl_dep]
      enabled_gl_winsys += 'wayland'
    else
      if need_win_wayland == 'yes'
        error ('Could not find requested Wayland libraries')
      endif
      wayland_client_dep = unneeded_dep
      wayland_cursor_dep = unneeded_dep
      wayland_egl_dep = unneeded_dep
    endif
  endif
endif

# X11 checks
if need_platform_glx == 'yes'
  if need_win_x11 == 'no'
    error('Impossible situation requested: Cannot use GLX without X11 support')
  elif need_api_opengl == 'no'
    error('Impossible situation requested: Cannot use GLX without the OpenGL library')
  endif
endif

if need_win_x11 != 'no'
  xcb_dep = dependency('x11-xcb', required : false)
  if x11_dep.found() and xcb_dep.found()
    gl_sources += [
      'x11/gstgldisplay_x11.c',
      'x11/gstglwindow_x11.c',
      'x11/xcb_event_source.c',
    ]
    gl_x11_headers += [
      'x11/gstgldisplay_x11.h',
    ]
    glconf.set('GST_GL_HAVE_WINDOW_X11', 1)
    gl_winsys_deps += [x11_dep, xcb_dep]
    enabled_gl_winsys += 'x11'

    if need_platform_glx != 'no' and glx_dep.found()
      glconf.set('GST_GL_HAVE_PLATFORM_GLX', 1)
      gl_sources += [
        'x11/gstglcontext_glx.c',
      ]
      # GLX is in the opengl library on linux
      gl_platform_deps += glx_dep
      enabled_gl_platforms += 'glx'
    endif
  elif need_win_x11 == 'yes'
    error ('Could not find requested X11 libraries')
  endif
endif

bcm_host_dep = unneeded_dep
if need_win_dispmanx != 'no'

  # Try pkg-config for bcm_host then fallback to find_library to also
  # support older distribution
  bcm_host_dep = dependency('bcm_host', required : false)
  if not bcm_host_dep.found()
    bcm_host_dep = cc.find_library('bcm_host', required : false)
  endif

  if bcm_host_dep.found()
    if not egl_dep.found()
      error('dispmanx requires the use of egl')
    endif

    gl_sources += [
      'dispmanx/gstglwindow_dispmanx_egl.c'
    ]

    glconf.set('GST_GL_HAVE_WINDOW_DISPMANX', 1)
    gl_winsys_deps += bcm_host_dep
    enabled_gl_winsys += 'dispmanx'
    gl_cpp_args += ['-DUSE_EGL_RPI']
  elif need_win_dispmanx == 'yes'
    error('Could not find dispmanx libraries')
  endif
endif

# win32 checks
if need_platform_wgl == 'yes'
  if need_win_win32 == 'no'
    error('Impossible situation requested: Cannot use WGL without the win32 window system')
  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>''')

  if wglext_h and gdi_dep.found() and gl_dep.found()
    gl_platform_deps += gdi_dep
    gl_sources += [
      'win32/win32_message_source.c',
      'win32/gstglwindow_win32.c',
      'win32/gstglwindow_win32.c',
      'win32/gstglcontext_wgl.c',
    ]
    enabled_gl_winsys += 'win32'
    gl_winsys_deps += gdi_dep
    enabled_gl_platforms += 'wgl'
    glconf.set('GST_GL_HAVE_WINDOW_WIN32', 1)
    glconf.set('GST_GL_HAVE_PLATFORM_WGL', 1)
  endif
endif

if host_machine.system() == 'darwin'
  # FIXME: how to know if we're on iOS or OS X?
#  gl_cocoa_headers += [
#    'gstglcontext_cocoa.h',
#    'gstglcaopengllayer.h',
#  ]
endif

# GDM Checks
gbm_gudev_dep = unneeded_dep
gbm_libdrm_dep = unneeded_dep
gbm_dep = unneeded_dep
if need_win_gbm != 'no'
  if need_win_gbm == 'yes'
    if need_platform_egl == 'no'
      error('Impossible situation requested: Cannot use GBM without EGL support')
    endif
  endif

  gbm_gudev_dep = dependency('gudev-1.0', version : '>=147', required : false)
  gbm_libdrm_dep = dependency('libdrm', version : '>= 2.4.55', required : false)
  gbm_dep = dependency('gbm', required : false)
  if egl_dep.found() and gbm_gudev_dep.found() and gbm_libdrm_dep.found() and gbm_dep.found()
    gl_sources += [
      'gbm/gstgldisplay_gbm.c',
      'gbm/gstgl_gbm_utils.c',
      'gbm/gstglwindow_gbm_egl.c',
    ]
    enabled_gl_winsys += 'gbm'
    gl_winsys_deps += [gbm_gudev_dep, gbm_libdrm_dep, gbm_dep]
    glconf.set('GST_GL_HAVE_WINDOW_GBM', 1)
  else
    if need_win_gbm == 'yes'
      error ('Could not find requested GBM libraries')
    endif
    gbm_gudev_dep = unneeded_dep
    gbm_libdrm_dep = unneeded_dep
    gbm_dep = unneeded_dep
  endif
endif

if need_platform_egl != 'no' and need_win_viv_fb != 'no'
  if egl_dep.found() and cc.has_function ('fbGetDisplay', dependencies : egl_dep)
    if cc.has_function ('glTexDirectVIV', dependencies : gles2_dep)
      enabled_gl_winsys += 'viv-fb'
      glconf.set10('GST_GL_HAVE_WINDOW_VIV_FB', 1)
      glconf.set10('GST_GL_HAVE_VIV_DIRECTVIV', 1)
      gl_sources += [
        'viv-fb/gstgldisplay_viv_fb.c',
        'viv-fb/gstglwindow_viv_fb_egl.c',
      ]
      gl_cpp_args += ['-DEGL_API_FB']
    endif
  endif
endif

# TODO: Add rest of gl config here.
# iOS, OS X, win32 specific support

build_gstgl = true
if enabled_gl_apis.length() == 0
  message('No OpenGL API libraries found or requested')
  build_gstgl = false
endif
if enabled_gl_platforms.length() == 0
  message('No OpenGL Platforms found or requested')
  build_gstgl = false
endif
if enabled_gl_winsys.length() == 0
  message('No OpenGL Window systems found or requested')
  build_gstgl = false
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)
    glconf.set('GST_GL_HAVE_GLEGLIMAGEOES', 1)
  endif
  if cc.has_type('GLchar', prefix : gl_include_block, dependencies : gl_lib_deps)
    glconf.set('GST_GL_HAVE_GLCHAR', 1)
  endif
  if cc.has_type('GLsizeiptr', prefix : gl_include_block, dependencies : gl_lib_deps)
    glconf.set('GST_GL_HAVE_GLSIZEIPTR', 1)
  endif
  if cc.has_type('GLintptr', prefix : gl_include_block, dependencies : gl_lib_deps)
    glconf.set('GST_GL_HAVE_GLINTPTR', 1)
  endif
  if cc.has_type('GLsync', prefix : gl_include_block, dependencies : gl_lib_deps)
    glconf.set('GST_GL_HAVE_GLSYNC', 1)
  endif
  if cc.has_type('GLuint64', prefix : gl_include_block, dependencies : gl_lib_deps)
    glconf.set('GST_GL_HAVE_GLUINT64', 1)
  endif
  if cc.has_type('GLint64', prefix : gl_include_block, dependencies : gl_lib_deps)
    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])
    glconf.set('GST_GL_HAVE_EGLATTRIB', 1)
  endif

  message('Building libgstgl with GL api:      ' + ' '.join(enabled_gl_apis))
  message('Building libgstgl with GL platform: ' + ' '.join(enabled_gl_platforms))
  message('Building libgstgl with GL winsys:   ' + ' '.join(enabled_gl_winsys))

  install_headers(gl_headers, subdir : 'gstreamer-1.0/gst/gl')
  install_headers(gl_cocoa_headers, subdir : 'gstreamer-1.0/gst/gl/cocoa')
  install_headers(gl_egl_headers, subdir : 'gstreamer-1.0/gst/gl/egl')
  install_headers(gl_prototype_headers, subdir : 'gstreamer-1.0/gst/gl/glprototypes')
  install_headers(gl_x11_headers, subdir : 'gstreamer-1.0/gst/gl/x11')
  install_headers(gl_wayland_headers, subdir : 'gstreamer-1.0/gst/gl/wayland')

  configure_file(input : 'gstglconfig.h.meson',
    output : 'gstglconfig.h',
    install_dir : get_option('libdir') + '/gstreamer-1.0/include/gst/gl',
    configuration : glconf)

  gstgl = library('gstgl-' + api_version,
    gl_sources,
    c_args : gst_plugins_base_args + gl_cpp_args,
    include_directories : [configinc, libsinc],
    version : libversion,
    soversion : soversion,
    install : true,
    dependencies : [gst_base_dep, video_dep, allocators_dep, gmodule_dep,
                    gl_lib_deps, gl_platform_deps, gl_winsys_deps, gl_misc_deps])
  gen_sources = []
  if build_gir
    gl_gir = gnome.generate_gir(gstgl,
      sources : gl_sources + gl_headers,
      namespace : 'GstGL',
      nsversion : api_version,
      identifier_prefix : 'Gst',
      symbol_prefix : 'gst',
      export_packages : 'gstreamer-gl-1.0',
      includes : ['Gst-1.0', 'GstBase-1.0', 'GstVideo-1.0'],
      install : true,
      extra_args : gir_init_section + ['--c-include=gst/gl/gl.h'],
      dependencies : [video_dep, gst_dep, gst_base_dep]
    )
    gen_sources += gl_gir
  endif


  gstgl_dep = declare_dependency(link_with : gstgl,
    include_directories : [libsinc],
    sources: gen_sources,
    dependencies : [video_dep, gst_base_dep] + gl_winsys_deps)
endif
