#!/usr/bin/env python3 # # Copyright (c) 2021 Raspberry Pi (Trading) Ltd. # # SPDX-License-Identifier: BSD-3-Clause # # # Little script to check that every \ingroup has a matching \defgroup # # Usage: # # Run from the root of the tree to check import subprocess import re import sys import os groups = {} any_errors = False res = subprocess.run(['git', 'grep', '\\defgroup'], check=True, stdout=subprocess.PIPE) for line in res.stdout.decode('utf8').split('\n'): m = re.match(r'^(\S+):.*\\defgroup\s+(\w+)', line) if m: filename = m.group(1) group = m.group(2) if os.path.basename(filename) in ('check_doxygen_groups.py', 'index.h'): continue if group in groups: any_errors = True print("{} uses \\defgroup {} but so does {}".format(groups[group], group, filename)) else: groups[group] = filename res = subprocess.run(['git', 'grep', '\\ingroup'], check=True, stdout=subprocess.PIPE) for line in res.stdout.decode('utf8').split('\n'): m = re.match(r'^(\S+):.*\\ingroup\s+(\w+)', line) if m: filename = m.group(1) group = m.group(2) if os.path.basename(filename) in ('check_doxygen_groups.py', 'index.h'): continue if group not in groups: any_errors = True print("{} uses \\ingroup {} which was never defined".format(filename, group)) sys.exit(any_errors)