wasapi_sources = [
  'gstmmdeviceenumerator.cpp',
  'gstwasapi.c',
  'gstwasapisrc.c',
  'gstwasapisink.c',
  'gstwasapiutil.c',
  'gstwasapidevice.c',
]

wasapi_headers = [
  'gstwasapisink.h',
  'gstwasapisrc.h',
  'gstmmdeviceenumerator.h',
  'gstwasapidevice.h',
  'gstwasapiutil.h',
  'gstaudioclient3.h',
]

doc_sources = []
foreach s: wasapi_sources + wasapi_headers
  doc_sources += meson.current_source_dir() / s
endforeach

plugin_sources += {
  'wasapi': pathsep.join(doc_sources)
}

if host_system != 'windows'
  if get_option('wasapi').disabled()
    subdir_done()
  elif get_option('wasapi').enabled()
    error('Cannot build wasapi plugin when not building for Windows')
  endif
endif

ole32_dep = cc.find_library('ole32', required : get_option('wasapi'))
ksuser_dep = cc.find_library('ksuser', required : get_option('wasapi'))
have_audioclient_h = cc.has_header('audioclient.h')
if not have_audioclient_h and get_option('wasapi').enabled()
  error('wasapi plugin enabled but audioclient.h not found')
endif

if ole32_dep.found() and ksuser_dep.found() and have_audioclient_h
  wasapi_args = ['-DCOBJMACROS']
  if cc.has_header_symbol('audioclient.h', 'AUDCLNT_STREAMOPTIONS_NONE')
    wasapi_args += ['-DHAVE_AUDCLNT_STREAMOPTIONS']
  endif

  # MinGW defines some of these GUIDs in headers, whereas with MSVC we're
  # expected to define them in the code. Check which ones we need to provide.
  if cc.get_id() != 'msvc'
    if cc.has_header_symbol('audioclient.h', 'IID_IAudioClient')
      wasapi_args += ['-DHAVE_AUDCLNT_GUIDS']
    endif

    if cc.has_header_symbol('audioclient.h', 'IID_IAudioClient3')
      wasapi_args += ['-DHAVE_AUDCLNT3_GUID']
    endif
  endif

  gstwasapi = library('gstwasapi',
    wasapi_sources,
    c_args : gst_plugins_bad_args + wasapi_args,
    cpp_args: gst_plugins_bad_args,
    include_directories : [configinc],
    dependencies : [gstaudio_dep, ole32_dep, ksuser_dep],
    install : true,
    install_dir : plugins_install_dir)
  plugins += [gstwasapi]
endif
