gstreamer/subprojects/gstreamer-sharp/meson.build
Nirbheek Chauhan a0e6278dba meson: Use implicit builtin dirs in pkgconfig generation
Starting with Meson 0.62, meson automatically populates the variables
list in the pkgconfig file if you reference builtin directories in the
pkgconfig file (whether via a custom pkgconfig variable or elsewhere).
We need this, because ${prefix}/libexec is a hard-coded value which is
incorrect on, for example, Debian.

Bump requirement to 0.62, and remove version compares that retained
support for older Meson versions.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1245

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3061>
2022-09-21 21:08:11 +05:30

186 lines
7 KiB
Meson

project('gstreamer-sharp', ['cs', 'c'], version: '1.21.0.1',
meson_version : '>= 0.62', license: 'LGPL')
if host_machine.system() == 'osx'
lib_prefix=''
lib_suffix='.dylib'
else
lib_prefix='.so'
lib_suffix=''
endif
gtk_sharp_required_version = '>=3.22.6'
csc = meson.get_compiler('cs')
if csc.get_id() == 'mono'
add_project_arguments('-keyfile:' + join_paths(meson.current_source_dir(), meson.project_name() + '.snk'),
language: ['cs'])
endif
subproject('gtk-sharp', default_options: ['install=false'])
gtk_sharp = subproject('gtk-sharp')
glib_sharp_dep = gtk_sharp.get_variable('glib_sharp_dep')
glib_sharp = gtk_sharp.get_variable('glib_sharp')
gio_sharp_dep = gtk_sharp.get_variable('gio_sharp_dep')
gio_sharp = gtk_sharp.get_variable('gio_sharp')
gapi_fixup = gtk_sharp.get_variable('gapi_fixup')
gapi_codegen = gtk_sharp.get_variable('gapi_codegen')
glib_api_includes = gtk_sharp.get_variable('glib_api_includes')
gio_api_includes = gtk_sharp.get_variable('gio_api_includes')
has_gtk = gtk_sharp.get_variable('has_gtk')
if has_gtk
gtk_sharp_dep = [gtk_sharp.get_variable('gtk_sharp_dep'),
gtk_sharp.get_variable('atk_sharp_dep')]
else
gtk_sharp_dep = dependency('gtk-sharp-3.0', version: gtk_sharp_required_version,
required: false)
endif
mono_path = [gtk_sharp.get_variable('mono_path'), join_paths(meson.current_build_dir(), 'sources')]
codegen_dependencies = [gapi_codegen, gapi_fixup, glib_sharp, gio_sharp]
gapi_fixup = gapi_fixup.full_path()
gapi_codegen = gapi_codegen.full_path()
gacutil = find_program('gacutil')
generate_api = find_program('generate_code.py')
nuget = find_program('nuget.py')
diff = find_program('Tests/test_abi.py')
# TODO Handle monodoc
apiversion = '1.0'
gst_required_version = '>=@0@'.format(meson.project_version())
gst_deps = []
# dependency name, [subproject-name, internal-dep-name, library-name']
gst_deps_defs = [
['gstreamer', ['gstreamer', 'gst_dep'], 'libgst'],
['gstreamer-app', ['gst-plugins-base', 'app_dep'], 'gstapp'],
['gstreamer-audio', ['gst-plugins-base', 'audio_dep'], 'gstaudio'],
['gstreamer-base', ['gstreamer', 'gst_base_dep'], 'gst_base'],
['gstreamer-controller', ['gstreamer', 'gst_controller_dep'], 'gst_controller'],
['gstreamer-fft', ['gst-plugins-base', 'fft_dep'], 'gstfft'],
['gstreamer-net', ['gstreamer', 'gst_net_dep'], 'gst_net'],
['gstreamer-pbutils', ['gst-plugins-base', 'pbutils_dep'], 'pbutils'],
['gstreamer-riff', ['gst-plugins-base', 'riff_dep'], 'gstriff'],
['gstreamer-rtp', ['gst-plugins-base', 'rtp_dep'], 'gst_rtp'],
['gstreamer-rtsp', ['gst-plugins-base', 'rtsp_dep'], 'gst_rtsp'],
['gstreamer-sdp', ['gst-plugins-base', 'sdp_dep'], 'gstsdp'],
['gstreamer-tag', ['gst-plugins-base', 'tag_dep'], 'gsttag'],
['gstreamer-video', ['gst-plugins-base', 'video_dep'], 'gstvideo'],
['gstreamer-webrtc', ['gst-plugins-bad', 'gstwebrtc_dep'], 'gstwebrtc'],
]
foreach dep: gst_deps_defs
gst_deps += [dependency(dep.get(0) + '-' + apiversion, version: gst_required_version,
fallback: dep.get(1))]
endforeach
ges_dep = dependency('gst-editing-services-' + apiversion, version: gst_required_version,
fallback: ['gst-editing-services', 'ges_dep'], required: false)
if ges_dep.found()
gst_deps_defs += [
['gst-editing-services', ['gst-editing-services', 'ges_dep'], 'libges'],
]
mono_path += [join_paths(meson.current_build_dir(), 'ges')]
endif
testsenv = environment()
testsenv.prepend('MONO_PATH', mono_path)
i = 0
testsenv_ld_library_path = []
foreach dep: gst_deps + [ges_dep]
if dep.type_name() == 'pkgconfig'
testsenv_ld_library_path += [dep.get_variable('libdir')]
else
depdef = gst_deps_defs[i][1]
libname = gst_deps_defs[i].get(2, '')
if libname != ''
proj = subproject(depdef[0])
libpath = proj.get_variable(libname).full_path().split('/')
dirname = ''
j = 1
foreach comp: libpath
if j < libpath.length()
dirname += '/' + comp
endif
j += 1
endforeach
testsenv_ld_library_path += [dirname]
endif
endif
i += 1
endforeach
# FIXME: port this to macOS and Windows
testsenv.prepend('LD_LIBRARY_PATH', testsenv_ld_library_path)
subdir('sources')
if ges_dep.found()
subdir('ges')
custom_target('GESSharp-nuget',
command: [nuget, '--package-name', 'GESSharp',
'--assembly', ges_sharp.full_path(),
'--dependency=GstSharp:' + meson.project_version(),
'--project-url', 'https://gstreamer.freedesktop.org/modules/gstreamer-sharp.html',
'--icon-url', 'https://gstreamer.freedesktop.org/images/header-logo-top.png',
'--license-url', 'https://cgit.freedesktop.org/gstreamer/gstreamer-sharp/plain/COPYING',
'--version', meson.project_version(),
'--tags', 'GStreamer GES GstSharp bindings',
'--builddir', meson.current_build_dir(),
'--dependency', 'GstSharp:' + meson.project_version(),
],
output: 'GESSharp.' + meson.project_version() + '.nupkg'
)
endif
custom_target('GstSharp-nuget',
command: [nuget, '--package-name', 'GstSharp',
'--assembly', gst_sharp.full_path(),
'--assembly', gio_sharp.full_path(),
'--assembly', glib_sharp.full_path(),
'--project-url', 'https://gstreamer.freedesktop.org/modules/gstreamer-sharp.html',
'--icon-url', 'https://gstreamer.freedesktop.org/images/header-logo-top.png',
'--license-url', 'https://cgit.freedesktop.org/gstreamer/gstreamer-sharp/plain/COPYING',
'--version', meson.project_version(),
'--tags', 'GStreamer GstSharp bindings',
'--builddir', meson.current_build_dir(),
],
output: 'GstSharp.' + meson.project_version() + '.nupkg',
)
subdir('samples')
subdir('Tests')
bindinator = subproject('bindinator', default_options: ['gapi_fixup=@0@'.format(gapi_fixup)])
if bindinator.get_variable('found')
bindinate = bindinator.get_variable('bindinate')
run_target('bindinate_gstreamer',
command: [bindinate,
'--name=gstreamer', '--regenerate=true',
'--merge-with=GstApp-1.0,GstAudio-1.0,GstBase-1.0,GstController-1.0,GstNet-1.0,GstPbutils-1.0,GstRtp-1.0,GstRtsp-1.0,GstSdp-1.0,GstTag-1.0,GstVideo-1.0,GstWebRTC-1.0',
'--gir=Gst-1.0',
'--copy-girs=@0@'.format(join_paths(meson.current_source_dir(), 'girs'))],
depends: []
)
run_target('bindinate_ges',
command: ['sh', '-c',
'''@0@ --name=gst-editing-services --regenerate=true --gir=GES-1.0 && mv @1@/sources/gst-editing-services-sharp-api.raw @1@/ges/gst-editing-services-api.raw '''.format(
bindinate.path(),
meson.current_source_dir()),
],
depends: []
)
python3 = import('python3').find_python()
run_target('update-code', command: [find_program('update_sources.py')])
run_target('update-all', command: [find_program('update_sources.py'), 'bindinate'])
else
warning('Bindinator not usable as some required dependencies are not avalaible.')
endif