diff --git a/rosdoc2/verbs/build/builders/index.rst.jinja b/rosdoc2/verbs/build/builders/index.rst.jinja index 7f6ac70..4a554c6 100644 --- a/rosdoc2/verbs/build/builders/index.rst.jinja +++ b/rosdoc2/verbs/build/builders/index.rst.jinja @@ -21,7 +21,7 @@ Welcome to the documentation for {{ package.name }} {% if interface_counts['srv'] > 0 %} Service Definitions {% endif %} {% if interface_counts['action'] > 0 %} Action Definitions {% endif %} {% if has_standard_docs %} Standard Documents {% endif %} -{% if not package.build_depends and package.exec_depends %} +{% if is_meta %} Dependencies of this META package --------------------------------- {% for dependency in package.exec_depends %} diff --git a/rosdoc2/verbs/build/builders/sphinx_builder.py b/rosdoc2/verbs/build/builders/sphinx_builder.py index 4c88f6e..07dfa2f 100644 --- a/rosdoc2/verbs/build/builders/sphinx_builder.py +++ b/rosdoc2/verbs/build/builders/sphinx_builder.py @@ -16,6 +16,7 @@ import json import logging import os +from pathlib import Path import shutil import subprocess @@ -471,6 +472,21 @@ def build(self, *, doc_build_folder, output_staging_directory): always_run_doxygen = build_context.always_run_doxygen has_cpp = build_context.build_type in ['ament_cmake', 'cmake'] or always_run_doxygen + package = self.build_context.package + + # Detect meta packages. They have no build_dependencies, do have exec_dependencies, + # and have no subdirectories except for possibly 'doc'. + is_meta = True + if package.build_depends or not package.exec_depends: + is_meta = False + else: + pp = Path(package_xml_directory) + subdirectories = [x for x in pp.iterdir() if x.is_dir()] + for subdirectory in subdirectories: + if subdirectory.name != 'doc': + is_meta = False + continue + self.template_variables.update({ 'has_python': has_python, 'has_cpp': has_cpp, @@ -478,8 +494,9 @@ def build(self, *, doc_build_folder, output_staging_directory): 'has_documentation': bool(doc_directories), 'has_readme': 'readme' in standard_docs, 'interface_counts': interface_counts, - 'package': self.build_context.package, + 'package': package, 'base_url': base_url, + 'is_meta': is_meta or package.is_metapackage(), }) # Setup rosdoc2 Sphinx file which will include and extend the one in