summaryrefslogtreecommitdiffstats
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
parentcontent: Make align_declarations() public (diff)
downloadrtems-central-79477ae61e625f0552a59b42aad34f463d571f04.tar.bz2
interface: Improve enabled-by for header files
-rw-r--r--rtemsspec/interface.py41
-rw-r--r--rtemsspec/tests/spec-interface/h.yml14
-rw-r--r--rtemsspec/tests/spec-interface/h2.yml3
-rw-r--r--rtemsspec/tests/spec-interface/h5.yml13
-rw-r--r--rtemsspec/tests/spec-interface/h6.yml13
-rw-r--r--rtemsspec/tests/spec-interface/h7.yml13
-rw-r--r--rtemsspec/tests/spec-interface/h8.yml13
-rw-r--r--rtemsspec/tests/spec-interface/multiprocessing.yml13
-rw-r--r--rtemsspec/tests/test_interface.py18
9 files changed, 127 insertions, 14 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)
diff --git a/rtemsspec/tests/spec-interface/h.yml b/rtemsspec/tests/spec-interface/h.yml
index 5c85f17c..01118207 100644
--- a/rtemsspec/tests/spec-interface/h.yml
+++ b/rtemsspec/tests/spec-interface/h.yml
@@ -2,7 +2,7 @@ SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
brief: This header file defines X.
copyrights:
- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: []
+enabled-by: RTEMS_SMP
index-entries: []
interface-type: header-file
links:
@@ -23,6 +23,18 @@ links:
uid: h4
- role: other
uid: h4
+- enabled-by: true
+ role: interface-include
+ uid: h5
+- enabled-by: false
+ role: interface-include
+ uid: h6
+- enabled-by: ASM
+ role: interface-include
+ uid: h7
+- enabled-by: ASM
+ role: interface-include
+ uid: h8
- role: interface-placement
uid: domain-abc
- role: interface-ingroup
diff --git a/rtemsspec/tests/spec-interface/h2.yml b/rtemsspec/tests/spec-interface/h2.yml
index ee0baedb..1310cc06 100644
--- a/rtemsspec/tests/spec-interface/h2.yml
+++ b/rtemsspec/tests/spec-interface/h2.yml
@@ -2,8 +2,7 @@ SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
brief: This header file defines X.
copyrights:
- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by:
- not: ASM
+enabled-by: RTEMS_SMP
index-entries: []
interface-type: header-file
links:
diff --git a/rtemsspec/tests/spec-interface/h5.yml b/rtemsspec/tests/spec-interface/h5.yml
new file mode 100644
index 00000000..570397df
--- /dev/null
+++ b/rtemsspec/tests/spec-interface/h5.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: Not enabled.
+copyrights:
+- Copyright (C) 2023 embedded brains GmbH & Co. KG
+enabled-by: false
+index-entries: []
+interface-type: header-file
+links:
+- role: interface-placement
+ uid: domain-abc
+path: h5.h
+prefix: include
+type: interface
diff --git a/rtemsspec/tests/spec-interface/h6.yml b/rtemsspec/tests/spec-interface/h6.yml
new file mode 100644
index 00000000..fa42a2d6
--- /dev/null
+++ b/rtemsspec/tests/spec-interface/h6.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: Always enabled.
+copyrights:
+- Copyright (C) 2023 embedded brains GmbH & Co. KG
+enabled-by: true
+index-entries: []
+interface-type: header-file
+links:
+- role: interface-placement
+ uid: domain-abc
+path: h6.h
+prefix: include
+type: interface
diff --git a/rtemsspec/tests/spec-interface/h7.yml b/rtemsspec/tests/spec-interface/h7.yml
new file mode 100644
index 00000000..70dd952e
--- /dev/null
+++ b/rtemsspec/tests/spec-interface/h7.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: Not enabled.
+copyrights:
+- Copyright (C) 2023 embedded brains GmbH & Co. KG
+enabled-by: false
+index-entries: []
+interface-type: header-file
+links:
+- role: interface-placement
+ uid: domain-abc
+path: h7.h
+prefix: include
+type: interface
diff --git a/rtemsspec/tests/spec-interface/h8.yml b/rtemsspec/tests/spec-interface/h8.yml
new file mode 100644
index 00000000..40d0aafb
--- /dev/null
+++ b/rtemsspec/tests/spec-interface/h8.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: Multiprocessing.
+copyrights:
+- Copyright (C) 2023 embedded brains GmbH & Co. KG
+enabled-by: RTEMS_MULTIPROCESSING
+index-entries: []
+interface-type: header-file
+links:
+- role: interface-placement
+ uid: domain-abc
+path: h8.h
+prefix: include
+type: interface
diff --git a/rtemsspec/tests/spec-interface/multiprocessing.yml b/rtemsspec/tests/spec-interface/multiprocessing.yml
new file mode 100644
index 00000000..83750c07
--- /dev/null
+++ b/rtemsspec/tests/spec-interface/multiprocessing.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2023 embedded brains GmbH & Co. KG
+enabled-by: true
+index-entries: []
+interface-type: unspecified-define
+links:
+- role: interface-placement
+ uid: domain-command-line
+- role: interface-ingroup
+ uid: command-line
+name: RTEMS_MULTIPROCESSING
+type: interface
diff --git a/rtemsspec/tests/test_interface.py b/rtemsspec/tests/test_interface.py
index bdd9fbfa..5a4d972e 100644
--- a/rtemsspec/tests/test_interface.py
+++ b/rtemsspec/tests/test_interface.py
@@ -28,7 +28,7 @@ import os
import pytest
from rtemsspec.interface import generate
-from rtemsspec.items import EmptyItemCache, ItemCache
+from rtemsspec.items import EmptyItemCache, ItemCache, item_is_enabled
from rtemsspec.tests.util import create_item_cache_config_and_copy_spec
@@ -46,7 +46,8 @@ def test_interface(tmpdir):
item_cache_config = create_item_cache_config_and_copy_spec(
tmpdir, "spec-interface", with_spec_types=True)
- generate(interface_config, ItemCache(item_cache_config))
+ generate(interface_config,
+ ItemCache(item_cache_config, is_item_enabled=item_is_enabled))
with open(os.path.join(base_directory, "include", "h.h"), "r") as src:
content = """/* SPDX-License-Identifier: BSD-2-Clause */
@@ -108,18 +109,25 @@ def test_interface(tmpdir):
#ifndef _H_H
#define _H_H
+#include <h2.h>
#include <h3.h>
#include <math.h>
#include <stdint.h>
-#if !defined(ASM) && defined(RTEMS_SMP)
- #include <h2.h>
+#if 0
+ #include <h5.h>
+ #include <h6.h>
+ #include <h7.h>
#endif
-#if defined(ASM) && defined(RTEMS_SMP)
+#if defined(ASM)
#include <h4.h>
#endif
+#if defined(ASM) && defined(RTEMS_MULTIPROCESSING)
+ #include <h8.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif