-from lcfg.api import ConfigIOProvider
-from lcfg.utils import is_basic
-
-import re
-
-class CHeaderConfigProvider(ConfigIOProvider):
- def __init__(self, header_save,
- header_prefix="CONFIG_") -> None:
- self.__header_export = header_save
- self.__prefix = header_prefix
- self.__re = re.compile(r"^[A-Za-z0-9_]+$")
-
- def export(self, env, config_dict):
- lines = []
- for k, v in config_dict.items():
- result = [ "#define" ]
- s = str.upper(k)
- s = f"{self.__prefix}{s}"
-
- if isinstance(v, str) and self.__re.match(v):
- s = f"{s}_{str.upper(v)}"
- v = ""
-
- result.append(s)
-
- v = self.serialize_value(v)
- if v is None or v is False:
- result.insert(0, "//")
- elif isinstance(v, str):
- result.append(v)
-
- lines.append(" ".join(result))
-
- with open(self.__header_export, 'w') as f:
- f.write("\n".join(lines))
-
-
- def serialize_value(self, v):
- if v is None:
- return None
-
- if isinstance(v, bool):
- return v
-
- if v and isinstance(v, str):
- return f'"{v}"'
-
- if is_basic(v):
- return str(v)
-
- raise ValueError(
- f"serialising {type(v)}: not supported")