gst_controller_sources = [
  'gstargbcontrolbinding.c',
  'gstdirectcontrolbinding.c',
  'gsttimedvaluecontrolsource.c',
  'gstinterpolationcontrolsource.c',
  'gstproxycontrolbinding.c',
  'gsttriggercontrolsource.c',
  'gstlfocontrolsource.c',
]

controller_mkenum_headers = [
  'gstinterpolationcontrolsource.h',
  'gstlfocontrolsource.h',
]

gst_controller_headers = controller_mkenum_headers + [
  'gstargbcontrolbinding.h',
  'gstdirectcontrolbinding.h',
  'gsttimedvaluecontrolsource.h',
  'gstinterpolationcontrolsource.h',
  'gstproxycontrolbinding.h',
  'gsttriggercontrolsource.h',
  'gstlfocontrolsource.h',
  'controller.h',
]
install_headers(gst_controller_headers, subdir : 'gstreamer-1.0/gst/controller/')

mkenums = find_program('controller_mkenum.py')
gstcontroller_h = custom_target('gstcontrollerenum_h',
  output : 'controller-enumtypes.h',
  input : controller_mkenum_headers,
  install : true,
  install_dir : 'include/gstreamer-1.0/gst/controller/',
  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])

gstcontroller_c = custom_target('gstcontrollerenum_c',
  output : 'controller-enumtypes.c',
  input : controller_mkenum_headers,
  depends : [gstcontroller_h],
  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
controller_gen_sources = [gstcontroller_h]

if libtype != 'shared'
  gst_controller_static = static_library('gstcontroller-@0@'.format(apiversion),
    gst_controller_sources, gstcontroller_h, gstcontroller_c,
    c_args : gst_c_args,
    install : true,
    include_directories : [configinc, libsinc],
    dependencies : [gobject_dep, glib_dep, mathlib, gst_dep],
  )
  gst_controller = gst_controller_static
endif


gst_controller_gen_sources = [gstcontroller_h]
if libtype != 'static'
  gst_controller_shared = shared_library('gstcontroller-@0@'.format(apiversion),
    gst_controller_sources, gstcontroller_h, gstcontroller_c,
    c_args : gst_c_args,
    install : true,
    version : libversion,
    soversion : soversion,
    include_directories : [configinc, libsinc],
    dependencies : [gobject_dep, glib_dep, mathlib, gst_dep],
    vs_module_defs: vs_module_defs_dir + 'libgstcontroller.def',
  )
  gst_controller = gst_controller_shared
  if build_gir
    gst_gir_extra_args = gir_init_section + [ '--c-include=gst/controller/controller.h' ]
    gst_controller_gir = gnome.generate_gir(gst_controller_shared,
      sources : gst_controller_sources + gst_controller_headers + [gstcontroller_h] + [gstcontroller_c],
      namespace : 'GstController',
      nsversion : apiversion,
      identifier_prefix : 'Gst',
      symbol_prefix : 'gst',
      export_packages : 'gstreamer-controller-1.0',
      dependencies : [gst_dep],
      include_directories : [configinc, libsinc, privinc],
      includes : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0', 'Gst-1.0'],
      install : true,
      extra_args : gst_gir_extra_args,
    )
    gst_controller_gen_sources += [gst_controller_gir]
  endif
endif

gst_controller_dep = declare_dependency(link_with : gst_controller,
  include_directories : [libsinc],
  sources: gst_controller_gen_sources,
  dependencies : [gst_dep])
