diff options
Diffstat (limited to 'doc/meson.build')
-rw-r--r-- | doc/meson.build | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/doc/meson.build b/doc/meson.build new file mode 100644 index 0000000..b1cb115 --- /dev/null +++ b/doc/meson.build @@ -0,0 +1,162 @@ +doxyfile_conf = configuration_data() +doxyfile_conf.set('PACKAGE_NAME', meson.project_name()) +doxyfile_conf.set('PACKAGE_VERSION', meson.project_version()) +doxyfile_conf.set('top_srcdir', meson.project_source_root()) +doxyfile_conf.set('top_builddir', meson.project_build_root()) +doxyfile_conf.set('output_directory', meson.current_build_dir()) + +dot_found = find_program('dot', required: false).found() +summary({'dot (used with doxygen)': dot_found}, bool_yn: true, section: 'Optional programs') +if dot_found + doxyfile_conf.set('HAVE_DOT', 'YES') +else + doxyfile_conf.set('HAVE_DOT', 'NO') +endif + +# Note: order here is how doxygen will expose the pages in the sidebar +# api-tree.dox should be first to determine ordering of Modules. +extra_docs = [ + 'api-tree.dox', + 'index.dox', + 'overview.dox', + 'pipewire.dox', + 'pipewire-design.dox', + 'pipewire-access.dox', + 'pipewire-midi.dox', + 'pipewire-portal.dox', + 'pipewire-daemon.dox', + 'pipewire-library.dox', + 'pipewire-modules.dox', + 'pipewire-session-manager.dox', + 'pipewire-objects-design.dox', + 'pipewire-audio.dox', + 'tutorial.dox', + 'tutorial1.dox', + 'tutorial2.dox', + 'tutorial3.dox', + 'tutorial4.dox', + 'tutorial5.dox', + 'tutorial6.dox', + 'api.dox', + 'spa-index.dox', + 'spa-plugins.dox', + 'spa-design.dox', + 'spa-pod.dox', + 'spa-buffer.dox', + 'pulseaudio.dox', + 'dma-buf.dox', +] + +inputs = [] +foreach extra : extra_docs + inputs += meson.project_source_root() / 'doc' / extra +endforeach +foreach h : pipewire_headers + inputs += meson.project_source_root() / 'src' / 'pipewire' / h +endforeach +foreach h : pipewire_ext_headers + inputs += meson.project_source_root() / 'src' / 'pipewire' / 'extensions' / h +endforeach +foreach h : pipewire_ext_sm_headers + inputs += meson.project_source_root() / 'src' / 'pipewire' / 'extensions' / h +endforeach +foreach h : pipewire_sources + inputs += meson.project_source_root() / 'src' / 'pipewire' / h +endforeach +foreach h : module_sources + inputs += meson.project_source_root() / 'src' / 'modules' / h +endforeach +inputs += meson.project_source_root() / 'test' / 'pwtest.h' +input_dirs = [ meson.project_source_root() / 'spa' / 'include' / 'spa' ] + +path_prefixes = [ + meson.project_source_root() / 'src', + meson.project_source_root() / 'spa' / 'include', + meson.project_source_root(), +] + +cssfiles = [ + meson.project_source_root() / 'doc' / 'doxygen-awesome.css', + meson.project_source_root() / 'doc' / 'custom.css' +] + +# Example files (in order from simple to esoteric) +example_files = [ + 'tutorial1.c', + 'tutorial2.c', + 'tutorial3.c', + 'tutorial4.c', + 'tutorial5.c', + 'tutorial6.c', +] +foreach h : examples + example_files += [h + '.c'] +endforeach +foreach h : spa_examples + example_files += ['spa/examples/' + h + '.c'] +endforeach + +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' ] + +man_doxygen = [] +man_subpages = [] +foreach m : manpages + manconf = configuration_data() + pagename = 'page_man_' + m.split('.rst.in').get(0).replace('.', '_').replace('-', '_') + filename = m.split('.rst.in').get(0) + '.dox' + manconf.set('pagename', pagename) + manconf.set('title', m.split('.rst.in').get(0).replace('.1','').replace('.5','')) + manconf.set('filename', meson.project_source_root() / 'man' / m) + manfile = configure_file(input: 'manpage.dox.in', + output: filename, + configuration: manconf) + man_doxygen += [manfile] + man_subpages += ['- \subpage ' + pagename] + input_dirs += [ 'doc/' + filename ] +endforeach + +pw_tools_dox_conf = configuration_data() +pw_tools_dox_conf.set('man_subpages', '\n'.join(man_subpages)) +pw_tools_dox = configure_file(input: 'pipewire-tools.dox.in', + output: 'pipewire-tools.dox', + configuration: pw_tools_dox_conf) +input_dirs += [ 'doc/pipewire-tools.dox' ] + +doxyfile_conf.set('inputs', ' '.join(inputs + input_dirs)) +doxyfile_conf.set('cssfiles', ' '.join(cssfiles)) +doxyfile_conf.set('path_prefixes', ' '.join(path_prefixes)) +doxyfile_conf.set('c_input_filter', meson.project_source_root() / 'doc' / 'input-filter.sh') +doxyfile_conf.set('h_input_filter', meson.project_source_root() / 'doc' / 'input-filter-h.sh') + +doxyfile = configure_file(input: 'Doxyfile.in', + output: 'Doxyfile', + configuration: doxyfile_conf) + +docdir = get_option('docdir') +if docdir == '' + docdir = pipewire_datadir / 'doc' / meson.project_name() +endif + +html_target = custom_target('pipewire-docs', + input: [ doxyfile, examples_dox, pw_tools_dox ] + inputs + cssfiles + man_doxygen, + output: [ 'html' ], + command: [ doxygen, doxyfile ], + install: true, + install_dir: docdir) |