summaryrefslogtreecommitdiffstats
path: root/rtemsqual/interface.py
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-05-11 09:57:57 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-05-28 10:38:22 +0200
commit348596b241c3de5fd648914ac4ef535d57ff8766 (patch)
treec2ca2a12b5c435b26abb66acb321527f0d5a5cfb /rtemsqual/interface.py
parentinterface: Do not add ingroups of defgroups (diff)
downloadrtems-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.py34
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)