mirror of
https://github.com/Mbed-TLS/mbedtls-framework.git
synced 2026-08-17 08:39:51 +00:00
Add checker classes for options used in the wrong project
Signed-off-by: Gilles Peskine <[email protected]>
This commit is contained in:
@@ -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."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user