mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-14 12:26:36 +00:00
2b121be8f0
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/6198>
166 lines
5.4 KiB
Meson
166 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)
|