diff --git a/scripts/mbedtls_framework/config_checks_generator.py b/scripts/mbedtls_framework/config_checks_generator.py index f55c061cb..1d1581f58 100644 --- a/scripts/mbedtls_framework/config_checks_generator.py +++ b/scripts/mbedtls_framework/config_checks_generator.py @@ -14,7 +14,7 @@ import re import sys import textwrap import typing -from typing import Iterator, List +from typing import Iterator, List, Optional from . import build_tree from . import typing_util @@ -106,6 +106,68 @@ class Internal(Checker): """Checker for an internal-only option.""" +class SubprojectInternal(Checker): + """Checker for an internal macro of a subproject.""" + + # meant to be overridden in child classes + SUBPROJECT = None #type: Optional[str] + + def __init__(self, name: str, suggestion: str = '', + subproject: Optional[str] = None) -> None: + super().__init__(name, suggestion) + if subproject is not None: + self.subproject = subproject + elif self.SUBPROJECT is not None: + self.subproject = self.SUBPROJECT + else: + raise ValueError('No subproject specified for ' + name) + + def _basic_message(self) -> str: + return f'{self.name} is an internal macro of {self.subproject} and may not be configured.' + + def before(self, prefix: str) -> str: + return f''' + #if defined({self.name}) + # define {prefix}_WASSET_{self.name} 1 + #else + # define {prefix}_WASSET_{self.name} 0 + #endif + #undef {self.name} + ''' + + def user(self, prefix: str) -> str: + return f''' + #if defined({self.name}) + # error {self._quoted_message()} + #endif + #if {prefix}_WASSET_{self.name} + # define {self.name} + #endif + #undef {prefix}_WASSET_{self.name} + ''' + + +class SubprojectOption(SubprojectInternal): + """Checker for a configuration option of a subproject.""" + + def __init__(self, name: str, subproject: Optional[str] = None) -> None: + super().__init__(name, subproject=subproject) + + def _basic_message(self) -> str: + return f'{self.name} must be configured in {self.subproject}.' + + def user(self, prefix: str) -> str: + return f''' + #if defined({self.name}) && !{prefix}_WASSET_{self.name} + # error {self._quoted_message()} + #endif + #if {prefix}_WASSET_{self.name} + # define {self.name} + #endif + #undef {prefix}_WASSET_{self.name} + ''' + + class Removed(Checker): """Checker for an option that has been removed."""