Documentation: Fix documentation generation when subproject

The paths of the doxygen tag files for sphinxcontrib-doxygen must be
absolute or relative the the current working directory. However, when
libcamera is built as a subproject, the current working directory
is the top-level build directory. Thus the paths for the tag files
will not be correct.

Fix that by using `configure_file()` to generate the final sphinx
configuration with the appropriate paths queried from meson.

Fixes: 0382d215db ("Documentation: Use Sphinx doxylink to generate links to doxygen")
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Barnabás Pőcze
2025-07-31 14:16:18 +02:00
parent aa4338eed5
commit d19f16f222
2 changed files with 18 additions and 5 deletions

View File

@@ -74,11 +74,11 @@ pygments_style = None
doxylink = {
'doxy-pub': (
'Documentation/api-html/tagfile.xml',
'@TOP_BUILDDIR@/Documentation/api-html/tagfile.xml',
'../api-html/',
),
'doxy-int': (
'Documentation/internal-api-html/tagfile.xml',
'@TOP_BUILDDIR@/Documentation/internal-api-html/tagfile.xml',
'../internal-api-html/',
),
}
@@ -89,7 +89,7 @@ doxylink = {
# a list of builtin themes.
#
html_theme = 'theme'
html_theme_path = ['.']
html_theme_path = ['@THEME_DIR@']
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the

View File

@@ -142,11 +142,21 @@ if sphinx.found()
.format(mod, version, min_version))
endif
sphinx_conf = configure_file(input : 'conf.py.in',
output : 'conf.py',
configuration : {
'THEME_DIR': meson.current_source_dir(),
'TOP_BUILDDIR': meson.project_build_root(),
})
fs = import('fs')
sphinx_conf_dir = fs.parent(sphinx_conf)
docs_sources = [
'camera-sensor-model.rst',
'code-of-conduct.rst',
'coding-style.rst',
'conf.py',
sphinx_conf,
'contributing.rst',
'design/ae.rst',
'documentation-contents.rst',
@@ -171,6 +181,7 @@ if sphinx.found()
custom_target('documentation',
command : [sphinx, '-D', release, '-q', '-W', '-b', 'html',
'-c', sphinx_conf_dir,
meson.current_source_dir(), '@OUTPUT@'],
input : docs_sources,
output : 'html',
@@ -184,7 +195,9 @@ if sphinx.found()
install_tag : 'doc')
custom_target('documentation-linkcheck',
command : [sphinx, '-W', '-b', 'linkcheck', meson.current_source_dir(), '@OUTPUT@'],
command : [sphinx, '-W', '-b', 'linkcheck',
'-c', sphinx_conf_dir,
meson.current_source_dir(), '@OUTPUT@'],
build_always_stale : true,
input : docs_sources,
output : 'linkcheck')