diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-05-11 09:57:57 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-05-28 10:38:22 +0200 |
commit | 348596b241c3de5fd648914ac4ef535d57ff8766 (patch) | |
tree | c2ca2a12b5c435b26abb66acb321527f0d5a5cfb /rtemsqual/interface.py | |
parent | interface: Do not add ingroups of defgroups (diff) | |
download | rtems-central-348596b241c3de5fd648914ac4ef535d57ff8766.tar.bz2 |
content: Add CInclude
Support enabled-by attribute for C includes.
Diffstat (limited to 'rtemsqual/interface.py')
-rw-r--r-- | rtemsqual/interface.py | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/rtemsqual/interface.py b/rtemsqual/interface.py index e6e3f64b..31feda59 100644 --- a/rtemsqual/interface.py +++ b/rtemsqual/interface.py @@ -28,7 +28,8 @@ from contextlib import contextmanager import os from typing import Any, Callable, Dict, Iterator, List, Optional, Union -from rtemsqual.content import CContent, enabled_by_to_exp, ExpressionMapper +from rtemsqual.content import CContent, CInclude, enabled_by_to_exp, \ + ExpressionMapper from rtemsqual.items import Item, ItemCache, ItemMapper ItemMap = Dict[str, Item] @@ -107,6 +108,16 @@ class _ItemLevelExpressionMapper(ExpressionMapper): self._mapper.enabled_by_to_defined(symbol)) +class _HeaderExpressionMapper(ExpressionMapper): + def __init__(self, item: Item, enabled_by_defined: Dict[str, str]): + super().__init__() + self._mapper = ItemMapper(item) + self._enabled_by_defined = enabled_by_defined + + def map(self, symbol: str) -> str: + return self._mapper.substitute(self._enabled_by_defined[symbol]) + + def _add_definition(node: "Node", item: Item, prefix: str, value: Dict[str, Any], get_lines: GetLines) -> CContent: content = CContent() @@ -391,10 +402,7 @@ class _HeaderFile: self._item = item self._content = CContent() self._ingroups = {} # type: ItemMap - self._includes = [ - link.item for link in item.links_to_parents() - if link.role == "interface-include" - ] + self._includes = [] # type: List[Item] self._nodes = {} # type: Dict[str, Node] self.enabled_by_defined = enabled_by_defined @@ -479,10 +487,20 @@ class _HeaderFile: self._content.add_ingroup(_get_group_identifiers(self._ingroups)) self._content.add_copyrights_and_licenses() with self._content.header_guard(self._item["interface-path"]): - self._content.add_includes([ - inc["interface-path"] for inc in self._includes - if inc != self._item + exp_mapper = _HeaderExpressionMapper(self._item, + self.enabled_by_defined) + includes = [ + CInclude(item["interface-path"], + enabled_by_to_exp(item["enabled-by"], exp_mapper)) + for item in self._includes if item != self._item + ] + includes.extend([ + CInclude(link.item["interface-path"], + enabled_by_to_exp(link["enabled-by"], exp_mapper)) + for link in self._item.links_to_parents() + if link.role == "interface-include" ]) + self._content.add_includes(includes) with self._content.extern_c(): for node in self._get_nodes_in_dependency_order(): self._content.add(node.content) |