summaryrefslogtreecommitdiffstats
path: root/rtemsspec/interface.py
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-05-05 14:41:19 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-05-08 21:58:56 +0200
commit79477ae61e625f0552a59b42aad34f463d571f04 (patch)
treee1fa16796eefc1a1761b4459ea4a746459a521ee /rtemsspec/interface.py
parentcontent: Make align_declarations() public (diff)
downloadrtems-central-79477ae61e625f0552a59b42aad34f463d571f04.tar.bz2
interface: Improve enabled-by for header files
Diffstat (limited to 'rtemsspec/interface.py')
-rw-r--r--rtemsspec/interface.py41
1 files changed, 35 insertions, 6 deletions
diff --git a/rtemsspec/interface.py b/rtemsspec/interface.py
index c1655c4c..d5ed395d 100644
--- a/rtemsspec/interface.py
+++ b/rtemsspec/interface.py
@@ -39,7 +39,7 @@ from rtemsspec.content import CContent, CInclude, enabled_by_to_exp, \
get_value_forward_declaration, get_value_hash, get_value_header_file, \
get_value_params, get_value_plural, get_value_unspecified_type, \
to_camel_case
-from rtemsspec.items import Item, ItemCache, ItemGetValueMap, ItemMapper
+from rtemsspec.items import Item, ItemCache, ItemGetValueMap, ItemMapper, Link
ItemMap = Dict[str, Item]
Lines = Union[str, List[str]]
@@ -723,6 +723,28 @@ def _bubble_sort(nodes: List[Node]) -> List[Node]:
return nodes
+def _merge_enabled_by(link: Link) -> Any:
+ enabled_by = link["enabled-by"]
+ enabled_by_2 = link.item["enabled-by"]
+ if enabled_by == enabled_by_2:
+ return enabled_by
+ if isinstance(enabled_by, bool):
+ if enabled_by:
+ return enabled_by_2
+ return False
+ if isinstance(enabled_by_2, bool):
+ if enabled_by_2:
+ return enabled_by
+ return False
+ return {"and": [enabled_by, enabled_by_2]}
+
+
+def _combine_enabled_by(item: Item, enabled_by: Any) -> Any:
+ if enabled_by == item["enabled-by"]:
+ return True
+ return enabled_by
+
+
class _HeaderFile:
""" A header file. """
@@ -817,13 +839,20 @@ class _HeaderFile:
exp_mapper = _HeaderExpressionMapper(self._item,
self.enabled_by_defined)
includes = [
- CInclude(item["path"],
- enabled_by_to_exp(item["enabled-by"], exp_mapper))
- for item in self._includes if item != self._item
+ CInclude(
+ item["path"],
+ enabled_by_to_exp(
+ _combine_enabled_by(self._item, item["enabled-by"]),
+ exp_mapper)) for item in self._includes
+ if item != self._item
]
includes.extend([
- CInclude(link.item["path"],
- enabled_by_to_exp(link["enabled-by"], exp_mapper))
+ CInclude(
+ link.item["path"],
+ enabled_by_to_exp(
+ _combine_enabled_by(self._item,
+ _merge_enabled_by(link)),
+ exp_mapper))
for link in self._item.links_to_parents("interface-include")
])
self._content.add_includes(includes)