gstreamer/subprojects/gst-plugins-good/docs/meson.build
Mathieu Duponchelle 7983ecff1c docs: generate hotdoc configs for libraries with our helper script
With this patch, configure time is identical no matter whether doc is
enabled or not.

The configuration files also now contain explicitly-listed sources with
no wildcards.

For the four libraries where hotdoc needs to use clang to generate the
documentation (as opposed to the rest of the libraries where hotdoc uses
the gir), the script will call pkg-config to determine the appropriate
C flags.

This means a side effect of this patch is that pkg-config files are now
generated for the gstadaptivedemux and gstopencv libraries.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8312>
2025-01-17 20:36:06 +01:00

99 lines
3.1 KiB
Meson

build_hotdoc = false
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 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 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('gst-plugins-doc-cache-generator',
dirs: [join_paths(gst_dep.get_variable('libexecdir', default_value: ''), 'gstreamer-' + api_version)],
required: false)
endif
plugins_cache = join_paths(meson.current_source_dir(), 'gst_plugins_cache.json')
if plugins.length() == 0
message('All good plugins have been disabled')
elif plugins_cache_generator.found()
gst_plugins_doc_dep = custom_target('good-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
if get_option('doc').disabled()
subdir_done()
endif
docconf = configuration_data()
docconf.set('GST_API_VERSION', api_version)
configure_file(input : 'gst_api_version.in',
output : 'gst_api_version.md',
configuration : docconf)
excludes = []
build_hotdoc = true
foreach f: ['gstgdkpixbufplugin.c']
excludes += [join_paths(meson.current_source_dir(), '..', 'ext/gdk_pixbuf/', f)]
endforeach
excludes += [join_paths(meson.current_source_dir(), '..', 'sys', 'rpicamsrc', 'Raspi*.[ch]')]
doc_source_file = configure_file(output: 'doc_sources.json', configuration: plugin_sources, output_format: 'json')
plugin_libraries = {}
foreach plugin: plugins
if plugin.name().startswith('gst')
plugin_name = plugin.name().substring(3)
else
plugin_name = plugin.name()
endif
plugin_libraries += {
plugin_name: plugin.full_path()
}
endforeach
doc_plugin_libs_file = configure_file(output: 'doc_plugin_libs.json', configuration: plugin_libraries, output_format: 'json')
cdir = meson.current_source_dir()
plugin_hotdoc_configs = custom_target(
'build-hotdoc-configs',
command: [
plugins_cache_generator,
'hotdoc-config',
'--builddir', meson.current_build_dir(),
'--project_version', api_version,
'--sitemap', cdir / 'sitemap.txt',
'--index', cdir / 'index.md',
'--gst_index', cdir / 'index.md',
'--gst_c_source_filters', excludes,
'--gst_cache_file', '@INPUT@',
'--include_paths', cdir / '..',
'--output', '@OUTPUT@',
'--gst_c_source_file', doc_source_file,
'--gst_plugin_libraries_file', doc_plugin_libs_file,
],
input: plugins_cache,
output: 'hotdoc-configs.json',
)