nvcomp_sources = [
  'gstnvcomp.cpp',
  'gstnvcompvideodec.cpp',
  'gstnvcompvideoenc.cpp',
  'plugin.cpp',
]

nvcomp_headers = [
  'gstnvcomp.h',
  'gstnvcompvideoenc.h',
  'gstnvcompvideodec.h',
]

doc_sources = []
foreach s: nvcomp_sources + nvcomp_headers
  doc_sources += meson.current_source_dir() / s
endforeach

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

extra_args = ['-DGST_USE_UNSTABLE_API']

nvcomp_opt = get_option('nvcomp')
if nvcomp_opt.disabled() or host_system not in ['windows', 'linux']
  subdir_done()
endif

nvcomp_sdk_path = get_option('nvcomp-sdk-path')
if nvcomp_sdk_path == ''
  nvcomp_sdk_path = run_command(python3, '-c', 'import os; print(os.environ.get("NVCOMP_SDK_PATH"))', check: false).stdout().strip()
endif

if nvcomp_sdk_path == '' or nvcomp_sdk_path == 'None'
  if nvcomp_opt.enabled()
    error('nvcomp-sdk-path option must be specified for nvCOMP plugin')
  endif
  subdir_done()
endif

if not gstcuda_dep.found()
  if nvcomp_opt.enabled()
    error('nvCOMP plugin was enabled explicitly, but required gstcuda was not found')
  endif
  subdir_done()
endif

nvcomp_inc_dirs = [include_directories(join_paths(nvcomp_sdk_path, 'include'), './stub'),
                   cuda_stubinc]

nvcomp_lib_path = join_paths(nvcomp_sdk_path, 'lib')
nvcomp_lib = cc.find_library('nvcomp',
                             dirs: nvcomp_lib_path, required: nvcomp_opt)
if not nvcomp_lib.found()
  subdir_done()
endif

nvcomp_bitcomp_lib = cc.find_library('nvcomp_bitcomp',
                                     dirs: nvcomp_lib_path, required: nvcomp_opt)
if not nvcomp_bitcomp_lib.found()
  subdir_done()
endif

nvcomp_gdeflate_lib = cc.find_library('nvcomp_gdeflate',
                                      dirs: nvcomp_lib_path, required: nvcomp_opt)
if not nvcomp_gdeflate_lib.found()
  subdir_done()
endif

if gstgl_dep.found()
  extra_args += ['-DHAVE_GST_GL']
endif

gstnvcomp = library('gstnvcomp',
  nvcomp_sources,
  c_args : gst_plugins_bad_args + extra_args,
  cpp_args : gst_plugins_bad_args + extra_args,
  include_directories : [configinc] + nvcomp_inc_dirs,
  dependencies :  [gstbase_dep, gstvideo_dep, gstcuda_dep, gstgl_dep, nvcomp_lib,
                  nvcomp_bitcomp_lib, nvcomp_gdeflate_lib],
  override_options : ['cpp_std=c++17'],
  install : true,
  install_dir : plugins_install_dir,
)
plugins += [gstnvcomp]
