When one does: make SPHINXDIRS="netlink/specs" htmldocs the build would break because a statically-defined pattern like: include_patterns = [ ... 'netlink/specs/*.yaml', ] would be pointing to Documentation/netlink/specs/netlink/specs, as the path there is relative. Also, when SPHINXDIRS is used, the exclude_pattern = [ "output" ] is also wrong. Fix conf.py to generate relative include/exclude patterns, relative to the SOURCEDIR sphinx-dir parameter. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> --- Documentation/conf.py | 58 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/Documentation/conf.py b/Documentation/conf.py index 62a51ac64b95..be678bdf95d4 100644 --- a/Documentation/conf.py +++ b/Documentation/conf.py @@ -17,6 +17,52 @@ import os import sphinx import shutil +# Location of Documentation/ directory +doctree = os.path.abspath('.') + +# List of patterns that don't contain directory names, in glob format. +include_patterns = ['**.rst'] +exclude_patterns = [] + +# List of patterns that contain directory names in glob format. +dyn_include_patterns = ['netlink/specs/**.yaml'] +dyn_exclude_patterns = ['output'] + +def setup(app): + """ + On Sphinx, all directories are relative to what it is passed as + SOURCEDIR parameter for sphinx-build. Due to that, all patterns + that have directory names on it need to be dynamically set, after + converting them to a relative patch. + + As Sphinx doesn't include any patterns outside SOURCEDIR, we should + exclude relative patterns that start with "../". + """ + + sourcedir = app.srcdir # full path to the source directory + builddir = os.environ.get("BUILDDIR") + + # setup include_patterns dynamically + for p in dyn_include_patterns: + full = os.path.join(doctree, p) + + rel_path = os.path.relpath(full, start = app.srcdir) + if rel_path.startswith("../"): + continue + + app.config.include_patterns.append(rel_path) + + # setup exclude_patterns dynamically + for p in dyn_exclude_patterns: + full = os.path.join(doctree, p) + + rel_path = os.path.relpath(full, start = app.srcdir) + if rel_path.startswith("../"): + continue + + app.config.exclude_patterns.append(rel_path) + + # helper # ------ @@ -220,18 +266,6 @@ language = 'en' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' -# List of patterns, relative to source directory, that match files and -# directories. -include_patterns = [ - '**.rst', - 'netlink/specs/*.yaml', -] - -# patterns to ignore when looking for source files. -exclude_patterns = [ - 'output', -] - # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None -- 2.49.0