gstreamer/subprojects/gst-plugins-good/ext/adaptivedemux2/meson.build
Nirbheek Chauhan 11f6984bf5 soup: Link to libsoup in all cases on non-Linux
We have unsolvable issues on macOS because of this, and the feature
was added specifically for issues that occur on Linux distros since
they ship both libsoup 2.4 and 3.0.

Everyone else should just pick one and use it, since you cannot mix
the two in a single process anyway.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6156>
2024-02-21 09:27:59 +05:30

167 lines
5.4 KiB
Meson

dash_sources = [
'dash/gstdashdemux.c',
'dash/gstmpdnode.c',
'dash/gstmpdrootnode.c',
'dash/gstmpdbaseurlnode.c',
'dash/gstmpdutctimingnode.c',
'dash/gstmpdmetricsnode.c',
'dash/gstmpdmetricsrangenode.c',
'dash/gstmpdsnode.c',
'dash/gstmpdsegmenttimelinenode.c',
'dash/gstmpdsegmenttemplatenode.c',
'dash/gstmpdsegmenturlnode.c',
'dash/gstmpdsegmentlistnode.c',
'dash/gstmpdsegmentbasenode.c',
'dash/gstmpdperiodnode.c',
'dash/gstmpdrepresentationbasenode.c',
'dash/gstmpdmultsegmentbasenode.c',
'dash/gstmpdrepresentationnode.c',
'dash/gstmpdsubrepresentationnode.c',
'dash/gstmpdcontentcomponentnode.c',
'dash/gstmpdadaptationsetnode.c',
'dash/gstmpdsubsetnode.c',
'dash/gstmpdprograminformationnode.c',
'dash/gstmpdlocationnode.c',
'dash/gstmpdreportingnode.c',
'dash/gstmpdurltypenode.c',
'dash/gstmpddescriptortypenode.c',
'dash/gstxmlhelper.c',
'dash/gstmpdhelper.c',
'dash/gstmpdparser.c',
'dash/gstmpdclient.c'
]
smoothstreaming_sources = [
'mss/gstmssdemux.c',
'mss/gstmssmanifest.c',
'mss/gstmssfragmentparser.c',
]
plugin_sources = [
'plugin.c',
'gstisoff.c',
'gstadaptivedemux.c',
'gstadaptivedemuxelement.c',
'gstadaptivedemuxutils.c',
'gstadaptivedemux-period.c',
'gstadaptivedemux-stream.c',
'gstadaptivedemux-track.c',
'downloadhelper.c',
'downloadrequest.c',
'../soup/gstsouploader.c'
]
# Used for unit tests, so need to be defined even if we skip the subdir
hls_dep = dependency('', required : false)
adaptivedemux2_dep = dependency('', required : false)
adaptivedemux2_opt = get_option('adaptivedemux2')
soup_ver_opt = get_option('soup-version')
if adaptivedemux2_opt.disabled()
message('Not building adaptivedemux2 plugin because it was disabled')
subdir_done()
endif
adaptive_xml2_dep = dependency('libxml-2.0', version : '>= 2.8', allow_fallback: true, required: adaptivedemux2_opt)
if not adaptive_xml2_dep.found()
message(f'Not building adaptivedemux2 plugin: libxml2 is needed')
subdir_done()
endif
subdir('hls')
plugin_sources += dash_sources
plugin_sources += smoothstreaming_sources
plugin_sources += hls_sources
libdl = cc.find_library('dl', required: false)
soup_loader_args = ['-DBUILDING_ADAPTIVEDEMUX2']
soup_link_args = []
soup_link_deps = []
default_library = get_option('default_library')
if host_system != 'linux' or default_library in ['static', 'both']
if soup_ver_opt in ['auto', '3']
libsoup3_dep = dependency('libsoup-3.0', allow_fallback: true,
required: soup_ver_opt == '3' and soup_opt.enabled())
endif
if soup_ver_opt in ['auto', '2']
libsoup2_dep = dependency('libsoup-2.4', version : '>=2.48', allow_fallback: true,
default_options: ['sysprof=disabled'],
required: soup_ver_opt == '2' and soup_opt.enabled())
endif
if libsoup3_dep.found()
soup_link_deps += [libsoup3_dep]
soup_link_args = ['-DLINK_SOUP=3']
elif libsoup2_dep.found()
soup_link_deps += [libsoup2_dep]
soup_link_args = ['-DLINK_SOUP=2']
else
if adaptivedemux2_opt.enabled()
error(f'adaptivedemux2: Either libsoup2 or libsoup3 is needed')
endif
message(f'Not building adaptivedemux2 plugin: either libsoup2 or libsoup3 is needed')
subdir_done()
endif
endif
# Shared plugin doesn't link to libsoup but dlopen()s it at runtime
adaptive_kwargs = {
'sources': plugin_sources,
'include_directories': [configinc, libsinc],
'install': true,
'install_dir': plugins_install_dir,
}
adaptive_deps = [gmodule_dep, gst_dep, gsttag_dep, gstnet_dep, gstbase_dep, gstpbutils_dep,
gstapp_dep, gio_dep, adaptive_xml2_dep, hls_crypto_dep, libdl, libm]
adaptive_args = [gst_plugins_good_args, soup_loader_args, hls_cargs,
'-DGST_ISOFF_API=G_GNUC_INTERNAL']
if host_system != 'linux'
adaptivedemux2 = library('gstadaptivedemux2',
c_args: [adaptive_args, soup_link_args],
dependencies: [adaptive_deps, soup_link_deps],
kwargs: adaptive_kwargs)
adaptivedemux2_static = adaptivedemux2
adaptivedemux2_shared = adaptivedemux2
else
if default_library in ['static', 'both']
# Static plugin links to libsoup directly at build time
adaptivedemux2_static = static_library('gstadaptivedemux2',
c_args: [adaptive_args, soup_link_args],
dependencies: [adaptive_deps, soup_link_deps],
kwargs: adaptive_kwargs)
endif
if default_library in ['shared', 'both']
adaptivedemux2_shared = shared_library('gstadaptivedemux2',
c_args: adaptive_args,
dependencies: adaptive_deps,
kwargs: adaptive_kwargs)
endif
endif
# Use the static library to generate the .pc file if it's available. The shared
# library .pc file does not have a Requires: on libsoup, and we use plugin
# .pc files to generate dependencies for linking plugins statically.
if default_library == 'shared'
pkgconfig.generate(adaptivedemux2_shared, install_dir: plugins_pkgconfig_install_dir)
else
pkgconfig.generate(adaptivedemux2_static, install_dir: plugins_pkgconfig_install_dir)
endif
# Add the shared library to the plugins list if available. We pass this list of
# plugins to hotdoc to generate the plugins cache, which introspects the plugin
# by loading it. We need the shared plugin for that.
if default_library == 'static'
plugins += [adaptivedemux2_static]
else
plugins += [adaptivedemux2_shared]
endif
# For unit tests
adaptivedemux2_dep = declare_dependency(
include_directories : include_directories('.'),
dependencies: adaptive_xml2_dep)