diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-05-05 14:41:19 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-05-08 21:58:56 +0200 |
commit | 79477ae61e625f0552a59b42aad34f463d571f04 (patch) | |
tree | e1fa16796eefc1a1761b4459ea4a746459a521ee | |
parent | content: Make align_declarations() public (diff) | |
download | rtems-central-79477ae61e625f0552a59b42aad34f463d571f04.tar.bz2 |
interface: Improve enabled-by for header files
-rw-r--r-- | rtemsspec/interface.py | 41 | ||||
-rw-r--r-- | rtemsspec/tests/spec-interface/h.yml | 14 | ||||
-rw-r--r-- | rtemsspec/tests/spec-interface/h2.yml | 3 | ||||
-rw-r--r-- | rtemsspec/tests/spec-interface/h5.yml | 13 | ||||
-rw-r--r-- | rtemsspec/tests/spec-interface/h6.yml | 13 | ||||
-rw-r--r-- | rtemsspec/tests/spec-interface/h7.yml | 13 | ||||
-rw-r--r-- | rtemsspec/tests/spec-interface/h8.yml | 13 | ||||
-rw-r--r-- | rtemsspec/tests/spec-interface/multiprocessing.yml | 13 | ||||
-rw-r--r-- | rtemsspec/tests/test_interface.py | 18 |
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 |