Merge pull request #13916 from leandrolanzieri/pr/kconfiglib/parse_help

tools/kconfiglib: Add riot_kconfig to override default behaviours
This commit is contained in:
Alexandre Abadie 2020-04-27 13:22:43 +02:00 committed by GitHub
commit e57b132a84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 68 additions and 4 deletions

53
dist/tools/kconfiglib/riot_kconfig.py vendored Normal file
View File

@ -0,0 +1,53 @@
""" RIOT customization of Kconfig """
import argparse
import sys
from kconfiglib import Kconfig, KconfigError
class RiotKconfig(Kconfig):
""" RIOT adaption of Kconfig class """
def _parse_help(self, node):
""" Parses the help section of a node, removing Doxygen markers """
doxygen_markers = ["@ref ", "@see "]
# call default parsing
super(RiotKconfig, self)._parse_help(node)
# remove Doxygen markers
for marker in doxygen_markers:
node.help = node.help.replace(marker, "")
def standard_riot_kconfig(description=None):
"""
Argument parsing helper for tools that take a single optional Kconfig file
argument (default: Kconfig). Returns the RiotKconfig instance for the parsed
configuration. Uses argparse internally.
Exits with sys.exit() (which raises SystemExit) on errors.
description (default: None):
The 'description' passed to argparse.ArgumentParser().
argparse.RawDescriptionHelpFormatter is used, so formatting is preserved.
"""
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description=description)
parser.add_argument(
"kconfig",
metavar="KCONFIG",
default="Kconfig",
nargs="?",
help="Kconfig file (default: Kconfig)")
args = parser.parse_args()
# Suppress backtraces for expected exceptions
try:
return RiotKconfig(args.kconfig)
except (EnvironmentError, KconfigError) as e:
# Some long exception messages have extra newlines for better
# formatting when reported as an unhandled exception. Strip them here.
sys.exit(str(e).strip())

10
dist/tools/kconfiglib/riot_menuconfig.py vendored Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env python
""" Menuconfig variant which uses RiotKconfig as base class """
import menuconfig
from riot_kconfig import standard_riot_kconfig
# keep documentation from the original tool
__doc__ = menuconfig.__doc__
if __name__ == "__main__":
menuconfig.menuconfig(standard_riot_kconfig(__doc__))

View File

@ -1,13 +1,14 @@
# Define tools to use
MENUCONFIG ?= $(RIOTTOOLS)/kconfiglib/menuconfig.py
MENUCONFIG ?= $(RIOTTOOLS)/kconfiglib/riot_menuconfig.py
BASE_MENUCONFIG ?= $(RIOTTOOLS)/kconfiglib/menuconfig.py
GENCONFIG ?= $(RIOTTOOLS)/kconfiglib/genconfig.py
MERGECONFIG ?= $(RIOTTOOLS)/kconfiglib/merge_config.py
$(MENUCONFIG):
$(BASE_MENUCONFIG):
@echo "[INFO] Kconfiglib not found - getting it"
@make -C $(RIOTTOOLS)/kconfiglib
@echo "[INFO] Kconfiglib downloaded"
$(GENCONFIG): $(MENUCONFIG)
$(GENCONFIG): $(BASE_MENUCONFIG)
$(MERGECONFIG): $(MENUCONFIG)
$(MERGECONFIG): $(BASE_MENUCONFIG)