mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
cf793d6678
A few header files in -bad contain comments that start with the /** gtk-doc pattern, but should not actually be parsed (and warned about as such). Previously, we were using far-reaching wildcard patterns to avoid parsing those, but this had the unintended side effect of also excluding legitimate files, and creating confusion when comments were not parsed from those. Switch to excluding specific files instead. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2576>
259 lines
9.2 KiB
Meson
259 lines
9.2 KiB
Meson
build_hotdoc = false
|
|
|
|
if meson.is_cross_build()
|
|
if get_option('doc').enabled()
|
|
error('Documentation enabled but building the doc while cross building is not supported yet.')
|
|
endif
|
|
|
|
message('Documentation not built as building it while cross building is not supported yet.')
|
|
subdir_done()
|
|
endif
|
|
|
|
if static_build
|
|
if get_option('doc').enabled()
|
|
error('Documentation enabled but not supported when building statically.')
|
|
endif
|
|
|
|
message('Building statically, can\'t build the documentation')
|
|
subdir_done()
|
|
endif
|
|
|
|
if not build_gir
|
|
if get_option('doc').enabled()
|
|
error('Documentation enabled but introspection not built.')
|
|
endif
|
|
|
|
message('Introspection not built, won\'t build documentation requiring it')
|
|
endif
|
|
|
|
required_hotdoc_extensions = ['gi-extension', 'c-extension', 'gst-extension']
|
|
if gst_dep.type_name() == 'internal'
|
|
gst_proj = subproject('gstreamer')
|
|
plugins_cache_generator = gst_proj.get_variable('plugins_cache_generator')
|
|
else
|
|
plugins_cache_generator = find_program(join_paths(gst_dep.get_variable('libexecdir'), 'gstreamer-' + api_version, 'gst-plugins-doc-cache-generator'),
|
|
required: false)
|
|
endif
|
|
|
|
plugins_cache = join_paths(meson.current_source_dir(), 'plugins', 'gst_plugins_cache.json')
|
|
|
|
if plugins.length() == 0
|
|
message('All bad plugins have been disabled')
|
|
elif plugins_cache_generator.found()
|
|
plugins_doc_dep = custom_target('bad-plugins-doc-cache',
|
|
command: [plugins_cache_generator, plugins_cache, '@OUTPUT@', '@INPUT@'],
|
|
input: plugins,
|
|
output: 'gst_plugins_cache.json',
|
|
build_always_stale: true,
|
|
)
|
|
else
|
|
warning('GStreamer plugin inspector for documentation not found, can\'t update the cache')
|
|
endif
|
|
|
|
hotdoc_p = find_program('hotdoc', required: get_option('doc'))
|
|
if not hotdoc_p.found()
|
|
message('Hotdoc not found, not building the documentation')
|
|
subdir_done()
|
|
endif
|
|
|
|
hotdoc_req = '>= 0.11.0'
|
|
hotdoc_version = run_command(hotdoc_p, '--version', check: false).stdout()
|
|
if not hotdoc_version.version_compare(hotdoc_req)
|
|
if get_option('doc').enabled()
|
|
error('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
|
|
else
|
|
message('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
|
|
subdir_done()
|
|
endif
|
|
endif
|
|
|
|
hotdoc = import('hotdoc')
|
|
foreach extension: required_hotdoc_extensions
|
|
if not hotdoc.has_extensions(extension)
|
|
if get_option('doc').enabled()
|
|
error('Documentation enabled but @0@ missing'.format(extension))
|
|
endif
|
|
|
|
message('@0@ extensions not found, not building documentation requiring it'.format(extension))
|
|
endif
|
|
endforeach
|
|
|
|
build_hotdoc = true
|
|
|
|
docconf = configuration_data()
|
|
docconf.set('GST_API_VERSION', api_version)
|
|
|
|
configure_file(input : 'gst_api_version.in',
|
|
output : 'gst_api_version.md',
|
|
configuration : docconf)
|
|
|
|
root_rel = '..'
|
|
excludes = []
|
|
foreach f: [
|
|
'gst/frei0r/frei0r.h',
|
|
'gst/mxf/mxful.c',
|
|
'gst-libs/gst/*/*-private.h',
|
|
'gst-libs/gst/codecparsers/nalutils.h',
|
|
'ext/closedcaption/bcd.h',
|
|
'ext/closedcaption/bit_slicer.[ch]',
|
|
'ext/closedcaption/decoder.[ch]',
|
|
'ext/closedcaption/macros.h',
|
|
'ext/closedcaption/misc.h',
|
|
'ext/closedcaption/raw_decoder.[ch]',
|
|
'ext/closedcaption/sampling_par.[ch]',
|
|
'ext/closedcaption/sliced.[ch]',
|
|
'ext/lv2/gstlv2utils.h',
|
|
'ext/closedcaption/hamm.h',
|
|
'ext/closedcaption/io-sim.h',
|
|
'ext/avtp/gstavtpcrfbase.h',
|
|
'sys/nvcodec/nvEncodeAPI.h',
|
|
'sys/nvcodec/cuviddec.h',
|
|
'sys/nvcodec/nvcuvid.h',
|
|
'sys/winks/ksvideohelpers.h',
|
|
'gst/videoparsers/gstjpeg2000parse.h',
|
|
'gst-libs/gst/*/*-prelude.h',
|
|
'gst-libs/gst/vulkan/vulkan_fwd.h'
|
|
]
|
|
excludes += [join_paths(meson.current_source_dir(), root_rel, f)]
|
|
endforeach
|
|
|
|
libs = []
|
|
if build_gir
|
|
libs = [
|
|
{'name': 'mpegts', 'gir': mpegts_gir, 'lib': gstmpegts_dep},
|
|
{'name': 'play', 'gir': play_gir, 'lib': gstplay_dep},
|
|
{'name': 'player', 'gir': player_gir, 'lib': gstplayer_dep},
|
|
{'name': 'insertbin', 'gir': insertbin_gir, 'lib': gstinsertbin_dep},
|
|
{'name': 'codecparsers', 'lib': gstcodecparsers_dep},
|
|
{'name': 'adaptivedemux', 'lib': gstadaptivedemux_dep},
|
|
{'name': 'basecamerabinsrc', 'gir': basecamerabin_gir, 'lib': gstbasecamerabin_dep},
|
|
{'name': 'webrtc', 'gir': webrtc_gir, 'lib': gstwebrtc_dep, 'suffix': 'lib'},
|
|
{'name': 'audio', 'gir': audio_gir, 'lib': gstbadaudio_dep, 'prefix': 'bad-'},
|
|
{'name': 'transcoder', 'gir': transcoder_gir, 'lib': gst_transcoder_dep},
|
|
{'name': 'codecs', 'gir': codecs_gir, 'lib': gstcodecs_dep},
|
|
{'name': 'cuda', 'gir': gst_cuda_gir, 'lib': gstcuda_dep},
|
|
]
|
|
|
|
if gstopencv_dep.found()
|
|
libs += [
|
|
{'name': 'opencv', 'lib': gstopencv_dep, 'c_source_patterns': ['*.h', '*.cpp'], 'extra_c_flags': ['-x c++']},
|
|
]
|
|
endif
|
|
|
|
if gstvulkan_dep.found()
|
|
libs += [
|
|
{'name': 'vulkan', 'gir': vulkan_gir, 'lib': gstvulkan_dep, 'suffix': 'lib'},
|
|
]
|
|
if enabled_vulkan_winsys.contains('xcb')
|
|
libs += [
|
|
{'name': 'vulkan-xcb', 'gir': vulkan_xcb_gir, 'lib': gstvulkanxcb_dep, 'extra_sources' : [
|
|
join_paths(root_rel, 'gst-libs/gst/vulkan/xcb/gstvkdisplay_xcb.[ch]'),
|
|
]},
|
|
]
|
|
endif
|
|
if enabled_vulkan_winsys.contains('wayland')
|
|
libs += [
|
|
{'name': 'vulkan-wayland', 'gir': vulkan_wayland_gir, 'lib': gstvulkanwayland_dep, 'extra_sources' : [
|
|
join_paths(root_rel, 'gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.[ch]'),
|
|
]},
|
|
]
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
has_gi_extension = hotdoc.has_extensions('gi-extension')
|
|
has_c_extension = hotdoc.has_extensions('c-extension')
|
|
libs_doc = []
|
|
foreach lib_def: libs
|
|
name = lib_def['name']
|
|
lib = lib_def['lib']
|
|
extra_sources = lib_def.get('extra_sources', [])
|
|
|
|
c_source_patterns = lib_def.get('c_source_patterns', ['*.[hc]'])
|
|
c_sources = []
|
|
foreach pattern: c_source_patterns
|
|
c_sources += join_paths(root_rel, 'gst-libs/gst', name, pattern)
|
|
endforeach
|
|
c_sources += extra_sources
|
|
|
|
if lib_def.has_key('gir')
|
|
if has_gi_extension
|
|
gir = lib_def['gir']
|
|
prefix = lib_def.get('prefix', '')
|
|
suffix = lib_def.get('suffix', '')
|
|
libs_doc += [hotdoc.generate_doc(prefix + name + suffix,
|
|
project_version: api_version,
|
|
gi_c_sources: c_sources,
|
|
gi_sources: gir[0].full_path(),
|
|
gi_c_source_filters: excludes,
|
|
sitemap: join_paths('libs', name, 'sitemap.txt'),
|
|
index: join_paths('libs/', name, 'index.md'),
|
|
gi_index: join_paths('libs/', name, 'index.md'),
|
|
gi_smart_index: true,
|
|
gi_order_generated_subpages: true,
|
|
dependencies: [lib, gir],
|
|
c_flags: '-DGST_USE_UNSTABLE_API',
|
|
install: false,
|
|
)]
|
|
endif
|
|
else
|
|
if has_c_extension
|
|
libs_doc += [hotdoc.generate_doc('gst-plugins-bad-' + name,
|
|
sitemap: join_paths('libs', name, 'sitemap.txt'),
|
|
index: join_paths('libs', name, 'index.md'),
|
|
project_version: api_version,
|
|
c_sources: c_sources,
|
|
c_source_filters: excludes,
|
|
c_index: join_paths('libs', name, 'index.md'),
|
|
c_smart_index: true,
|
|
c_order_generated_subpages: true,
|
|
extra_c_flags: ['-DGST_USE_UNSTABLE_API'] + lib_def.get('extra_c_flags', []),
|
|
dependencies: lib,
|
|
install: false,
|
|
)]
|
|
endif
|
|
endif
|
|
endforeach
|
|
|
|
list_plugin_res = run_command(python3, '-c',
|
|
'''
|
|
import sys
|
|
import json
|
|
|
|
with open("@0@") as f:
|
|
print(':'.join(json.load(f).keys()), end='')
|
|
'''.format(plugins_cache),
|
|
check: true)
|
|
|
|
plugins_doc = []
|
|
foreach plugin_name: list_plugin_res.stdout().split(':')
|
|
plugins_doc += [hotdoc.generate_doc(plugin_name,
|
|
project_version: api_version,
|
|
sitemap: 'plugins/sitemap.txt',
|
|
index: 'plugins/index.md',
|
|
c_flags: '-DGST_USE_UNSTABLE_API',
|
|
gst_index: 'plugins/index.md',
|
|
gst_smart_index: true,
|
|
gst_c_sources: [
|
|
join_paths(root_rel, 'sys/*/*.[cmh]'),
|
|
join_paths(root_rel, 'sys/*/*.cpp'),
|
|
join_paths(root_rel, 'sys/*/*.cc'),
|
|
join_paths(root_rel, 'sys/*/*.mm'),
|
|
join_paths(root_rel, 'sys/*/*.hh'),
|
|
join_paths(root_rel, 'ext/*/*.[ch]'),
|
|
join_paths(root_rel, 'ext/*/*.cpp'),
|
|
join_paths(root_rel, 'ext/*/*.cc'),
|
|
join_paths(root_rel, 'ext/*/*.hh'),
|
|
join_paths(root_rel, 'gst/*/*.[ch]'),
|
|
join_paths(root_rel, 'gst/rtmp2/*/*.[ch]'),
|
|
],
|
|
dependencies: [gst_dep, plugins],
|
|
install: false,
|
|
disable_incremental_build: true,
|
|
gst_cache_file: plugins_cache,
|
|
gst_c_source_filters: excludes,
|
|
gst_order_generated_subpages: true,
|
|
gst_plugin_name: plugin_name,
|
|
include_paths: join_paths(meson.current_source_dir(), '..'),
|
|
)]
|
|
endforeach
|