1 from lcfg2.config import ConfigEnvironment
2 from lcfg2.common import NodeProperty
3 from lib.utils import SourceLogger
7 Identifier = re.compile(r"^[A-Za-z_][A-Za-z0-9_]+$")
10 def __init__(self, env: ConfigEnvironment):
13 def export(self, file):
16 for node in self._env.terms():
17 for name, val in self.variants(node):
18 line = self._format_line(node, name, val)
21 with open(file, 'w') as f:
22 f.write('\n'.join(lines))
24 def _format_line(self, node, name, value):
27 def variants(self, node):
28 value = self.get_value(node)
29 basename = f"CONFIG_{str.upper(node._name)}"
31 return [(basename, value)]
33 def get_value(self, node):
37 class ExportMakefileRules(Exporter):
38 def __init__(self, env: ConfigEnvironment):
41 def _format_line(self, node, name, value):
42 if not node.enabled():
43 return f"# {name} is disabled"
45 return f"{name} := {value}"
47 def get_value(self, node):
48 tok = NodeProperty.Token[node]
49 val = NodeProperty.Value[node]
60 SourceLogger.warn(node, tok,
61 f"value: '{val}' can not mapped to makefile primitives")
65 class ExportHeaderFile(Exporter):
66 def __init__(self, env: ConfigEnvironment):
69 def _format_line(self, node, name, value):
70 if not node.enabled():
71 return f"// {name} is disabled"
73 return f"#define {name} {value}"
75 def get_value(self, node):
76 tok = NodeProperty.Token[node]
77 val = NodeProperty.Value[node]
88 SourceLogger.warn(node, tok,
89 f"value: '{val}' can not mapped to C primitives")
93 class ExportJsonFile(Exporter):
94 def __init__(self, env):
97 def export(self, file):
99 for n in self._env.terms():
100 obj[n._name] = NodeProperty.Value[n]
102 with open(file, 'w') as f:
105 def restore_config_value(env: ConfigEnvironment, json_path):
106 with open(json_path) as f:
108 for k, v in j.items():
109 node = env.get_node(k)
111 print(f"warning: missing node: '{node}', skipped")
114 NodeProperty.Value[node] = v