2023-11-21 19:31:16 +00:00
|
|
|
fs = import('fs')
|
|
|
|
|
2017-05-30 17:46:51 +00:00
|
|
|
doxyfile_conf = configuration_data()
|
|
|
|
doxyfile_conf.set('PACKAGE_NAME', meson.project_name())
|
|
|
|
doxyfile_conf.set('PACKAGE_VERSION', meson.project_version())
|
2021-12-28 15:35:20 +00:00
|
|
|
doxyfile_conf.set('top_srcdir', meson.project_source_root())
|
|
|
|
doxyfile_conf.set('top_builddir', meson.project_build_root())
|
2023-01-14 21:02:13 +00:00
|
|
|
doxyfile_conf.set('output_directory', meson.current_build_dir())
|
2017-05-30 17:46:51 +00:00
|
|
|
|
2023-11-21 19:31:16 +00:00
|
|
|
doxygen_env = environment()
|
|
|
|
doxygen_env.set('PACKAGE_NAME', meson.project_name())
|
|
|
|
doxygen_env.set('PACKAGE_VERSION', meson.project_version())
|
|
|
|
doxygen_env.set('PACKAGE_URL', 'https://pipewire.org')
|
|
|
|
doxygen_env.set('PACKAGE_BUGREPORT', 'https://gitlab.freedesktop.org/pipewire/pipewire/issues')
|
|
|
|
doxygen_env.set('PIPEWIRE_CONFIG_DIR', pipewire_configdir)
|
|
|
|
doxygen_env.set('PIPEWIRE_CONFDATADIR', pipewire_confdatadir)
|
|
|
|
|
2021-06-29 08:17:03 +00:00
|
|
|
dot_found = find_program('dot', required: false).found()
|
|
|
|
summary({'dot (used with doxygen)': dot_found}, bool_yn: true, section: 'Optional programs')
|
|
|
|
if dot_found
|
2017-05-30 17:46:51 +00:00
|
|
|
doxyfile_conf.set('HAVE_DOT', 'YES')
|
|
|
|
else
|
|
|
|
doxyfile_conf.set('HAVE_DOT', 'NO')
|
|
|
|
endif
|
|
|
|
|
2021-05-25 09:55:06 +00:00
|
|
|
# Note: order here is how doxygen will expose the pages in the sidebar
|
2023-11-18 13:13:05 +00:00
|
|
|
# tree.dox should be first to determine the ordering.
|
2021-05-06 23:09:45 +00:00
|
|
|
extra_docs = [
|
2023-11-18 13:13:05 +00:00
|
|
|
'tree.dox',
|
|
|
|
'dox/index.dox',
|
|
|
|
'dox/overview.dox',
|
|
|
|
'dox/modules.dox',
|
2023-11-19 21:08:09 +00:00
|
|
|
'dox/pulse-modules.dox',
|
2023-11-21 19:31:16 +00:00
|
|
|
'dox/programs/index.md',
|
2023-11-18 13:13:05 +00:00
|
|
|
'dox/internals/index.dox',
|
|
|
|
'dox/internals/design.dox',
|
|
|
|
'dox/internals/access.dox',
|
|
|
|
'dox/internals/midi.dox',
|
|
|
|
'dox/internals/portal.dox',
|
|
|
|
'dox/internals/daemon.dox',
|
|
|
|
'dox/internals/library.dox',
|
|
|
|
'dox/internals/session-manager.dox',
|
|
|
|
'dox/internals/objects.dox',
|
|
|
|
'dox/internals/audio.dox',
|
|
|
|
'dox/internals/scheduling.dox',
|
|
|
|
'dox/internals/protocol.dox',
|
|
|
|
'dox/internals/pulseaudio.dox',
|
|
|
|
'dox/internals/dma-buf.dox',
|
|
|
|
'dox/tutorial/index.dox',
|
|
|
|
'dox/tutorial/tutorial1.dox',
|
|
|
|
'dox/tutorial/tutorial2.dox',
|
|
|
|
'dox/tutorial/tutorial3.dox',
|
|
|
|
'dox/tutorial/tutorial4.dox',
|
|
|
|
'dox/tutorial/tutorial5.dox',
|
|
|
|
'dox/tutorial/tutorial6.dox',
|
|
|
|
'dox/api/index.dox',
|
|
|
|
'dox/api/spa-index.dox',
|
|
|
|
'dox/api/spa-plugins.dox',
|
|
|
|
'dox/api/spa-design.dox',
|
|
|
|
'dox/api/spa-pod.dox',
|
|
|
|
'dox/api/spa-buffer.dox',
|
2021-05-06 23:09:45 +00:00
|
|
|
]
|
|
|
|
|
2023-11-21 19:31:16 +00:00
|
|
|
manpage_docs = [
|
|
|
|
'dox/programs/libpipewire-modules.7.md',
|
|
|
|
'dox/programs/pipewire-pulse-modules.7.md',
|
|
|
|
'dox/programs/pipewire-pulse.1.md',
|
|
|
|
'dox/programs/pipewire-pulse.conf.5.md',
|
|
|
|
'dox/programs/pipewire.1.md',
|
|
|
|
'dox/programs/pipewire.conf.5.md',
|
|
|
|
'dox/programs/pw-cat.1.md',
|
|
|
|
'dox/programs/pw-cli.1.md',
|
|
|
|
'dox/programs/pw-config.1.md',
|
|
|
|
'dox/programs/pw-dot.1.md',
|
|
|
|
'dox/programs/pw-dump.1.md',
|
|
|
|
'dox/programs/pw-jack.1.md',
|
|
|
|
'dox/programs/pw-link.1.md',
|
|
|
|
'dox/programs/pw-loopback.1.md',
|
|
|
|
'dox/programs/pw-metadata.1.md',
|
|
|
|
'dox/programs/pw-mididump.1.md',
|
|
|
|
'dox/programs/pw-mon.1.md',
|
|
|
|
'dox/programs/pw-profiler.1.md',
|
|
|
|
'dox/programs/pw-top.1.md',
|
|
|
|
]
|
|
|
|
|
|
|
|
manpages = []
|
|
|
|
|
|
|
|
foreach m : manpage_docs
|
|
|
|
name = fs.stem(fs.name(m))
|
|
|
|
pagepart = name.replace('.', '_')
|
|
|
|
manpages += [[name, f'page_man_@pagepart@']]
|
|
|
|
extra_docs += m
|
|
|
|
endforeach
|
|
|
|
|
2021-10-02 17:55:53 +00:00
|
|
|
inputs = []
|
2021-05-06 23:09:45 +00:00
|
|
|
foreach extra : extra_docs
|
2021-12-28 15:35:20 +00:00
|
|
|
inputs += meson.project_source_root() / 'doc' / extra
|
2021-05-06 23:09:45 +00:00
|
|
|
endforeach
|
2021-10-02 17:55:53 +00:00
|
|
|
foreach h : pipewire_headers
|
2021-12-28 15:35:20 +00:00
|
|
|
inputs += meson.project_source_root() / 'src' / 'pipewire' / h
|
2021-10-02 17:55:53 +00:00
|
|
|
endforeach
|
|
|
|
foreach h : pipewire_ext_headers
|
2021-12-28 15:35:20 +00:00
|
|
|
inputs += meson.project_source_root() / 'src' / 'pipewire' / 'extensions' / h
|
2021-10-02 17:55:53 +00:00
|
|
|
endforeach
|
|
|
|
foreach h : pipewire_ext_sm_headers
|
2021-12-28 15:35:20 +00:00
|
|
|
inputs += meson.project_source_root() / 'src' / 'pipewire' / 'extensions' / h
|
2021-10-02 17:55:53 +00:00
|
|
|
endforeach
|
|
|
|
foreach h : pipewire_sources
|
2021-12-28 15:35:20 +00:00
|
|
|
inputs += meson.project_source_root() / 'src' / 'pipewire' / h
|
2021-10-02 17:55:53 +00:00
|
|
|
endforeach
|
|
|
|
foreach h : module_sources
|
2021-12-28 15:35:20 +00:00
|
|
|
inputs += meson.project_source_root() / 'src' / 'modules' / h
|
2021-10-02 17:55:53 +00:00
|
|
|
endforeach
|
2023-11-19 21:08:09 +00:00
|
|
|
foreach h : pipewire_module_protocol_pulse_sources
|
|
|
|
inputs += meson.project_source_root() / 'src' / 'modules' / h
|
|
|
|
endforeach
|
2021-12-28 15:35:20 +00:00
|
|
|
input_dirs = [ meson.project_source_root() / 'spa' / 'include' / 'spa' ]
|
2021-10-02 17:55:53 +00:00
|
|
|
|
|
|
|
path_prefixes = [
|
2021-12-28 15:35:20 +00:00
|
|
|
meson.project_source_root() / 'src',
|
|
|
|
meson.project_source_root() / 'spa' / 'include',
|
|
|
|
meson.project_source_root(),
|
2021-10-02 17:55:53 +00:00
|
|
|
]
|
2021-05-06 23:09:45 +00:00
|
|
|
|
2021-05-21 04:53:48 +00:00
|
|
|
cssfiles = [
|
2021-12-28 15:35:20 +00:00
|
|
|
meson.project_source_root() / 'doc' / 'doxygen-awesome.css',
|
|
|
|
meson.project_source_root() / 'doc' / 'custom.css'
|
2021-05-21 04:53:48 +00:00
|
|
|
]
|
|
|
|
|
2021-10-09 20:25:29 +00:00
|
|
|
# Example files (in order from simple to esoteric)
|
|
|
|
example_files = [
|
2021-10-09 21:09:32 +00:00
|
|
|
'tutorial1.c',
|
|
|
|
'tutorial2.c',
|
|
|
|
'tutorial3.c',
|
|
|
|
'tutorial4.c',
|
|
|
|
'tutorial5.c',
|
|
|
|
'tutorial6.c',
|
2021-10-09 20:25:29 +00:00
|
|
|
]
|
2021-10-31 12:17:58 +00:00
|
|
|
foreach h : examples
|
|
|
|
example_files += [h + '.c']
|
|
|
|
endforeach
|
|
|
|
foreach h : spa_examples
|
|
|
|
example_files += ['spa/examples/' + h + '.c']
|
|
|
|
endforeach
|
2021-10-09 20:25:29 +00:00
|
|
|
|
|
|
|
example_doxygen = []
|
|
|
|
example_ref = []
|
|
|
|
foreach h : example_files
|
|
|
|
example_doxygen += ['\\example ' + h,
|
|
|
|
'\\snippet{doc} ' + h + ' title',
|
|
|
|
'<br>',
|
|
|
|
'\\snippet{doc} ' + h + ' doc']
|
|
|
|
example_ref += ['- \\ref ' + h + ' "": \snippet{doc} ' + h + ' title']
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
examples_dox_conf = configuration_data()
|
|
|
|
examples_dox_conf.set('example_doxygen', '\n'.join(example_doxygen))
|
|
|
|
examples_dox_conf.set('example_ref', '\n'.join(example_ref))
|
|
|
|
examples_dox = configure_file(input: 'examples.dox.in',
|
|
|
|
output: 'examples.dox',
|
|
|
|
configuration: examples_dox_conf)
|
|
|
|
|
|
|
|
input_dirs += [ 'doc/examples.dox' ]
|
|
|
|
|
2023-11-21 19:31:16 +00:00
|
|
|
module_manpage_list = []
|
|
|
|
foreach m : module_sources
|
|
|
|
name = fs.stem(m)
|
|
|
|
pagepart = name.replace('-', '_')
|
|
|
|
module_manpage_list += f'\\ref page_@pagepart@ "libpipewire-@name@(7)"'
|
|
|
|
manpages += [[f'libpipewire-@name@.7', f'page_@pagepart@']]
|
2022-01-20 19:06:54 +00:00
|
|
|
endforeach
|
|
|
|
|
2023-11-21 19:31:16 +00:00
|
|
|
doxygen_env.set('LIBPIPEWIRE_MODULES', '<ul><li>' + '</li><li>'.join(module_manpage_list) + '</li></ul>')
|
|
|
|
|
|
|
|
pulse_module_manpage_list = []
|
|
|
|
foreach m : pipewire_module_protocol_pulse_sources
|
|
|
|
name = fs.stem(fs.name(m))
|
|
|
|
if m.contains('/modules/') and name.startswith('module-')
|
|
|
|
pagepart = name.replace('-', '_')
|
|
|
|
pulse_module_manpage_list += f'\\ref page_pulse_@pagepart@ "pipewire-pulse-@name@(7)"'
|
|
|
|
manpages += [[f'pipewire-pulse-@name@.7', f'page_pulse_@pagepart@']]
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
doxygen_env.set('PIPEWIRE_PULSE_MODULES', '<ul><li>' + '</li><li>'.join(pulse_module_manpage_list) + '</li></ul>')
|
2022-01-20 19:06:54 +00:00
|
|
|
|
2023-11-04 09:26:27 +00:00
|
|
|
doxygen_layout = meson.project_source_root() / 'doc' / 'DoxygenLayout.xml'
|
2023-11-19 21:08:09 +00:00
|
|
|
doxygen_filter_c = meson.project_source_root() / 'doc' / 'input-filter.py'
|
2023-11-04 10:35:30 +00:00
|
|
|
doxygen_filter_h = meson.project_source_root() / 'doc' / 'input-filter-h.sh'
|
2023-11-04 09:26:27 +00:00
|
|
|
|
2021-10-04 19:14:38 +00:00
|
|
|
doxyfile_conf.set('inputs', ' '.join(inputs + input_dirs))
|
2021-05-21 04:53:48 +00:00
|
|
|
doxyfile_conf.set('cssfiles', ' '.join(cssfiles))
|
2023-11-04 09:26:27 +00:00
|
|
|
doxyfile_conf.set('layout', doxygen_layout)
|
2021-10-02 16:24:17 +00:00
|
|
|
doxyfile_conf.set('path_prefixes', ' '.join(path_prefixes))
|
2023-11-04 10:35:30 +00:00
|
|
|
doxyfile_conf.set('c_input_filter', doxygen_filter_c)
|
|
|
|
doxyfile_conf.set('h_input_filter', doxygen_filter_h)
|
2017-09-05 11:35:25 +00:00
|
|
|
|
2017-05-30 17:46:51 +00:00
|
|
|
doxyfile = configure_file(input: 'Doxyfile.in',
|
|
|
|
output: 'Doxyfile',
|
2020-05-19 14:49:38 +00:00
|
|
|
configuration: doxyfile_conf)
|
2017-05-30 17:46:51 +00:00
|
|
|
|
2021-04-15 18:45:53 +00:00
|
|
|
docdir = get_option('docdir')
|
|
|
|
if docdir == ''
|
|
|
|
docdir = pipewire_datadir / 'doc' / meson.project_name()
|
|
|
|
endif
|
2017-05-30 17:46:51 +00:00
|
|
|
|
|
|
|
html_target = custom_target('pipewire-docs',
|
2023-11-21 19:31:16 +00:00
|
|
|
input: [ doxyfile, doxygen_layout, examples_dox, doxygen_filter_c, doxygen_filter_h ] + inputs + cssfiles,
|
2017-05-30 17:46:51 +00:00
|
|
|
output: [ 'html' ],
|
|
|
|
command: [ doxygen, doxyfile ],
|
2023-11-21 19:31:16 +00:00
|
|
|
env: doxygen_env,
|
2023-11-24 15:48:22 +00:00
|
|
|
install: install_docs,
|
2023-11-24 21:17:34 +00:00
|
|
|
install_tag: 'doc',
|
2021-04-15 18:45:53 +00:00
|
|
|
install_dir: docdir)
|
2023-11-18 18:04:06 +00:00
|
|
|
|
|
|
|
|
2023-11-21 19:31:16 +00:00
|
|
|
man_fixup = files('man-fixup.py')
|
|
|
|
|
|
|
|
manfiles = []
|
|
|
|
|
|
|
|
foreach m : manpages
|
|
|
|
file = m.get(0)
|
|
|
|
page = m.get(1)
|
|
|
|
name = fs.stem(file)
|
|
|
|
section = file.split('.').get(-1)
|
|
|
|
|
|
|
|
manfiles += custom_target(file,
|
|
|
|
command : [ python, man_fixup, '@INPUT@', page, name, section, meson.project_version() ],
|
|
|
|
output : file,
|
|
|
|
input : html_target,
|
|
|
|
depend_files : [ man_fixup ],
|
|
|
|
capture : true,
|
2023-11-24 15:48:22 +00:00
|
|
|
install : install_man,
|
2023-11-24 21:17:34 +00:00
|
|
|
install_tag: 'man',
|
2023-11-21 19:31:16 +00:00
|
|
|
install_dir : get_option('mandir') / 'man' + section
|
|
|
|
)
|
|
|
|
endforeach
|