source: rtems-docs/eng/req/items.rst @ fcac22e

Last change on this file since fcac22e was fcac22e, checked in by Sebastian Huber <sebastian.huber@…>, on 03/02/21 at 07:28:48

eng: Fix typo

Update #3715.

  • Property mode set to 100644
File size: 166.6 KB
Line 
1.. SPDX-License-Identifier: CC-BY-SA-4.0
2
3.. Copyright (C) 2019, 2020 embedded brains GmbH (http://www.embedded-brains.de)
4
5.. This file is part of the RTEMS quality process and was automatically
6.. generated.  If you find something that needs to be fixed or
7.. worded better please post a report or patch to an RTEMS mailing list
8.. or raise a bug report:
9..
10.. https://www.rtems.org/bugs.html
11..
12.. For information on updating and regenerating please refer to the How-To
13.. section in the Software Requirements Engineering chapter of the
14.. RTEMS Software Engineering manual.  The manual is provided as a part of
15.. a release.  For development sources please refer to the online
16.. documentation at:
17..
18.. https://docs.rtems.org
19
20.. _ReqEngSpecificationItems:
21
22Specification Items
23===================
24
25.. _ReqEngSpecificationItemHierarchy:
26
27Specification Item Hierarchy
28----------------------------
29
30The specification item types have the following hierarchy:
31
32* :ref:`SpecTypeRootItemType`
33
34  * :ref:`SpecTypeBuildItemType`
35
36    * :ref:`SpecTypeBuildAdaTestProgramItemType`
37
38    * :ref:`SpecTypeBuildBSPItemType`
39
40    * :ref:`SpecTypeBuildConfigurationFileItemType`
41
42    * :ref:`SpecTypeBuildConfigurationHeaderItemType`
43
44    * :ref:`SpecTypeBuildGroupItemType`
45
46    * :ref:`SpecTypeBuildLibraryItemType`
47
48    * :ref:`SpecTypeBuildObjectsItemType`
49
50    * :ref:`SpecTypeBuildOptionItemType`
51
52    * :ref:`SpecTypeBuildScriptItemType`
53
54    * :ref:`SpecTypeBuildStartFileItemType`
55
56    * :ref:`SpecTypeBuildTestProgramItemType`
57
58  * :ref:`SpecTypeConstraintItemType`
59
60  * :ref:`SpecTypeGlossaryItemType`
61
62    * :ref:`SpecTypeGlossaryGroupItemType`
63
64    * :ref:`SpecTypeGlossaryTermItemType`
65
66  * :ref:`SpecTypeInterfaceItemType`
67
68    * :ref:`SpecTypeApplicationConfigurationGroupItemType`
69
70    * :ref:`SpecTypeApplicationConfigurationOptionItemType`
71
72      * :ref:`SpecTypeApplicationConfigurationFeatureEnableOptionItemType`
73
74      * :ref:`SpecTypeApplicationConfigurationFeatureOptionItemType`
75
76      * :ref:`SpecTypeApplicationConfigurationValueOptionItemType`
77
78    * :ref:`SpecTypeInterfaceCompoundItemType`
79
80    * :ref:`SpecTypeInterfaceContainerItemType`
81
82    * :ref:`SpecTypeInterfaceDefineItemType`
83
84    * :ref:`SpecTypeInterfaceDomainItemType`
85
86    * :ref:`SpecTypeInterfaceEnumItemType`
87
88    * :ref:`SpecTypeInterfaceEnumeratorItemType`
89
90    * :ref:`SpecTypeInterfaceForwardDeclarationItemType`
91
92    * :ref:`SpecTypeInterfaceFunctionItemType`
93
94    * :ref:`SpecTypeInterfaceGroupItemType`
95
96    * :ref:`SpecTypeInterfaceHeaderFileItemType`
97
98    * :ref:`SpecTypeInterfaceMacroItemType`
99
100    * :ref:`SpecTypeInterfaceTypedefItemType`
101
102    * :ref:`SpecTypeInterfaceUnspecifiedItemType`
103
104    * :ref:`SpecTypeInterfaceVariableItemType`
105
106  * :ref:`SpecTypeRequirementItemType`
107
108    * :ref:`SpecTypeFunctionalRequirementItemType`
109
110      * :ref:`SpecTypeActionRequirementItemType`
111
112      * :ref:`SpecTypeGenericFunctionalRequirementItemType`
113
114    * :ref:`SpecTypeNonFunctionalRequirementItemType`
115
116      * :ref:`SpecTypeDesignGroupRequirementItemType`
117
118      * :ref:`SpecTypeGenericNonFunctionalRequirementItemType`
119
120      * :ref:`SpecTypeRuntimePerformanceRequirementItemType`
121
122  * :ref:`SpecTypeRequirementValidationItemType`
123
124  * :ref:`SpecTypeRuntimeMeasurementTestItemType`
125
126  * :ref:`SpecTypeSpecificationItemType`
127
128  * :ref:`SpecTypeTestCaseItemType`
129
130  * :ref:`SpecTypeTestPlatformItemType`
131
132  * :ref:`SpecTypeTestProcedureItemType`
133
134  * :ref:`SpecTypeTestSuiteItemType`
135
136.. _ReqEngSpecificationItemTypes:
137
138Specification Item Types
139------------------------
140
141.. _SpecTypeRootItemType:
142
143Root Item Type
144^^^^^^^^^^^^^^
145
146The technical specification of RTEMS will contain for example requirements,
147specializations of requirements, interface specifications, test suites, test
148cases, and requirement validations.  These things will be called *specification
149items* or just *items* if it is clear from the context.
150
151The specification items are stored in files in :term:`YAML` format with a
152defined set of key-value pairs called attributes.  Each attribute key name
153shall be a :ref:`SpecTypeName`.  In particular, key names which begin with an
154underscore (``_``) are reserved for internal use in tools.
155
156This is the root specification item type. All explicit attributes shall be
157specified. The explicit attributes for this type are:
158
159SPDX-License-Identifier
160    The attribute value shall be a :ref:`SpecTypeSPDXLicenseIdentifier`. It
161    shall be the license of the item.
162
163copyrights
164    The attribute value shall be a list. Each list element shall be a
165    :ref:`SpecTypeCopyright`. It shall be the list of copyright statements of
166    the item.
167
168enabled-by
169    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. It
170    shall define the conditions under which the item is enabled.
171
172links
173    The attribute value shall be a list. Each list element shall be a
174    :ref:`SpecTypeLink`.
175
176type
177    The attribute value shall be a :ref:`SpecTypeName`. It shall be the item
178    type.  The selection of types and the level of detail depends on a
179    particular standard and product model.  We need enough flexibility to be in
180    line with ECSS-E-ST-10-06 and possible future applications of other
181    standards.  The item type may be refined further with additional
182    type-specific subtypes.
183
184This type is refined by the following types:
185
186* :ref:`SpecTypeBuildItemType`
187
188* :ref:`SpecTypeConstraintItemType`
189
190* :ref:`SpecTypeGlossaryItemType`
191
192* :ref:`SpecTypeInterfaceItemType`
193
194* :ref:`SpecTypeRequirementItemType`
195
196* :ref:`SpecTypeRequirementValidationItemType`
197
198* :ref:`SpecTypeRuntimeMeasurementTestItemType`
199
200* :ref:`SpecTypeSpecificationItemType`
201
202* :ref:`SpecTypeTestCaseItemType`
203
204* :ref:`SpecTypeTestPlatformItemType`
205
206* :ref:`SpecTypeTestProcedureItemType`
207
208* :ref:`SpecTypeTestSuiteItemType`
209
210.. _SpecTypeBuildItemType:
211
212Build Item Type
213^^^^^^^^^^^^^^^
214
215This type refines the :ref:`SpecTypeRootItemType` through the ``type``
216attribute if the value is ``build``. This set of attributes specifies a build
217item. All explicit attributes shall be specified. The explicit attributes for
218this type are:
219
220build-type
221    The attribute value shall be a :ref:`SpecTypeName`. It shall be the build
222    item type.
223
224This type is refined by the following types:
225
226* :ref:`SpecTypeBuildAdaTestProgramItemType`
227
228* :ref:`SpecTypeBuildBSPItemType`
229
230* :ref:`SpecTypeBuildConfigurationFileItemType`
231
232* :ref:`SpecTypeBuildConfigurationHeaderItemType`
233
234* :ref:`SpecTypeBuildGroupItemType`
235
236* :ref:`SpecTypeBuildLibraryItemType`
237
238* :ref:`SpecTypeBuildObjectsItemType`
239
240* :ref:`SpecTypeBuildOptionItemType`
241
242* :ref:`SpecTypeBuildScriptItemType`
243
244* :ref:`SpecTypeBuildStartFileItemType`
245
246* :ref:`SpecTypeBuildTestProgramItemType`
247
248.. _SpecTypeBuildAdaTestProgramItemType:
249
250Build Ada Test Program Item Type
251^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
252
253This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
254attribute if the value is ``ada-test-program``. This set of attributes
255specifies an Ada test program executable to build. Test programs may use
256additional objects provided by :ref:`SpecTypeBuildObjectsItemType` items.  Test
257programs have an implicit ``enabled-by`` attribute value which is controlled by
258the option action :ref:`set-test-state <SpecTypeBuildOptionItemType>`.  If the
259test state is set to ``exclude``, then the test program is not built. All
260explicit attributes shall be specified. The explicit attributes for this type
261are:
262
263ada-main
264    The attribute value shall be a string. It shall be the path to the Ada main
265    body file.
266
267ada-object-directory
268    The attribute value shall be a string. It shall be the path to the Ada
269    object directory (``-D`` option value for ``gnatmake``).
270
271adaflags
272    The attribute value shall be a list of strings. It shall be a list of
273    options for the Ada compiler.
274
275adaincludes
276    The attribute value shall be a list of strings. It shall be a list of Ada
277    include paths.
278
279cflags
280    The attribute value shall be a list. Each list element shall be a
281    :ref:`SpecTypeBuildCCompilerOption`.
282
283cppflags
284    The attribute value shall be a list. Each list element shall be a
285    :ref:`SpecTypeBuildCPreprocessorOption`.
286
287includes
288    The attribute value shall be a list. Each list element shall be a
289    :ref:`SpecTypeBuildIncludePath`.
290
291ldflags
292    The attribute value shall be a list. Each list element shall be a
293    :ref:`SpecTypeBuildLinkerOption`.
294
295source
296    The attribute value shall be a list. Each list element shall be a
297    :ref:`SpecTypeBuildSource`.
298
299stlib
300    The attribute value shall be a list. Each list element shall be a
301    :ref:`SpecTypeBuildLinkStaticLibraryDirective`.
302
303target
304    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
305
306use-after
307    The attribute value shall be a list. Each list element shall be a
308    :ref:`SpecTypeBuildUseAfterDirective`.
309
310use-before
311    The attribute value shall be a list. Each list element shall be a
312    :ref:`SpecTypeBuildUseBeforeDirective`.
313
314Please have a look at the following example:
315
316.. code-block:: yaml
317
318    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
319    ada-main: testsuites/ada/samples/hello/hello.adb
320    ada-object-directory: testsuites/ada/samples/hello
321    adaflags: []
322    adaincludes:
323    - cpukit/include/adainclude
324    - testsuites/ada/support
325    build-type: ada-test-program
326    cflags: []
327    copyrights:
328    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
329    cppflags: []
330    enabled-by: true
331    includes: []
332    ldflags: []
333    links: []
334    source:
335    - testsuites/ada/samples/hello/init.c
336    stlib: []
337    target: testsuites/ada/ada_hello.exe
338    type: build
339    use-after: []
340    use-before: []
341
342.. _SpecTypeBuildBSPItemType:
343
344Build BSP Item Type
345^^^^^^^^^^^^^^^^^^^
346
347This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
348attribute if the value is ``bsp``. This set of attributes specifies a base BSP
349variant to build. All explicit attributes shall be specified. The explicit
350attributes for this type are:
351
352arch
353    The attribute value shall be a string. It shall be the target architecture
354    of the BSP.
355
356bsp
357    The attribute value shall be a string. It shall be the base BSP variant
358    name.
359
360cflags
361    The attribute value shall be a list. Each list element shall be a
362    :ref:`SpecTypeBuildCCompilerOption`.
363
364cppflags
365    The attribute value shall be a list. Each list element shall be a
366    :ref:`SpecTypeBuildCPreprocessorOption`.
367
368family
369    The attribute value shall be a string. It shall be the BSP family name.
370    The name shall be the last directory of the path to the BSP sources.
371
372includes
373    The attribute value shall be a list. Each list element shall be a
374    :ref:`SpecTypeBuildIncludePath`.
375
376install
377    The attribute value shall be a list. Each list element shall be a
378    :ref:`SpecTypeBuildInstallDirective`.
379
380source
381    The attribute value shall be a list. Each list element shall be a
382    :ref:`SpecTypeBuildSource`.
383
384Please have a look at the following example:
385
386.. code-block:: yaml
387
388    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
389    arch: myarch
390    bsp: mybsp
391    build-type: bsp
392    cflags: []
393    copyrights:
394    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
395    cppflags: []
396    enabled-by: true
397    family: mybsp
398    includes: []
399    install:
400    - destination: ${BSP_INCLUDEDIR}
401      source:
402      - bsps/myarch/mybsp/include/bsp.h
403      - bsps/myarch/mybsp/include/tm27.h
404    - destination: ${BSP_INCLUDEDIR}/bsp
405      source:
406      - bsps/myarch/mybsp/include/bsp/irq.h
407    - destination: ${BSP_LIBDIR}
408      source:
409      - bsps/myarch/mybsp/start/linkcmds
410    links:
411    - role: build-dependency
412      uid: ../../obj
413    - role: build-dependency
414      uid: ../../opto2
415    - role: build-dependency
416      uid: abi
417    - role: build-dependency
418      uid: obj
419    - role: build-dependency
420      uid: ../start
421    - role: build-dependency
422      uid: ../../bspopts
423    source:
424    - bsps/myarch/mybsp/start/bspstart.c
425    type: build
426
427.. _SpecTypeBuildConfigurationFileItemType:
428
429Build Configuration File Item Type
430^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
431
432This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
433attribute if the value is ``config-file``. This set of attributes specifies a
434configuration file placed in the build tree.  The configuration file is
435generated during the configure command execution and is placed in the build
436tree. All explicit attributes shall be specified. The explicit attributes for
437this type are:
438
439content
440    The attribute value shall be a string. It shall be the content of the
441    configuration file. A ${VARIABLE} substitution is performed during the
442    configure command execution using the variables of the configuration set.
443    Use $$ for a plain $ character. To have all variables from sibling items
444    available for substitution it is recommended to link them in the proper
445    order.
446
447install-path
448    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
449
450target
451    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
452
453Please have a look at the following example:
454
455.. code-block:: yaml
456
457    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
458    build-type: config-file
459    content: |
460      # ...
461      Name: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}
462      # ...
463    copyrights:
464    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
465    enabled-by: true
466    install-path: ${PREFIX}/lib/pkgconfig
467    links: []
468    target: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}.pc
469    type: build
470
471.. _SpecTypeBuildConfigurationHeaderItemType:
472
473Build Configuration Header Item Type
474^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
475
476This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
477attribute if the value is ``config-header``. This set of attributes specifies
478configuration header file.  The configuration header file is generated during
479configure command execution and is placed in the build tree.  All collected
480configuration defines are written to the configuration header file during the
481configure command execution.  To have all configuration defines from sibling
482items available it is recommended to link them in the proper order. All
483explicit attributes shall be specified. The explicit attributes for this type
484are:
485
486guard
487    The attribute value shall be a string. It shall be the header guard define.
488
489include-headers
490    The attribute value shall be a list of strings. It shall be a list of
491    header files to include via ``#include <...>``.
492
493install-path
494    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
495
496target
497    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
498
499.. _SpecTypeBuildGroupItemType:
500
501Build Group Item Type
502^^^^^^^^^^^^^^^^^^^^^
503
504This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
505attribute if the value is ``group``. This set of attributes provides a means to
506aggregate other build items and modify the build item context which is used by
507referenced build items.  The ``includes``, ``ldflags``, ``objects``, and
508``use`` variables of the build item context are updated by the corresponding
509attributes of the build group. All explicit attributes shall be specified. The
510explicit attributes for this type are:
511
512includes
513    The attribute value shall be a list. Each list element shall be a
514    :ref:`SpecTypeBuildIncludePath`.
515
516install
517    The attribute value shall be a list. Each list element shall be a
518    :ref:`SpecTypeBuildInstallDirective`.
519
520ldflags
521    The attribute value shall be a list of strings. It shall be a list of
522    options for the linker.  They are used to link executables referenced by
523    this item.
524
525use-after
526    The attribute value shall be a list. Each list element shall be a
527    :ref:`SpecTypeBuildUseAfterDirective`.
528
529use-before
530    The attribute value shall be a list. Each list element shall be a
531    :ref:`SpecTypeBuildUseBeforeDirective`.
532
533Please have a look at the following example:
534
535.. code-block:: yaml
536
537    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
538    build-type: group
539    copyrights:
540    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
541    enabled-by:
542    - BUILD_TESTS
543    - BUILD_SAMPLES
544    includes:
545    - testsuites/support/include
546    install: []
547    ldflags:
548    - -Wl,--wrap=printf
549    - -Wl,--wrap=puts
550    links:
551    - role: build-dependency
552      uid: ticker
553    type: build
554    use-after: []
555    use-before:
556    - rtemstest
557
558.. _SpecTypeBuildLibraryItemType:
559
560Build Library Item Type
561^^^^^^^^^^^^^^^^^^^^^^^
562
563This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
564attribute if the value is ``library``. This set of attributes specifies a
565static library.  Library items may use additional objects provided by
566:ref:`SpecTypeBuildObjectsItemType` items through the build dependency links of
567the item. All explicit attributes shall be specified. The explicit attributes
568for this type are:
569
570cflags
571    The attribute value shall be a list. Each list element shall be a
572    :ref:`SpecTypeBuildCCompilerOption`.
573
574cppflags
575    The attribute value shall be a list. Each list element shall be a
576    :ref:`SpecTypeBuildCPreprocessorOption`.
577
578cxxflags
579    The attribute value shall be a list. Each list element shall be a
580    :ref:`SpecTypeBuildCXXCompilerOption`.
581
582includes
583    The attribute value shall be a list. Each list element shall be a
584    :ref:`SpecTypeBuildIncludePath`.
585
586install
587    The attribute value shall be a list. Each list element shall be a
588    :ref:`SpecTypeBuildInstallDirective`.
589
590install-path
591    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
592
593source
594    The attribute value shall be a list. Each list element shall be a
595    :ref:`SpecTypeBuildSource`.
596
597target
598    The attribute value shall be a :ref:`SpecTypeBuildTarget`. It shall be the
599    name of the static library, e.g. ``z`` for ``libz.a``.
600
601Please have a look at the following example:
602
603.. code-block:: yaml
604
605    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
606    build-type: library
607    cflags:
608    - -Wno-pointer-sign
609    copyrights:
610    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
611    cppflags: []
612    cxxflags: []
613    enabled-by: true
614    includes:
615    - cpukit/libfs/src/jffs2/include
616    install:
617    - destination: ${BSP_INCLUDEDIR}/rtems
618      source:
619      - cpukit/include/rtems/jffs2.h
620    install-path: ${BSP_LIBDIR}
621    links: []
622    source:
623    - cpukit/libfs/src/jffs2/src/build.c
624    target: jffs2
625    type: build
626
627.. _SpecTypeBuildObjectsItemType:
628
629Build Objects Item Type
630^^^^^^^^^^^^^^^^^^^^^^^
631
632This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
633attribute if the value is ``objects``. This set of attributes specifies a set
634of object files used to build static libraries or test programs. All explicit
635attributes shall be specified. The explicit attributes for this type are:
636
637cflags
638    The attribute value shall be a list. Each list element shall be a
639    :ref:`SpecTypeBuildCCompilerOption`.
640
641cppflags
642    The attribute value shall be a list. Each list element shall be a
643    :ref:`SpecTypeBuildCPreprocessorOption`.
644
645cxxflags
646    The attribute value shall be a list. Each list element shall be a
647    :ref:`SpecTypeBuildCXXCompilerOption`.
648
649includes
650    The attribute value shall be a list. Each list element shall be a
651    :ref:`SpecTypeBuildIncludePath`.
652
653install
654    The attribute value shall be a list. Each list element shall be a
655    :ref:`SpecTypeBuildInstallDirective`.
656
657source
658    The attribute value shall be a list. Each list element shall be a
659    :ref:`SpecTypeBuildSource`.
660
661Please have a look at the following example:
662
663.. code-block:: yaml
664
665    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
666    build-type: objects
667    cflags: []
668    copyrights:
669    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
670    cppflags: []
671    cxxflags: []
672    enabled-by: true
673    includes: []
674    install:
675    - destination: ${BSP_INCLUDEDIR}/bsp
676      source:
677      - bsps/include/bsp/bootcard.h
678      - bsps/include/bsp/default-initial-extension.h
679      - bsps/include/bsp/fatal.h
680    links: []
681    source:
682    - bsps/shared/start/bootcard.c
683    - bsps/shared/rtems-version.c
684    type: build
685
686.. _SpecTypeBuildOptionItemType:
687
688Build Option Item Type
689^^^^^^^^^^^^^^^^^^^^^^
690
691This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
692attribute if the value is ``option``. This set of attributes specifies a build
693option. The following explicit attributes are mandatory:
694
695* ``actions``
696
697* ``default``
698
699* ``default-by-variant``
700
701* ``description``
702
703The explicit attributes for this type are:
704
705actions
706    The attribute value shall be a list. Each list element shall be a
707    :ref:`SpecTypeBuildOptionAction`. Each action operates on the *action
708    value* handed over by a previous action and action-specific attribute
709    values.  The actions pass the processed action value to the next action in
710    the list.  The first action starts with an action value of ``None``.  The
711    actions are carried out during the configure command execution.
712
713default
714    The attribute value shall be a :ref:`SpecTypeBuildOptionValue`. It shall be
715    the default value of the option if no variant-specific default value is
716    specified.  Use ``null`` to specify that no default value exits.  The
717    variant-specific default values may be specified by the
718    ``default-by-variant`` attribute.
719
720default-by-variant
721    The attribute value shall be a list. Each list element shall be a
722    :ref:`SpecTypeBuildOptionDefaultByVariant`. The list is processed from top
723    to bottom.  If a matching variant is found, then the processing stops.
724
725description
726    The attribute value shall be an optional string. It shall be the
727    description of the option.
728
729format
730    The attribute value shall be an optional string. It shall be a `Python
731    format string
732    <https://docs.python.org/3/library/string.html#formatstrings>`_, for
733    example ``'{}'`` or ``'{:#010x}'``.
734
735name
736    The attribute value shall be a :ref:`SpecTypeBuildOptionName`.
737
738Please have a look at the following example:
739
740.. code-block:: yaml
741
742    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
743    actions:
744    - get-integer: null
745    - define: null
746    build-type: option
747    copyrights:
748    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
749    default: 115200
750    default-by-variant:
751    - value: 9600
752      variants:
753      - m68k/m5484FireEngine
754      - powerpc/hsc_cm01
755    - value: 19200
756      variants:
757      - m68k/COBRA5475
758    description: |
759      Default baud for console and other serial devices.
760    enabled-by: true
761    format: '{}'
762    links: []
763    name: BSP_CONSOLE_BAUD
764    type: build
765
766.. _SpecTypeBuildScriptItemType:
767
768Build Script Item Type
769^^^^^^^^^^^^^^^^^^^^^^
770
771This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
772attribute if the value is ``script``. This set of attributes specifies a build
773script.  The optional attributes may be required by commands executed through
774the scripts. The following explicit attributes are mandatory:
775
776* ``do-build``
777
778* ``do-configure``
779
780* ``prepare-build``
781
782* ``prepare-configure``
783
784The explicit attributes for this type are:
785
786asflags
787    The attribute value shall be a list. Each list element shall be a
788    :ref:`SpecTypeBuildAssemblerOption`.
789
790cflags
791    The attribute value shall be a list. Each list element shall be a
792    :ref:`SpecTypeBuildCCompilerOption`.
793
794cppflags
795    The attribute value shall be a list. Each list element shall be a
796    :ref:`SpecTypeBuildCPreprocessorOption`.
797
798cxxflags
799    The attribute value shall be a list. Each list element shall be a
800    :ref:`SpecTypeBuildCXXCompilerOption`.
801
802do-build
803    The attribute value shall be an optional string. If this script shall
804    execute, then it shall be Python code which is executed via ``exec()`` in
805    the context of the ``do_build()`` method of the :file:`wscript`.  A local
806    variable ``bld`` is available with the ``waf`` build context.  A local
807    variable ``bic`` is available with the build item context.
808
809do-configure
810    The attribute value shall be an optional string. If this script shall
811    execute, then it shall be Python code which is executed via ``exec()`` in
812    the context of the ``do_configure()`` method of the :file:`wscript`.  A
813    local variable ``conf`` is available with the ``waf`` configuration
814    context.  A local variable ``cic`` is available with the configuration item
815    context.
816
817includes
818    The attribute value shall be a list. Each list element shall be a
819    :ref:`SpecTypeBuildIncludePath`.
820
821ldflags
822    The attribute value shall be a list. Each list element shall be a
823    :ref:`SpecTypeBuildLinkerOption`.
824
825prepare-build
826    The attribute value shall be an optional string. If this script shall
827    execute, then it shall be Python code which is executed via ``exec()`` in
828    the context of the ``prepare_build()`` method of the :file:`wscript`.  A
829    local variable ``bld`` is available with the ``waf`` build context.  A
830    local variable ``bic`` is available with the build item context.
831
832prepare-configure
833    The attribute value shall be an optional string. If this script shall
834    execute, then it shall be Python code which is executed via ``exec()`` in
835    the context of the ``prepare_configure()`` method of the :file:`wscript`.
836    A local variable ``conf`` is available with the ``waf`` configuration
837    context.  A local variable ``cic`` is available with the configuration item
838    context.
839
840stlib
841    The attribute value shall be a list. Each list element shall be a
842    :ref:`SpecTypeBuildLinkStaticLibraryDirective`.
843
844use-after
845    The attribute value shall be a list. Each list element shall be a
846    :ref:`SpecTypeBuildUseAfterDirective`.
847
848use-before
849    The attribute value shall be a list. Each list element shall be a
850    :ref:`SpecTypeBuildUseBeforeDirective`.
851
852Please have a look at the following example:
853
854.. code-block:: yaml
855
856    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
857    build-type: script
858    copyrights:
859    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
860    default: null
861    default-by-variant: []
862    do-build: |
863      bld.install_as(
864          "${BSP_LIBDIR}/linkcmds",
865          "bsps/" + bld.env.ARCH + "/" + bld.env.BSP_FAMILY +
866          "/start/linkcmds." + bld.env.BSP_BASE
867      )
868    do-configure: |
869      conf.env.append_value(
870          "LINKFLAGS",
871          ["-qnolinkcmds", "-T", "linkcmds." + conf.env.BSP_BASE]
872      )
873    enabled-by: true
874    links: []
875    prepare-build: null
876    prepare-configure: null
877    type: build
878
879.. _SpecTypeBuildStartFileItemType:
880
881Build Start File Item Type
882^^^^^^^^^^^^^^^^^^^^^^^^^^
883
884This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
885attribute if the value is ``start-file``. This set of attributes specifies a
886start file to build.  A start file is used to link an executable. All explicit
887attributes shall be specified. The explicit attributes for this type are:
888
889asflags
890    The attribute value shall be a list. Each list element shall be a
891    :ref:`SpecTypeBuildAssemblerOption`.
892
893cppflags
894    The attribute value shall be a list. Each list element shall be a
895    :ref:`SpecTypeBuildCPreprocessorOption`.
896
897includes
898    The attribute value shall be a list. Each list element shall be a
899    :ref:`SpecTypeBuildIncludePath`.
900
901install-path
902    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
903
904source
905    The attribute value shall be a list. Each list element shall be a
906    :ref:`SpecTypeBuildSource`.
907
908target
909    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
910
911Please have a look at the following example:
912
913.. code-block:: yaml
914
915    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
916    asflags: []
917    build-type: start-file
918    copyrights:
919    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
920    cppflags: []
921    enabled-by: true
922    includes: []
923    install-path: ${BSP_LIBDIR}
924    links: []
925    source:
926    - bsps/sparc/shared/start/start.S
927    target: start.o
928    type: build
929
930.. _SpecTypeBuildTestProgramItemType:
931
932Build Test Program Item Type
933^^^^^^^^^^^^^^^^^^^^^^^^^^^^
934
935This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
936attribute if the value is ``test-program``. This set of attributes specifies a
937test program executable to build. Test programs may use additional objects
938provided by :ref:`SpecTypeBuildObjectsItemType` items.  Test programs have an
939implicit ``enabled-by`` attribute value which is controlled by the option
940action :ref:`set-test-state <SpecTypeBuildOptionItemType>`.  If the test state
941is set to ``exclude``, then the test program is not built. All explicit
942attributes shall be specified. The explicit attributes for this type are:
943
944cflags
945    The attribute value shall be a list. Each list element shall be a
946    :ref:`SpecTypeBuildCCompilerOption`.
947
948cppflags
949    The attribute value shall be a list. Each list element shall be a
950    :ref:`SpecTypeBuildCPreprocessorOption`.
951
952cxxflags
953    The attribute value shall be a list. Each list element shall be a
954    :ref:`SpecTypeBuildCXXCompilerOption`.
955
956features
957    The attribute value shall be a string. It shall be the ``waf`` build
958    features for this test program.
959
960includes
961    The attribute value shall be a list. Each list element shall be a
962    :ref:`SpecTypeBuildIncludePath`.
963
964ldflags
965    The attribute value shall be a list. Each list element shall be a
966    :ref:`SpecTypeBuildLinkerOption`.
967
968source
969    The attribute value shall be a list. Each list element shall be a
970    :ref:`SpecTypeBuildSource`.
971
972stlib
973    The attribute value shall be a list. Each list element shall be a
974    :ref:`SpecTypeBuildLinkStaticLibraryDirective`.
975
976target
977    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
978
979use-after
980    The attribute value shall be a list. Each list element shall be a
981    :ref:`SpecTypeBuildUseAfterDirective`.
982
983use-before
984    The attribute value shall be a list. Each list element shall be a
985    :ref:`SpecTypeBuildUseBeforeDirective`.
986
987Please have a look at the following example:
988
989.. code-block:: yaml
990
991    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
992    build-type: test-program
993    cflags: []
994    copyrights:
995    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
996    cppflags: []
997    cxxflags: []
998    enabled-by: true
999    features: c cprogram
1000    includes: []
1001    ldflags: []
1002    links: []
1003    source:
1004    - testsuites/samples/ticker/init.c
1005    - testsuites/samples/ticker/tasks.c
1006    stlib: []
1007    target: testsuites/samples/ticker.exe
1008    type: build
1009    use-after: []
1010    use-before: []
1011
1012.. _SpecTypeConstraintItemType:
1013
1014Constraint Item Type
1015^^^^^^^^^^^^^^^^^^^^
1016
1017This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1018attribute if the value is ``constraint``. This set of attributes specifies a
1019constraint. All explicit attributes shall be specified. The explicit attributes
1020for this type are:
1021
1022rationale
1023    The attribute value shall be an optional string. If the value is present,
1024    then it shall state the rationale or justification of the constraint.
1025
1026scope
1027    The attribute value shall be a string. It shall be the scope of the
1028    constraint.
1029
1030text
1031    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1032    state the constraint.
1033
1034.. _SpecTypeGlossaryItemType:
1035
1036Glossary Item Type
1037^^^^^^^^^^^^^^^^^^
1038
1039This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1040attribute if the value is ``glossary``. This set of attributes specifies a
1041glossary item. All explicit attributes shall be specified. The explicit
1042attributes for this type are:
1043
1044glossary-type
1045    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1046    glossary item type.
1047
1048This type is refined by the following types:
1049
1050* :ref:`SpecTypeGlossaryGroupItemType`
1051
1052* :ref:`SpecTypeGlossaryTermItemType`
1053
1054.. _SpecTypeGlossaryGroupItemType:
1055
1056Glossary Group Item Type
1057^^^^^^^^^^^^^^^^^^^^^^^^
1058
1059This type refines the :ref:`SpecTypeGlossaryItemType` through the
1060``glossary-type`` attribute if the value is ``group``. This set of attributes
1061specifies a glossary group. All explicit attributes shall be specified. The
1062explicit attributes for this type are:
1063
1064name
1065    The attribute value shall be a string. It shall be the human readable name
1066    of the glossary group.
1067
1068text
1069    The attribute value shall be a string. It shall state the requirement for
1070    the glossary group.
1071
1072.. _SpecTypeGlossaryTermItemType:
1073
1074Glossary Term Item Type
1075^^^^^^^^^^^^^^^^^^^^^^^
1076
1077This type refines the :ref:`SpecTypeGlossaryItemType` through the
1078``glossary-type`` attribute if the value is ``term``. This set of attributes
1079specifies a glossary term. All explicit attributes shall be specified. The
1080explicit attributes for this type are:
1081
1082term
1083    The attribute value shall be a string. It shall be the glossary term.
1084
1085text
1086    The attribute value shall be a string. It shall be the definition of the
1087    glossary term.
1088
1089.. _SpecTypeInterfaceItemType:
1090
1091Interface Item Type
1092^^^^^^^^^^^^^^^^^^^
1093
1094This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1095attribute if the value is ``interface``. This set of attributes specifies an
1096interface specification item. Interface items shall specify the interface of
1097the software product to other software products and the hardware.  Use
1098:ref:`SpecTypeInterfaceDomainItemType` items to specify interface domains, for
1099example the :term:`API`, C language, compiler, interfaces to the
1100implementation, and the hardware. All explicit attributes shall be specified.
1101The explicit attributes for this type are:
1102
1103index-entries
1104    The attribute value shall be a list of strings. It shall be a list of
1105    additional document index entries.  A document index entry derived from the
1106    interface name is added automatically.
1107
1108interface-type
1109    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1110    interface item type.
1111
1112This type is refined by the following types:
1113
1114* :ref:`SpecTypeApplicationConfigurationGroupItemType`
1115
1116* :ref:`SpecTypeApplicationConfigurationOptionItemType`
1117
1118* :ref:`SpecTypeInterfaceCompoundItemType`
1119
1120* :ref:`SpecTypeInterfaceContainerItemType`
1121
1122* :ref:`SpecTypeInterfaceDefineItemType`
1123
1124* :ref:`SpecTypeInterfaceDomainItemType`
1125
1126* :ref:`SpecTypeInterfaceEnumItemType`
1127
1128* :ref:`SpecTypeInterfaceEnumeratorItemType`
1129
1130* :ref:`SpecTypeInterfaceForwardDeclarationItemType`
1131
1132* :ref:`SpecTypeInterfaceFunctionItemType`
1133
1134* :ref:`SpecTypeInterfaceGroupItemType`
1135
1136* :ref:`SpecTypeInterfaceHeaderFileItemType`
1137
1138* :ref:`SpecTypeInterfaceMacroItemType`
1139
1140* :ref:`SpecTypeInterfaceTypedefItemType`
1141
1142* :ref:`SpecTypeInterfaceUnspecifiedItemType`
1143
1144* :ref:`SpecTypeInterfaceVariableItemType`
1145
1146.. _SpecTypeApplicationConfigurationGroupItemType:
1147
1148Application Configuration Group Item Type
1149^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1150
1151This type refines the :ref:`SpecTypeInterfaceItemType` through the
1152``interface-type`` attribute if the value is ``appl-config-group``. This set of
1153attributes specifies an application configuration group. All explicit
1154attributes shall be specified. The explicit attributes for this type are:
1155
1156description
1157    The attribute value shall be a string. It shall be the description of the
1158    application configuration group.
1159
1160name
1161    The attribute value shall be a string. It shall be human readable name of
1162    the application configuration group.
1163
1164text
1165    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1166    state the requirement for the application configuration group.
1167
1168.. _SpecTypeApplicationConfigurationOptionItemType:
1169
1170Application Configuration Option Item Type
1171^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1172
1173This type refines the :ref:`SpecTypeInterfaceItemType` through the
1174``interface-type`` attribute if the value is ``appl-config-option``. This set
1175of attributes specifies an application configuration option. All explicit
1176attributes shall be specified. The explicit attributes for this type are:
1177
1178appl-config-option-type
1179    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1180    application configuration option type.
1181
1182description
1183    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`. The
1184    :ref:`SpecTypeApplicationConfigurationValueOptionItemType` items have an
1185    attribute for constraints.
1186
1187name
1188    The attribute value shall be an
1189    :ref:`SpecTypeApplicationConfigurationOptionName`.
1190
1191notes
1192    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1193
1194text
1195    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1196    state the requirement for the application configuration option.
1197
1198This type is refined by the following types:
1199
1200* :ref:`SpecTypeApplicationConfigurationFeatureEnableOptionItemType`
1201
1202* :ref:`SpecTypeApplicationConfigurationFeatureOptionItemType`
1203
1204* :ref:`SpecTypeApplicationConfigurationValueOptionItemType`
1205
1206.. _SpecTypeApplicationConfigurationFeatureEnableOptionItemType:
1207
1208Application Configuration Feature Enable Option Item Type
1209^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1210
1211This type refines the :ref:`SpecTypeApplicationConfigurationOptionItemType`
1212through the ``appl-config-option-type`` attribute if the value is
1213``feature-enable``. This set of attributes specifies an application
1214configuration feature enable option.
1215
1216.. _SpecTypeApplicationConfigurationFeatureOptionItemType:
1217
1218Application Configuration Feature Option Item Type
1219^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1220
1221This type refines the :ref:`SpecTypeApplicationConfigurationOptionItemType`
1222through the ``appl-config-option-type`` attribute if the value is ``feature``.
1223This set of attributes specifies an application configuration feature option.
1224All explicit attributes shall be specified. The explicit attributes for this
1225type are:
1226
1227default
1228    The attribute value shall be a string. It shall describe what happens if
1229    the configuration option is undefined.
1230
1231.. _SpecTypeApplicationConfigurationValueOptionItemType:
1232
1233Application Configuration Value Option Item Type
1234^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1235
1236This type refines the following types:
1237
1238* :ref:`SpecTypeApplicationConfigurationOptionItemType` through the
1239  ``appl-config-option-type`` attribute if the value is ``initializer``
1240
1241* :ref:`SpecTypeApplicationConfigurationOptionItemType` through the
1242  ``appl-config-option-type`` attribute if the value is ``integer``
1243
1244This set of attributes specifies application configuration initializer or
1245integer option. All explicit attributes shall be specified. The explicit
1246attributes for this type are:
1247
1248constraints
1249    The attribute value shall be an
1250    :ref:`SpecTypeApplicationConfigurationOptionConstraintSet`.
1251
1252default-value
1253    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. It shall
1254    describe the default value of the application configuration option.
1255
1256.. _SpecTypeInterfaceCompoundItemType:
1257
1258Interface Compound Item Type
1259^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1260
1261This type refines the following types:
1262
1263* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1264  the value is ``struct``
1265
1266* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1267  the value is ``union``
1268
1269This set of attributes specifies a compound (struct or union). All explicit
1270attributes shall be specified. The explicit attributes for this type are:
1271
1272brief
1273    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1274
1275definition
1276    The attribute value shall be a list. Each list element shall be an
1277    :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`.
1278
1279definition-kind
1280    The attribute value shall be an
1281    :ref:`SpecTypeInterfaceCompoundDefinitionKind`.
1282
1283description
1284    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1285
1286name
1287    The attribute value shall be a string. It shall be the name of the compound
1288    (struct or union).
1289
1290notes
1291    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1292
1293.. _SpecTypeInterfaceContainerItemType:
1294
1295Interface Container Item Type
1296^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1297
1298This type refines the :ref:`SpecTypeInterfaceItemType` through the
1299``interface-type`` attribute if the value is ``container``. Items of this type
1300specify an interface container.  The item shall have exactly one link with the
1301:ref:`SpecTypeInterfacePlacementLinkRole` to an
1302:ref:`SpecTypeInterfaceDomainItemType` item.  This link defines the interface
1303domain of the container.
1304
1305.. _SpecTypeInterfaceDefineItemType:
1306
1307Interface Define Item Type
1308^^^^^^^^^^^^^^^^^^^^^^^^^^
1309
1310This type refines the :ref:`SpecTypeInterfaceItemType` through the
1311``interface-type`` attribute if the value is ``define``. This set of attributes
1312specifies a define. All explicit attributes shall be specified. The explicit
1313attributes for this type are:
1314
1315brief
1316    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1317
1318definition
1319    The attribute value shall be an
1320    :ref:`SpecTypeInterfaceDefinitionDirective`.
1321
1322description
1323    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1324
1325name
1326    The attribute value shall be a string. It shall be the name of the define.
1327
1328notes
1329    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1330
1331.. _SpecTypeInterfaceDomainItemType:
1332
1333Interface Domain Item Type
1334^^^^^^^^^^^^^^^^^^^^^^^^^^
1335
1336This type refines the :ref:`SpecTypeInterfaceItemType` through the
1337``interface-type`` attribute if the value is ``domain``. This set of attributes
1338specifies an interface domain.  Items of the types
1339:ref:`SpecTypeInterfaceContainerItemType` and
1340:ref:`SpecTypeInterfaceHeaderFileItemType` are placed into domains through
1341links with the :ref:`SpecTypeInterfacePlacementLinkRole`. All explicit
1342attributes shall be specified. The explicit attributes for this type are:
1343
1344description
1345    The attribute value shall be a string. It shall be the description of the
1346    domain
1347
1348name
1349    The attribute value shall be a string. It shall be the human readable name
1350    of the domain.
1351
1352.. _SpecTypeInterfaceEnumItemType:
1353
1354Interface Enum Item Type
1355^^^^^^^^^^^^^^^^^^^^^^^^
1356
1357This type refines the :ref:`SpecTypeInterfaceItemType` through the
1358``interface-type`` attribute if the value is ``enum``. This set of attributes
1359specifies an enum. All explicit attributes shall be specified. The explicit
1360attributes for this type are:
1361
1362brief
1363    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1364
1365definition-kind
1366    The attribute value shall be an :ref:`SpecTypeInterfaceEnumDefinitionKind`.
1367
1368description
1369    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1370
1371name
1372    The attribute value shall be a string. It shall be the name of the enum.
1373
1374notes
1375    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1376
1377.. _SpecTypeInterfaceEnumeratorItemType:
1378
1379Interface Enumerator Item Type
1380^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1381
1382This type refines the :ref:`SpecTypeInterfaceItemType` through the
1383``interface-type`` attribute if the value is ``enumerator``. This set of
1384attributes specifies an enumerator. All explicit attributes shall be specified.
1385The explicit attributes for this type are:
1386
1387brief
1388    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1389
1390definition
1391    The attribute value shall be an
1392    :ref:`SpecTypeInterfaceDefinitionDirective`.
1393
1394description
1395    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1396
1397name
1398    The attribute value shall be a string. It shall be the name of the
1399    enumerator.
1400
1401notes
1402    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1403
1404.. _SpecTypeInterfaceForwardDeclarationItemType:
1405
1406Interface Forward Declaration Item Type
1407^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1408
1409This type refines the :ref:`SpecTypeInterfaceItemType` through the
1410``interface-type`` attribute if the value is ``forward-declaration``. Items of
1411this type specify a forward declaration.  The item shall have exactly one link
1412with the :ref:`SpecTypeInterfaceTargetLinkRole` to an
1413:ref:`SpecTypeInterfaceCompoundItemType` item.  This link defines the type
1414declared by the forward declaration.
1415
1416.. _SpecTypeInterfaceFunctionItemType:
1417
1418Interface Function Item Type
1419^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1420
1421This type refines the :ref:`SpecTypeInterfaceItemType` through the
1422``interface-type`` attribute if the value is ``function``. This set of
1423attributes specifies a function. All explicit attributes shall be specified.
1424The explicit attributes for this type are:
1425
1426brief
1427    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1428
1429definition
1430    The attribute value shall be an
1431    :ref:`SpecTypeInterfaceFunctionDefinitionDirective`.
1432
1433description
1434    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1435
1436name
1437    The attribute value shall be a string. It shall be the name of the
1438    function.
1439
1440notes
1441    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1442
1443params
1444    The attribute value shall be a list. Each list element shall be an
1445    :ref:`SpecTypeInterfaceParameter`.
1446
1447return
1448    The attribute value shall be an :ref:`SpecTypeInterfaceReturnDirective`.
1449
1450.. _SpecTypeInterfaceGroupItemType:
1451
1452Interface Group Item Type
1453^^^^^^^^^^^^^^^^^^^^^^^^^
1454
1455This type refines the :ref:`SpecTypeInterfaceItemType` through the
1456``interface-type`` attribute if the value is ``group``. This set of attributes
1457specifies an interface group. All explicit attributes shall be specified. The
1458explicit attributes for this type are:
1459
1460brief
1461    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1462
1463description
1464    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1465
1466identifier
1467    The attribute value shall be an :ref:`SpecTypeInterfaceGroupIdentifier`.
1468
1469name
1470    The attribute value shall be a string. It shall be the human readable name
1471    of the interface group.
1472
1473text
1474    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1475    state the requirement for the interface group.
1476
1477.. _SpecTypeInterfaceHeaderFileItemType:
1478
1479Interface Header File Item Type
1480^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1481
1482This type refines the :ref:`SpecTypeInterfaceItemType` through the
1483``interface-type`` attribute if the value is ``header-file``. This set of
1484attributes specifies a header file.  The item shall have exactly one link with
1485the :ref:`SpecTypeInterfacePlacementLinkRole` to an
1486:ref:`SpecTypeInterfaceDomainItemType` item.  This link defines the interface
1487domain of the header file. All explicit attributes shall be specified. The
1488explicit attributes for this type are:
1489
1490brief
1491    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1492
1493path
1494    The attribute value shall be a string. It shall be the path used to include
1495    the header file.  For example :file:`rtems/confdefs.h`.
1496
1497prefix
1498    The attribute value shall be a string. It shall be the prefix directory
1499    path to the header file in the interface domain.  For example
1500    :file:`cpukit/include`.
1501
1502.. _SpecTypeInterfaceMacroItemType:
1503
1504Interface Macro Item Type
1505^^^^^^^^^^^^^^^^^^^^^^^^^
1506
1507This type refines the :ref:`SpecTypeInterfaceItemType` through the
1508``interface-type`` attribute if the value is ``macro``. This set of attributes
1509specifies a macro. All explicit attributes shall be specified. The explicit
1510attributes for this type are:
1511
1512brief
1513    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1514
1515definition
1516    The attribute value shall be an
1517    :ref:`SpecTypeInterfaceDefinitionDirective`.
1518
1519description
1520    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1521
1522name
1523    The attribute value shall be a string. It shall be the name of the macro.
1524
1525notes
1526    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1527
1528params
1529    The attribute value shall be a list. Each list element shall be an
1530    :ref:`SpecTypeInterfaceParameter`.
1531
1532return
1533    The attribute value shall be an :ref:`SpecTypeInterfaceReturnDirective`.
1534
1535.. _SpecTypeInterfaceTypedefItemType:
1536
1537Interface Typedef Item Type
1538^^^^^^^^^^^^^^^^^^^^^^^^^^^
1539
1540This type refines the :ref:`SpecTypeInterfaceItemType` through the
1541``interface-type`` attribute if the value is ``typedef``. This set of
1542attributes specifies a typedef. All explicit attributes shall be specified. The
1543explicit attributes for this type are:
1544
1545brief
1546    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1547
1548definition
1549    The attribute value shall be an
1550    :ref:`SpecTypeInterfaceDefinitionDirective`.
1551
1552description
1553    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1554
1555name
1556    The attribute value shall be a string. It shall be the name of the typedef.
1557
1558notes
1559    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1560
1561.. _SpecTypeInterfaceUnspecifiedItemType:
1562
1563Interface Unspecified Item Type
1564^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1565
1566This type refines the following types:
1567
1568* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1569  the value is ``unspecified``
1570
1571* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1572  the value is ``unspecified-define``
1573
1574* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1575  the value is ``unspecified-function``
1576
1577* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1578  the value is ``unspecified-type``
1579
1580This set of attributes specifies an unspecified interface. All explicit
1581attributes shall be specified. The explicit attributes for this type are:
1582
1583name
1584    The attribute value shall be a string. It shall be the name of the
1585    unspecified interface.
1586
1587reference
1588    The attribute value shall be an optional string. If the value is present,
1589    then it shall be an URL to the standard or specification of the interface.
1590
1591.. _SpecTypeInterfaceVariableItemType:
1592
1593Interface Variable Item Type
1594^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1595
1596This type refines the :ref:`SpecTypeInterfaceItemType` through the
1597``interface-type`` attribute if the value is ``variable``. This set of
1598attributes specifies a variable. All explicit attributes shall be specified.
1599The explicit attributes for this type are:
1600
1601brief
1602    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1603
1604definition
1605    The attribute value shall be an
1606    :ref:`SpecTypeInterfaceDefinitionDirective`.
1607
1608description
1609    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1610
1611name
1612    The attribute value shall be a string. It shall be the name of the
1613    variable.
1614
1615notes
1616    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1617
1618.. _SpecTypeRequirementItemType:
1619
1620Requirement Item Type
1621^^^^^^^^^^^^^^^^^^^^^
1622
1623This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1624attribute if the value is ``requirement``. This set of attributes specifies a
1625requirement. All explicit attributes shall be specified. The explicit
1626attributes for this type are:
1627
1628rationale
1629    The attribute value shall be an optional string. If the value is present,
1630    then it shall state the rationale or justification of the requirement.
1631
1632references
1633    The attribute value shall be a list. Each list element shall be a
1634    :ref:`SpecTypeRequirementReference`.
1635
1636requirement-type
1637    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1638    requirement item type.
1639
1640text
1641    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1642    state the requirement.
1643
1644This type is refined by the following types:
1645
1646* :ref:`SpecTypeFunctionalRequirementItemType`
1647
1648* :ref:`SpecTypeNonFunctionalRequirementItemType`
1649
1650Please have a look at the following example:
1651
1652.. code-block:: yaml
1653
1654    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
1655    copyrights:
1656    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de
1657    enabled-by: true
1658    functional-type: capability
1659    links: []
1660    rationale: |
1661      It keeps you busy.
1662    requirement-type: functional
1663    text: |
1664      The system shall do crazy things.
1665    type: requirement
1666
1667.. _SpecTypeFunctionalRequirementItemType:
1668
1669Functional Requirement Item Type
1670^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1671
1672This type refines the :ref:`SpecTypeRequirementItemType` through the
1673``requirement-type`` attribute if the value is ``functional``. This set of
1674attributes specifies a functional requirement. All explicit attributes shall be
1675specified. The explicit attributes for this type are:
1676
1677functional-type
1678    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1679    functional type of the requirement.
1680
1681This type is refined by the following types:
1682
1683* :ref:`SpecTypeActionRequirementItemType`
1684
1685* :ref:`SpecTypeGenericFunctionalRequirementItemType`
1686
1687.. _SpecTypeActionRequirementItemType:
1688
1689Action Requirement Item Type
1690^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1691
1692This type refines the :ref:`SpecTypeFunctionalRequirementItemType` through the
1693``functional-type`` attribute if the value is ``action``. This set of
1694attributes specifies functional requirements and corresponding validation test
1695code.  The functional requirements of an action are specified.  An action
1696performs a step in a finite state machine.  An action is implemented through a
1697function or a macro.  The action is performed through a call of the function or
1698an execution of the code of a macro expansion by an actor.  The actor is for
1699example a task or an interrupt service routine.
1700
1701For action requirements which specify the function of an interface, there shall
1702be exactly one link with the :ref:`SpecTypeInterfaceFunctionLinkRole` to the
1703interface of the action.
1704
1705The action requirements are specified by
1706
1707* a list of pre-conditions, each with a set of states,
1708
1709* a list of post-conditions, each with a set of states,
1710
1711* the transition of pre-condition states to post-condition states through the
1712  action.
1713
1714Along with the requirements, the test code to generate a validation test is
1715specified.  For an action requirement it is verified that all variations of
1716pre-condition states have a set of post-condition states specified in the
1717transition map.  All transitions are covered by the generated test code. All
1718explicit attributes shall be specified. The explicit attributes for this type
1719are:
1720
1721post-conditions
1722    The attribute value shall be a list. Each list element shall be an
1723    :ref:`SpecTypeActionRequirementCondition`.
1724
1725pre-conditions
1726    The attribute value shall be a list. Each list element shall be an
1727    :ref:`SpecTypeActionRequirementCondition`.
1728
1729skip-reasons
1730    The attribute value shall be an
1731    :ref:`SpecTypeActionRequirementSkipReasons`.
1732
1733test-action
1734    The attribute value shall be a string. It shall be the test action code.
1735
1736test-brief
1737    The attribute value shall be an optional string. If the value is present,
1738    then it shall be the test case brief description.
1739
1740test-cleanup
1741    The attribute value shall be an optional string. If the value is present,
1742    then it shall be the test cleanup code.  The code is placed in the test
1743    action loop body after the test post-condition checks.
1744
1745test-context
1746    The attribute value shall be a list. Each list element shall be a
1747    :ref:`SpecTypeTestContextMember`.
1748
1749test-context-support
1750    The attribute value shall be an optional string. If the value is present,
1751    then it shall be the test context support code.  The context support code
1752    is placed at file scope before the test context definition.
1753
1754test-description
1755    The attribute value shall be an optional string. If the value is present,
1756    then it shall be the test case description.
1757
1758test-header
1759    The attribute value shall be a :ref:`SpecTypeTestHeader`.
1760
1761test-includes
1762    The attribute value shall be a list of strings. It shall be a list of
1763    header files included via ``#include <...>``.
1764
1765test-local-includes
1766    The attribute value shall be a list of strings. It shall be a list of
1767    header files included via ``#include "..."``.
1768
1769test-prepare
1770    The attribute value shall be an optional string. If the value is present,
1771    then it shall be the early test preparation code.  The code is placed in
1772    the test action loop body before the test pre-condition preparations.
1773
1774test-setup
1775    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
1776
1777test-stop
1778    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
1779
1780test-support
1781    The attribute value shall be an optional string. If the value is present,
1782    then it shall be the test case support code. The support code is placed at
1783    file scope before the test case code.
1784
1785test-target
1786    The attribute value shall be a string. It shall be the path to the
1787    generated test case source file.
1788
1789test-teardown
1790    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
1791
1792transition-map
1793    The attribute value shall be a list. Each list element shall be an
1794    :ref:`SpecTypeActionRequirementTransition`.
1795
1796Please have a look at the following example:
1797
1798.. code-block:: yaml
1799
1800    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
1801    copyrights:
1802    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
1803    enabled-by: true
1804    functional-type: action
1805    links: []
1806    post-conditions:
1807    - name: Status
1808      states:
1809      - name: Success
1810        test-code: |
1811          /* Check that the status is SUCCESS */
1812        text: |
1813          The status shall be SUCCESS.
1814      - name: Error
1815        test-code: |
1816          /* Check that the status is ERROR */
1817        text: |
1818          The status shall be ERROR.
1819      test-epilogue: null
1820      test-prologue: null
1821    - name: Data
1822      states:
1823      - name: Unchanged
1824        test-code: |
1825          /* Check that the data is unchanged */
1826        text: |
1827          The data shall be unchanged by the action.
1828      - name: Red
1829        test-code: |
1830          /* Check that the data is red */
1831        text: |
1832          The data shall be red.
1833      - name: Green
1834        test-code: |
1835          /* Check that the data is green */
1836        text: |
1837          The data shall be green.
1838      test-epilogue: null
1839      test-prologue: null
1840    pre-conditions:
1841    - name: Data
1842      states:
1843      - name: NullPtr
1844        test-code: |
1845          /* Set data pointer to NULL */
1846        text: |
1847          The data pointer shall be NULL.
1848      - name: Valid
1849        test-code: |
1850          /* Set data pointer to reference a valid data buffer */
1851        text: |
1852          The data pointer shall reference a valid data buffer.
1853      test-epilogue: null
1854      test-prologue: null
1855    - name: Option
1856      states:
1857      - name: Red
1858        test-code: |
1859          /* Set option to RED */
1860        text: |
1861          The option shall be RED.
1862      - name: Green
1863        test-code: |
1864          /* Set option to GREEN */
1865        text: |
1866          The option shall be GREEN.
1867      test-epilogue: null
1868      test-prologue: null
1869    requirement-type: functional
1870    skip-reasons: {}
1871    test-action: |
1872      /* Call the function of the action */
1873    test-brief: null
1874    test-cleanup: null
1875    test-context:
1876    - brief: null
1877      description: null
1878      member: void *data
1879    - brief: null
1880      description: null
1881      member: option_type option
1882    test-context-support: null
1883    test-description: null
1884    test-header: null
1885    test-includes: []
1886    test-local-includes: []
1887    test-prepare: null
1888    test-setup: null
1889    test-stop: null
1890    test-support: null
1891    test-target: tc-red-green-data.c
1892    test-teardown: null
1893    transition-map:
1894    - enabled-by: true
1895      post-conditions:
1896        Status: Error
1897        Data: Unchanged
1898      pre-conditions:
1899        Data: NullPtr
1900        Option: all
1901    - enabled-by: true
1902      post-conditions:
1903        Status: Success
1904        Data: Red
1905      pre-conditions:
1906        Data: Valid
1907        Option: Red
1908    - enabled-by: true
1909      post-conditions:
1910        Status: Success
1911        Data: Green
1912      pre-conditions:
1913        Data: Valid
1914        Option: Green
1915    rationale: null
1916    references: []
1917    text: |
1918      ${.:/text-template}
1919    type: requirement
1920
1921.. _SpecTypeGenericFunctionalRequirementItemType:
1922
1923Generic Functional Requirement Item Type
1924^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1925
1926This type refines the following types:
1927
1928* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
1929  attribute if the value is ``capability``
1930
1931* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
1932  attribute if the value is ``dependability-function``
1933
1934* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
1935  attribute if the value is ``function``
1936
1937* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
1938  attribute if the value is ``operational``
1939
1940* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
1941  attribute if the value is ``safety-function``
1942
1943Items of this type state a functional requirement with the functional type
1944defined by the specification type refinement.
1945
1946.. _SpecTypeNonFunctionalRequirementItemType:
1947
1948Non-Functional Requirement Item Type
1949^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1950
1951This type refines the :ref:`SpecTypeRequirementItemType` through the
1952``requirement-type`` attribute if the value is ``non-functional``. This set of
1953attributes specifies a non-functional requirement. All explicit attributes
1954shall be specified. The explicit attributes for this type are:
1955
1956non-functional-type
1957    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1958    non-functional type of the requirement.
1959
1960This type is refined by the following types:
1961
1962* :ref:`SpecTypeDesignGroupRequirementItemType`
1963
1964* :ref:`SpecTypeGenericNonFunctionalRequirementItemType`
1965
1966* :ref:`SpecTypeRuntimePerformanceRequirementItemType`
1967
1968.. _SpecTypeDesignGroupRequirementItemType:
1969
1970Design Group Requirement Item Type
1971^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1972
1973This type refines the :ref:`SpecTypeNonFunctionalRequirementItemType` through
1974the ``non-functional-type`` attribute if the value is ``design-group``. This
1975set of attributes specifies a design group requirement.  Design group
1976requirements have an explicit reference to the associated Doxygen group
1977specified by the ``identifier`` attribute.  Design group requirements have an
1978implicit validation by inspection method.  The qualification toolchain shall
1979perform the inspection and check that the specified Doxygen group exists in the
1980software source code. All explicit attributes shall be specified. The explicit
1981attributes for this type are:
1982
1983identifier
1984    The attribute value shall be an :ref:`SpecTypeInterfaceGroupIdentifier`.
1985
1986.. _SpecTypeGenericNonFunctionalRequirementItemType:
1987
1988Generic Non-Functional Requirement Item Type
1989^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1990
1991This type refines the following types:
1992
1993* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
1994  ``non-functional-type`` attribute if the value is ``build-configuration``
1995
1996* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
1997  ``non-functional-type`` attribute if the value is ``constraint``
1998
1999* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2000  ``non-functional-type`` attribute if the value is ``design``
2001
2002* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2003  ``non-functional-type`` attribute if the value is ``documentation``
2004
2005* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2006  ``non-functional-type`` attribute if the value is ``interface``
2007
2008* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2009  ``non-functional-type`` attribute if the value is ``interface-requirement``
2010
2011* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2012  ``non-functional-type`` attribute if the value is ``maintainability``
2013
2014* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2015  ``non-functional-type`` attribute if the value is ``performance``
2016
2017* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2018  ``non-functional-type`` attribute if the value is ``portability``
2019
2020* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2021  ``non-functional-type`` attribute if the value is ``quality``
2022
2023* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2024  ``non-functional-type`` attribute if the value is ``reliability``
2025
2026* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2027  ``non-functional-type`` attribute if the value is ``resource``
2028
2029* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2030  ``non-functional-type`` attribute if the value is ``safety``
2031
2032Items of this type state a non-functional requirement with the non-functional
2033type defined by the specification type refinement.
2034
2035.. _SpecTypeRuntimePerformanceRequirementItemType:
2036
2037Runtime Performance Requirement Item Type
2038^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2039
2040This type refines the :ref:`SpecTypeNonFunctionalRequirementItemType` through
2041the ``non-functional-type`` attribute if the value is ``performance-runtime``.
2042The item shall have exactly one link with the
2043:ref:`SpecTypeRuntimeMeasurementRequestLinkRole`.  A requirement text processor
2044shall support a substitution of ${.:/limit-kind}:
2045
2046* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``min-lower-bound`` or
2047  ``min-upper-bound``, the substitution of ${.:/limit-kind} shall be
2048  ``"minimum"``.
2049
2050* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``mean-lower-bound`` or
2051  ``mean-upper-bound``, the substitution of ${.:/limit-kind} shall be
2052  ``"mean"``.
2053
2054* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``max-lower-bound`` or
2055  ``max-upper-bound``, the substitution of ${.:/limit-kind} shall be
2056  ``"maximum"``.
2057
2058A requirement text processor shall support a substitution of
2059${.:/limit-condition}:
2060
2061* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``min-lower-bound``,
2062  ``mean-lower-bound``, or ``max-lower-bound``, the substitution of
2063  ${.:/limit-condition} shall be ``"greater than or equal to <value>"`` with
2064  <value> being the value of the corresponding entry in the
2065  :ref:`SpecTypeRuntimeMeasurementValueTable`.
2066
2067* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``min-upper-bound``,
2068  ``mean-upper-bound``, or ``max-upper-bound``, the substitution of
2069  ${.:/limit-condition} shall be ``"less than or equal to <value>"`` with
2070  <value> being the value of the corresponding entry in the
2071  :ref:`SpecTypeRuntimeMeasurementValueTable`.
2072
2073A requirement text processor shall support a substitution of ${.:/environment}.
2074The value of the substitution shall be ``"<environment> environment"`` with
2075<environment> being the environment of the corresponding entry in the
2076:ref:`SpecTypeRuntimeMeasurementEnvironmentTable`.
2077
2078This set of attributes specifies a runtime performance requirement. Along with
2079the requirement, the validation test code to execute a measure runtime request
2080is specified. All explicit attributes shall be specified. The explicit
2081attributes for this type are:
2082
2083limits
2084    The attribute value shall be a :ref:`SpecTypeRuntimePerformanceLimitTable`.
2085
2086params
2087    The attribute value shall be a
2088    :ref:`SpecTypeRuntimePerformanceParameterSet`.
2089
2090test-body
2091    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It shall
2092    provide the code of the measure runtime body handler.  In contrast to other
2093    methods, this method is mandatory.
2094
2095test-cleanup
2096    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2097    provide the code to clean up the measure runtime request. This method is
2098    called before the cleanup method of the corresponding
2099    :ref:`SpecTypeRuntimeMeasurementTestItemType` item and after the request.
2100
2101test-prepare
2102    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2103    provide the code to prepare the measure runtime request.  This method is
2104    called after the prepare method of the corresponding
2105    :ref:`SpecTypeRuntimeMeasurementTestItemType` item and before the request.
2106
2107test-setup
2108    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2109    provide the code of the measure runtime setup handler.
2110
2111test-teardown
2112    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2113    provide the code of the measure runtime teardown handler.
2114
2115Please have a look at the following example:
2116
2117.. code-block:: yaml
2118
2119    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
2120    copyrights:
2121    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
2122    enabled-by: true
2123    links:
2124    - role: runtime-measurement-request
2125      uid: ../val/performance
2126    limits:
2127      sparc/leon3:
2128        DirtyCache:
2129          max-upper-bound: 0.000005
2130          mean-upper-bound: 0.000005
2131        FullCache:
2132          max-upper-bound: 0.000005
2133          mean-upper-bound: 0.000005
2134        HotCache:
2135          max-upper-bound: 0.000005
2136          mean-upper-bound: 0.000005
2137        Load/1:
2138          max-upper-bound: 0.00001
2139          mean-upper-bound: 0.00001
2140        Load/2:
2141          max-upper-bound: 0.00001
2142          mean-upper-bound: 0.00001
2143        Load/3:
2144          max-upper-bound: 0.00001
2145          mean-upper-bound: 0.00001
2146        Load/4:
2147          max-upper-bound: 0.00001
2148          mean-upper-bound: 0.00001
2149    params: {}
2150    rationale: null
2151    references: []
2152    test-body:
2153      brief: |
2154        Get a buffer.
2155      code: |
2156        ctx->status = rtems_partition_get_buffer( ctx->part_many, &ctx->buffer );
2157      description: null
2158    test-cleanup: null
2159    test-prepare: null
2160    test-setup: null
2161    test-teardown:
2162      brief: |
2163        Return the buffer.
2164      code: |
2165        rtems_status_code sc;
2166
2167        T_quiet_rsc_success( ctx->status );
2168
2169        sc = rtems_partition_return_buffer( ctx->part_many, ctx->buffer );
2170        T_quiet_rsc_success( sc );
2171
2172        return tic == toc;
2173      description: null
2174    text: |
2175      When a partition has exactly ${../val/performance:/params/buffer-count} free
2176      buffers, the ${.:limit-kind} runtime of exactly
2177      ${../val/performance:/params/sample-count} successful calls to
2178      ${../if/get-buffer:/name} in the ${.:/environment} shall be
2179      ${.:limit-condition}.
2180    non-functional-type: performance-runtime
2181    requirement-type: non-functional
2182    type: requirement
2183
2184.. _SpecTypeRequirementValidationItemType:
2185
2186Requirement Validation Item Type
2187^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2188
2189This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2190attribute if the value is ``validation``. This set of attributes provides a
2191requirement validation evidence.  The item shall have exactly one link to the
2192validated requirement with the :ref:`SpecTypeRequirementValidationLinkRole`.
2193All explicit attributes shall be specified. The explicit attributes for this
2194type are:
2195
2196method
2197    The attribute value shall be a :ref:`SpecTypeRequirementValidationMethod`.
2198    Validation by test is done through :ref:`SpecTypeTestCaseItemType` items.
2199
2200text
2201    The attribute value shall be a string. It shall provide the validation
2202    evidence depending on the validation method:
2203
2204    * *By analysis*: A statement shall be provided how the requirement is met,
2205      by analysing static properties of the :term:`software product`.
2206
2207    * *By inspection*: A statement shall be provided how the requirement is
2208      met, by inspection of the :term:`source code`.
2209
2210    * *By review of design*: A rationale shall be provided to demonstrate how
2211      the requirement is satisfied implicitly by the software design.
2212
2213.. _SpecTypeRuntimeMeasurementTestItemType:
2214
2215Runtime Measurement Test Item Type
2216^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2217
2218This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2219attribute if the value is ``runtime-measurement-test``. This set of attributes
2220specifies a runtime measurement test case. All explicit attributes shall be
2221specified. The explicit attributes for this type are:
2222
2223params
2224    The attribute value shall be a
2225    :ref:`SpecTypeRuntimeMeasurementParameterSet`.
2226
2227test-brief
2228    The attribute value shall be an optional string. If the value is present,
2229    then it shall be the test case brief description.
2230
2231test-cleanup
2232    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2233    value is present, then it shall be the measure runtime request cleanup
2234    method.  The method is called after each measure runtime request.
2235
2236test-context
2237    The attribute value shall be a list. Each list element shall be a
2238    :ref:`SpecTypeTestContextMember`.
2239
2240test-context-support
2241    The attribute value shall be an optional string. If the value is present,
2242    then it shall be the test context support code.  The context support code
2243    is placed at file scope before the test context definition.
2244
2245test-description
2246    The attribute value shall be an optional string. If the value is present,
2247    then it shall be the test case description.
2248
2249test-includes
2250    The attribute value shall be a list of strings. It shall be a list of
2251    header files included via ``#include <...>``.
2252
2253test-local-includes
2254    The attribute value shall be a list of strings. It shall be a list of
2255    header files included via ``#include "..."``.
2256
2257test-prepare
2258    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2259    value is present, then it shall be the measure runtime request prepare
2260    method.  The method is called before each measure runtime request.
2261
2262test-setup
2263    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2264    value is present, then it shall be the test case setup fixture method.
2265
2266test-stop
2267    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2268    value is present, then it shall be the test case stop fixture method.
2269
2270test-support
2271    The attribute value shall be an optional string. If the value is present,
2272    then it shall be the test case support code. The support code is placed at
2273    file scope before the test case code.
2274
2275test-target
2276    The attribute value shall be a string. It shall be the path to the
2277    generated test case source file.
2278
2279test-teardown
2280    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2281    value is present, then it shall be the test case teardown fixture method.
2282
2283.. _SpecTypeSpecificationItemType:
2284
2285Specification Item Type
2286^^^^^^^^^^^^^^^^^^^^^^^
2287
2288This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2289attribute if the value is ``spec``. This set of attributes specifies
2290specification types. All explicit attributes shall be specified. The explicit
2291attributes for this type are:
2292
2293spec-description
2294    The attribute value shall be an optional string. It shall be the
2295    description of the specification type.
2296
2297spec-example
2298    The attribute value shall be an optional string. If the value is present,
2299    then it shall be an example of the specification type.
2300
2301spec-info
2302    The attribute value shall be a :ref:`SpecTypeSpecificationInformation`.
2303
2304spec-name
2305    The attribute value shall be an optional string. It shall be the human
2306    readable name of the specification type.
2307
2308spec-type
2309    The attribute value shall be a :ref:`SpecTypeName`. It shall the
2310    specification type.
2311
2312Please have a look at the following example:
2313
2314.. code-block:: yaml
2315
2316    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
2317    copyrights:
2318    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
2319    enabled-by: true
2320    links:
2321    - role: spec-member
2322      uid: root
2323    - role: spec-refinement
2324      spec-key: type
2325      spec-value: example
2326      uid: root
2327    spec-description: null
2328    spec-example: null
2329    spec-info:
2330      dict:
2331        attributes:
2332          an-example-attribute:
2333            description: |
2334              It shall be an example.
2335            spec-type: optional-str
2336          example-number:
2337            description: |
2338              It shall be the example number.
2339            spec-type: int
2340        description: |
2341          This set of attributes specifies an example.
2342        mandatory-attributes: all
2343    spec-name: Example Item Type
2344    spec-type: spec
2345    type: spec
2346
2347.. _SpecTypeTestCaseItemType:
2348
2349Test Case Item Type
2350^^^^^^^^^^^^^^^^^^^
2351
2352This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2353attribute if the value is ``test-case``. This set of attributes specifies a
2354test case. All explicit attributes shall be specified. The explicit attributes
2355for this type are:
2356
2357test-actions
2358    The attribute value shall be a list. Each list element shall be a
2359    :ref:`SpecTypeTestCaseAction`.
2360
2361test-brief
2362    The attribute value shall be a string. It shall be the test case brief
2363    description.
2364
2365test-context
2366    The attribute value shall be a list. Each list element shall be a
2367    :ref:`SpecTypeTestContextMember`.
2368
2369test-context-support
2370    The attribute value shall be an optional string. If the value is present,
2371    then it shall be the test context support code.  The context support code
2372    is placed at file scope before the test context definition.
2373
2374test-description
2375    The attribute value shall be an optional string. It shall be the test case
2376    description.
2377
2378test-header
2379    The attribute value shall be a :ref:`SpecTypeTestHeader`.
2380
2381test-includes
2382    The attribute value shall be a list of strings. It shall be a list of
2383    header files included via ``#include <...>``.
2384
2385test-local-includes
2386    The attribute value shall be a list of strings. It shall be a list of
2387    header files included via ``#include "..."``.
2388
2389test-setup
2390    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
2391
2392test-stop
2393    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
2394
2395test-support
2396    The attribute value shall be an optional string. If the value is present,
2397    then it shall be the test case support code. The support code is placed at
2398    file scope before the test case code.
2399
2400test-target
2401    The attribute value shall be a string. It shall be the path to the
2402    generated target test case source file.
2403
2404test-teardown
2405    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
2406
2407.. _SpecTypeTestPlatformItemType:
2408
2409Test Platform Item Type
2410^^^^^^^^^^^^^^^^^^^^^^^
2411
2412This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2413attribute if the value is ``test-platform``. Please note:
2414
2415.. warning::
2416
2417     This item type is work in progress.
2418
2419This set of attributes specifies a test platform. All explicit attributes shall
2420be specified. The explicit attributes for this type are:
2421
2422description
2423    The attribute value shall be a string. It shall be the description of the
2424    test platform.
2425
2426name
2427    The attribute value shall be a string. It shall be the human readable name
2428    of the test platform.
2429
2430.. _SpecTypeTestProcedureItemType:
2431
2432Test Procedure Item Type
2433^^^^^^^^^^^^^^^^^^^^^^^^
2434
2435This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2436attribute if the value is ``test-procedure``. Please note:
2437
2438.. warning::
2439
2440     This item type is work in progress.
2441
2442This set of attributes specifies a test procedure. All explicit attributes
2443shall be specified. The explicit attributes for this type are:
2444
2445name
2446    The attribute value shall be a string. It shall be the human readable name
2447    of the test procedure.
2448
2449purpose
2450    The attribute value shall be a string. It shall state the purpose of the
2451    test procedure.
2452
2453steps
2454    The attribute value shall be a string. It shall describe the steps of the
2455    test procedure execution.
2456
2457.. _SpecTypeTestSuiteItemType:
2458
2459Test Suite Item Type
2460^^^^^^^^^^^^^^^^^^^^
2461
2462This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2463attribute if the value is ``test-suite``. This set of attributes specifies a
2464test suite. All explicit attributes shall be specified. The explicit attributes
2465for this type are:
2466
2467test-brief
2468    The attribute value shall be a string. It shall be the test suite brief
2469    description.
2470
2471test-code
2472    The attribute value shall be a string. It shall be the test suite code.
2473    The test suite code is placed at file scope in the target source file.
2474
2475test-description
2476    The attribute value shall be an optional string. It shall be the test suite
2477    description.
2478
2479test-includes
2480    The attribute value shall be a list of strings. It shall be a list of
2481    header files included via ``#include <...>``.
2482
2483test-local-includes
2484    The attribute value shall be a list of strings. It shall be a list of
2485    header files included via ``#include "..."``.
2486
2487test-target
2488    The attribute value shall be a string. It shall be the path to the
2489    generated target test suite source file.
2490
2491.. _ReqEngSpecificationAttributeSetsAndValueTypes:
2492
2493Specification Attribute Sets and Value Types
2494--------------------------------------------
2495
2496.. _SpecTypeActionRequirementCondition:
2497
2498Action Requirement Condition
2499^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2500
2501This set of attributes defines an action pre-condition or post-condition. All
2502explicit attributes shall be specified. The explicit attributes for this type
2503are:
2504
2505name
2506    The attribute value shall be an :ref:`SpecTypeActionRequirementName`.
2507
2508states
2509    The attribute value shall be a list. Each list element shall be an
2510    :ref:`SpecTypeActionRequirementState`.
2511
2512test-epilogue
2513    The attribute value shall be an optional string. If the value is present,
2514    then it shall be the test epilogue code. The epilogue code is placed in the
2515    test condition preparation or check before the state-specific code.  The
2516    code may use a local variable ``ctx`` which points to the test context, see
2517    :ref:`SpecTypeTestContextMember`.
2518
2519test-prologue
2520    The attribute value shall be an optional string. If the value is present,
2521    then it shall be the test prologue code. The prologue code is placed in the
2522    test condition preparation or check after the state-specific code.  The
2523    code may use a local variable ``ctx`` which points to the test context, see
2524    :ref:`SpecTypeTestContextMember`.
2525
2526This type is used by the following types:
2527
2528* :ref:`SpecTypeActionRequirementItemType`
2529
2530.. _SpecTypeActionRequirementName:
2531
2532Action Requirement Name
2533^^^^^^^^^^^^^^^^^^^^^^^
2534
2535The value shall be a string. It shall be the name of a condition or a state of
2536a condition used to define pre-conditions and post-conditions of an action
2537requirement.  It shall be formatted in CamelCase.  It should be brief and
2538abbreviated. The rationale for this is that the names are used in tables and
2539the horizontal space is limited by the page width.  The more conditions you
2540have in an action requirement, the shorter the names should be.  The name
2541``NA`` is reserved and indicates that a condition is not applicable. The value
2542
2543* shall match with the regular expression "``^[A-Z][a-zA-Z0-9]+$``",
2544
2545* and, shall be not equal to "``NA``".
2546
2547This type is used by the following types:
2548
2549* :ref:`SpecTypeActionRequirementCondition`
2550
2551* :ref:`SpecTypeActionRequirementSkipReasons`
2552
2553* :ref:`SpecTypeActionRequirementState`
2554
2555* :ref:`SpecTypeActionRequirementTransitionPostConditions`
2556
2557* :ref:`SpecTypeActionRequirementTransitionPreConditions`
2558
2559.. _SpecTypeActionRequirementSkipReasons:
2560
2561Action Requirement Skip Reasons
2562^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2563
2564This set of attributes specifies skip reasons used to justify why transitions
2565in the transition map are skipped. Generic attributes may be specified. Each
2566generic attribute key shall be an :ref:`SpecTypeActionRequirementName`. Each
2567generic attribute value shall be a string. The key defines the name of a skip
2568reason.  The name can be used in
2569:ref:`SpecTypeActionRequirementTransitionPostConditions` to skip the
2570corresponding transitions.  The value shall give a reason why the transitions
2571are skipped.
2572
2573This type is used by the following types:
2574
2575* :ref:`SpecTypeActionRequirementItemType`
2576
2577.. _SpecTypeActionRequirementState:
2578
2579Action Requirement State
2580^^^^^^^^^^^^^^^^^^^^^^^^
2581
2582This set of attributes defines an action pre-condition or post-condition state.
2583All explicit attributes shall be specified. The explicit attributes for this
2584type are:
2585
2586name
2587    The attribute value shall be an :ref:`SpecTypeActionRequirementName`.
2588
2589test-code
2590    The attribute value shall be a string. It shall be the test code to prepare
2591    or check the state of the condition.  The code may use a local variable
2592    ``ctx`` which points to the test context, see
2593    :ref:`SpecTypeTestContextMember`.
2594
2595text
2596    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
2597    define the state of the condition.
2598
2599This type is used by the following types:
2600
2601* :ref:`SpecTypeActionRequirementCondition`
2602
2603.. _SpecTypeActionRequirementTransition:
2604
2605Action Requirement Transition
2606^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2607
2608This set of attributes defines the transition from multiple sets of states of
2609pre-conditions to a set of states of post-conditions through an action in an
2610action requirement.  The ability to specify multiple sets of states of
2611pre-conditions which result in a common set of post-conditions may allow a more
2612compact specification of the transition map.  For example, let us suppose you
2613want to specify the action of a function with a pointer parameter.  The
2614function performs an early check that the pointer is NULL and in this case
2615returns an error code.  The pointer condition dominates the action outcome if
2616the pointer is NULL.  Other pre-condition states can be simply set to ``all``
2617for this transition. All explicit attributes shall be specified. The explicit
2618attributes for this type are:
2619
2620enabled-by
2621    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. The
2622    transition map may be customized to support configuration variants through
2623    this attribute.  The default transitions (``enabled-by: true``) shall be
2624    specified before the customized variants in the list.
2625
2626post-conditions
2627    The attribute value shall be an
2628    :ref:`SpecTypeActionRequirementTransitionPostConditions`.
2629
2630pre-conditions
2631    The attribute value shall be an
2632    :ref:`SpecTypeActionRequirementTransitionPreConditions`.
2633
2634This type is used by the following types:
2635
2636* :ref:`SpecTypeActionRequirementItemType`
2637
2638.. _SpecTypeActionRequirementTransitionPostConditions:
2639
2640Action Requirement Transition Post-Conditions
2641^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2642
2643A value of this type shall be of one of the following variants:
2644
2645* The value may be a set of attributes. This set of attributes defines for each
2646  post-condition the state after the action for a transition in an action
2647  requirement. Generic attributes may be specified. Each generic attribute key
2648  shall be an :ref:`SpecTypeActionRequirementName`. Each generic attribute
2649  value shall be an :ref:`SpecTypeActionRequirementName`. There shall be
2650  exactly one generic attribute key for each post-condition.  The key name
2651  shall be the post-condition name.  The value of each generic attribute shall
2652  be the state of the post-condition.
2653
2654* The value may be a string. It shall be the name of a skip reason.  If a skip
2655  reason is given instead of a listing of post-condition states, then this
2656  transition is skipped and no test code runs for this transition. The value
2657
2658  * shall match with the regular expression "``^[A-Z][a-zA-Z0-9]+$``",
2659
2660  * and, shall be not equal to "``NA``".
2661
2662This type is used by the following types:
2663
2664* :ref:`SpecTypeActionRequirementTransition`
2665
2666.. _SpecTypeActionRequirementTransitionPreConditionStateSet:
2667
2668Action Requirement Transition Pre-Condition State Set
2669^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2670
2671A value of this type shall be of one of the following variants:
2672
2673* The value may be a list. Each list element shall be an
2674  :ref:`SpecTypeActionRequirementName`. The list defines the set of states of
2675  the pre-condition in the transition.
2676
2677* The value may be a string. The value ``all`` represents all states of the
2678  pre-condition in this transition.  The value ``N/A`` marks the pre-condition
2679  as not applicable in this transition. The value shall be an element of
2680
2681  * "``all``", and
2682
2683  * "``N/A``".
2684
2685This type is used by the following types:
2686
2687* :ref:`SpecTypeActionRequirementTransitionPreConditions`
2688
2689.. _SpecTypeActionRequirementTransitionPreConditions:
2690
2691Action Requirement Transition Pre-Conditions
2692^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2693
2694This set of attributes defines for each pre-condition the set of states before
2695the action for a transition in an actin requirement. Generic attributes may be
2696specified. Each generic attribute key shall be an
2697:ref:`SpecTypeActionRequirementName`. Each generic attribute value shall be an
2698:ref:`SpecTypeActionRequirementTransitionPreConditionStateSet`. There shall be
2699exactly one generic attribute key for each pre-condition.  The key name shall
2700be the pre-condition name.  The value of each generic attribute shall be a set
2701of states of the pre-condition.
2702
2703This type is used by the following types:
2704
2705* :ref:`SpecTypeActionRequirementTransition`
2706
2707.. _SpecTypeApplicationConfigurationGroupMemberLinkRole:
2708
2709Application Configuration Group Member Link Role
2710^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2711
2712This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
2713value is ``appl-config-group-member``. It defines the application configuration
2714group membership role of links.
2715
2716.. _SpecTypeApplicationConfigurationOptionConstraintSet:
2717
2718Application Configuration Option Constraint Set
2719^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2720
2721This set of attributes defines application configuration option constraints.
2722Additional constraints can be added through the links of the item using the
2723:ref:`SpecTypeConstraintLinkRole`. None of the explicit attributes is
2724mandatory, they are all optional. The explicit attributes for this type are:
2725
2726max
2727    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. It shall be
2728    the maximum value of the application configuration option.
2729
2730min
2731    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. It shall be
2732    the minimum value of the application configuration option.
2733
2734set
2735    The attribute value shall be a list. Each list element shall be an
2736    :ref:`SpecTypeIntegerOrString`. It shall be the set of valid values for the
2737    application configuration option.
2738
2739texts
2740    The attribute value shall be a list. Each list element shall be a
2741    :ref:`SpecTypeRequirementText`. It shall be a list of constraints specific
2742    to this application configuration option.  For general constraints, use a
2743    link with the :ref:`SpecTypeConstraintLinkRole` to a constraint item.
2744
2745This type is used by the following types:
2746
2747* :ref:`SpecTypeApplicationConfigurationValueOptionItemType`
2748
2749.. _SpecTypeApplicationConfigurationOptionName:
2750
2751Application Configuration Option Name
2752^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2753
2754The value shall be a string. It shall be the name of an application
2755configuration option. The value shall match with the regular expression
2756"``^(CONFIGURE_|BSP_)[A-Z0-9_]+$``".
2757
2758This type is used by the following types:
2759
2760* :ref:`SpecTypeApplicationConfigurationOptionItemType`
2761
2762.. _SpecTypeBooleanOrIntegerOrString:
2763
2764Boolean or Integer or String
2765^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2766
2767A value of this type shall be of one of the following variants:
2768
2769* The value may be a boolean.
2770
2771* The value may be an integer number.
2772
2773* The value may be a string.
2774
2775This type is used by the following types:
2776
2777* :ref:`SpecTypeBuildOptionAction`
2778
2779* :ref:`SpecTypeInterfaceReturnValue`
2780
2781.. _SpecTypeBuildAssemblerOption:
2782
2783Build Assembler Option
2784^^^^^^^^^^^^^^^^^^^^^^
2785
2786The value shall be a string. It shall be an option for the assembler.  The
2787options are used to assemble the sources of this item.  The options defined by
2788this attribute succeed the options presented to the item by the build item
2789context.
2790
2791This type is used by the following types:
2792
2793* :ref:`SpecTypeBuildScriptItemType`
2794
2795* :ref:`SpecTypeBuildStartFileItemType`
2796
2797.. _SpecTypeBuildCCompilerOption:
2798
2799Build C Compiler Option
2800^^^^^^^^^^^^^^^^^^^^^^^
2801
2802The value shall be a string. It shall be an option for the C compiler.  The
2803options are used to compile the sources of this item.  The options defined by
2804this attribute succeed the options presented to the item by the build item
2805context.
2806
2807This type is used by the following types:
2808
2809* :ref:`SpecTypeBuildAdaTestProgramItemType`
2810
2811* :ref:`SpecTypeBuildBSPItemType`
2812
2813* :ref:`SpecTypeBuildLibraryItemType`
2814
2815* :ref:`SpecTypeBuildObjectsItemType`
2816
2817* :ref:`SpecTypeBuildOptionCCompilerCheckAction`
2818
2819* :ref:`SpecTypeBuildScriptItemType`
2820
2821* :ref:`SpecTypeBuildTestProgramItemType`
2822
2823.. _SpecTypeBuildCPreprocessorOption:
2824
2825Build C Preprocessor Option
2826^^^^^^^^^^^^^^^^^^^^^^^^^^^
2827
2828The value shall be a string. It shall be an option for the C preprocessor.  The
2829options are used to preprocess the sources of this item.  The options defined
2830by this attribute succeed the options presented to the item by the build item
2831context.
2832
2833This type is used by the following types:
2834
2835* :ref:`SpecTypeBuildAdaTestProgramItemType`
2836
2837* :ref:`SpecTypeBuildBSPItemType`
2838
2839* :ref:`SpecTypeBuildLibraryItemType`
2840
2841* :ref:`SpecTypeBuildObjectsItemType`
2842
2843* :ref:`SpecTypeBuildScriptItemType`
2844
2845* :ref:`SpecTypeBuildStartFileItemType`
2846
2847* :ref:`SpecTypeBuildTestProgramItemType`
2848
2849.. _SpecTypeBuildCXXCompilerOption:
2850
2851Build C++ Compiler Option
2852^^^^^^^^^^^^^^^^^^^^^^^^^
2853
2854The value shall be a string. It shall be an option for the C++ compiler.  The
2855options are used to compile the sources of this item.  The options defined by
2856this attribute succeed the options presented to the item by the build item
2857context.
2858
2859This type is used by the following types:
2860
2861* :ref:`SpecTypeBuildLibraryItemType`
2862
2863* :ref:`SpecTypeBuildObjectsItemType`
2864
2865* :ref:`SpecTypeBuildOptionCXXCompilerCheckAction`
2866
2867* :ref:`SpecTypeBuildScriptItemType`
2868
2869* :ref:`SpecTypeBuildTestProgramItemType`
2870
2871.. _SpecTypeBuildDependencyLinkRole:
2872
2873Build Dependency Link Role
2874^^^^^^^^^^^^^^^^^^^^^^^^^^
2875
2876This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
2877value is ``build-dependency``. It defines the build dependency role of links.
2878
2879.. _SpecTypeBuildIncludePath:
2880
2881Build Include Path
2882^^^^^^^^^^^^^^^^^^
2883
2884The value shall be a string. It shall be a path to header files.  The path is
2885used by the C preprocessor to search for header files.  It succeeds the
2886includes presented to the item by the build item context.  For an
2887:ref:`SpecTypeBuildGroupItemType` item the includes are visible to all items
2888referenced by the group item.  For :ref:`SpecTypeBuildBSPItemType`,
2889:ref:`SpecTypeBuildObjectsItemType`, :ref:`SpecTypeBuildLibraryItemType`,
2890:ref:`SpecTypeBuildStartFileItemType`, and
2891:ref:`SpecTypeBuildTestProgramItemType` items the includes are only visible to
2892the sources specified by the item itself and they do not propagate to
2893referenced items.
2894
2895This type is used by the following types:
2896
2897* :ref:`SpecTypeBuildAdaTestProgramItemType`
2898
2899* :ref:`SpecTypeBuildBSPItemType`
2900
2901* :ref:`SpecTypeBuildGroupItemType`
2902
2903* :ref:`SpecTypeBuildLibraryItemType`
2904
2905* :ref:`SpecTypeBuildObjectsItemType`
2906
2907* :ref:`SpecTypeBuildScriptItemType`
2908
2909* :ref:`SpecTypeBuildStartFileItemType`
2910
2911* :ref:`SpecTypeBuildTestProgramItemType`
2912
2913.. _SpecTypeBuildInstallDirective:
2914
2915Build Install Directive
2916^^^^^^^^^^^^^^^^^^^^^^^
2917
2918This set of attributes specifies files installed by a build item. All explicit
2919attributes shall be specified. The explicit attributes for this type are:
2920
2921destination
2922    The attribute value shall be a string. It shall be the install destination
2923    directory.
2924
2925source
2926    The attribute value shall be a list of strings. It shall be the list of
2927    source files to be installed in the destination directory.  The path to a
2928    source file shall be relative to the directory of the :file:`wscript`.
2929
2930This type is used by the following types:
2931
2932* :ref:`SpecTypeBuildBSPItemType`
2933
2934* :ref:`SpecTypeBuildGroupItemType`
2935
2936* :ref:`SpecTypeBuildLibraryItemType`
2937
2938* :ref:`SpecTypeBuildObjectsItemType`
2939
2940.. _SpecTypeBuildInstallPath:
2941
2942Build Install Path
2943^^^^^^^^^^^^^^^^^^
2944
2945A value of this type shall be of one of the following variants:
2946
2947* There may by be no value (null).
2948
2949* The value may be a string. It shall be the installation path of a
2950  :ref:`SpecTypeBuildTarget`.
2951
2952This type is used by the following types:
2953
2954* :ref:`SpecTypeBuildConfigurationFileItemType`
2955
2956* :ref:`SpecTypeBuildConfigurationHeaderItemType`
2957
2958* :ref:`SpecTypeBuildLibraryItemType`
2959
2960* :ref:`SpecTypeBuildStartFileItemType`
2961
2962.. _SpecTypeBuildLinkStaticLibraryDirective:
2963
2964Build Link Static Library Directive
2965^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2966
2967The value shall be a string. It shall be an external static library identifier.
2968The library is used to link programs referenced by this item, e.g. ``m`` for
2969``libm.a``.  The library is added to the build command through the ``stlib``
2970attribute. It shall not be used for internal static libraries.  Internal static
2971libraries shall be specified through the ``use-after`` and ``use-before``
2972attributes to enable a proper build dependency tracking.
2973
2974This type is used by the following types:
2975
2976* :ref:`SpecTypeBuildAdaTestProgramItemType`
2977
2978* :ref:`SpecTypeBuildScriptItemType`
2979
2980* :ref:`SpecTypeBuildTestProgramItemType`
2981
2982.. _SpecTypeBuildLinkerOption:
2983
2984Build Linker Option
2985^^^^^^^^^^^^^^^^^^^
2986
2987The value shall be a string. It shall be an option for the linker.  The options
2988are used to link executables.  The options defined by this attribute succeed
2989the options presented to the item by the build item context.
2990
2991This type is used by the following types:
2992
2993* :ref:`SpecTypeBuildAdaTestProgramItemType`
2994
2995* :ref:`SpecTypeBuildScriptItemType`
2996
2997* :ref:`SpecTypeBuildTestProgramItemType`
2998
2999.. _SpecTypeBuildOptionAction:
3000
3001Build Option Action
3002^^^^^^^^^^^^^^^^^^^
3003
3004This set of attributes specifies a build option action. Exactly one of the
3005explicit attributes shall be specified. The explicit attributes for this type
3006are:
3007
3008append-test-cppflags
3009    The attribute value shall be a string. It shall be the name of a test
3010    program.  The action appends the action value to the ``CPPFLAGS`` of the
3011    test program.  The name shall correspond to the name of a
3012    :ref:`SpecTypeBuildTestProgramItemType` item. Due to the processing order
3013    of items, there is no way to check if the name specified by the attribute
3014    value is valid.
3015
3016assert-aligned
3017    The attribute value shall be an integer number. The action asserts that the
3018    action value is aligned according to the attribute value.
3019
3020assert-eq
3021    The attribute value shall be a :ref:`SpecTypeBooleanOrIntegerOrString`. The
3022    action asserts that the action value is equal to the attribute value.
3023
3024assert-ge
3025    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3026    asserts that the action value is greater than or equal to the attribute
3027    value.
3028
3029assert-gt
3030    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3031    asserts that the action value is greater than the attribute value.
3032
3033assert-int16
3034    The attribute shall have no value. The action asserts that the action value
3035    is a valid signed 16-bit integer.
3036
3037assert-int32
3038    The attribute shall have no value. The action asserts that the action value
3039    is a valid signed 32-bit integer.
3040
3041assert-int64
3042    The attribute shall have no value. The action asserts that the action value
3043    is a valid signed 64-bit integer.
3044
3045assert-int8
3046    The attribute shall have no value. The action asserts that the action value
3047    is a valid signed 8-bit integer.
3048
3049assert-le
3050    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3051    asserts that the action value is less than or equal to the attribute value.
3052
3053assert-lt
3054    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3055    asserts that the action value is less than the attribute value.
3056
3057assert-ne
3058    The attribute value shall be a :ref:`SpecTypeBooleanOrIntegerOrString`. The
3059    action asserts that the action value is not equal to the attribute value.
3060
3061assert-power-of-two
3062    The attribute shall have no value. The action asserts that the action value
3063    is a power of two.
3064
3065assert-uint16
3066    The attribute shall have no value. The action asserts that the action value
3067    is a valid unsigned 16-bit integer.
3068
3069assert-uint32
3070    The attribute shall have no value. The action asserts that the action value
3071    is a valid unsigned 32-bit integer.
3072
3073assert-uint64
3074    The attribute shall have no value. The action asserts that the action value
3075    is a valid unsigned 64-bit integer.
3076
3077assert-uint8
3078    The attribute shall have no value. The action asserts that the action value
3079    is a valid unsigned 8-bit integer.
3080
3081check-cc
3082    The attribute value shall be a
3083    :ref:`SpecTypeBuildOptionCCompilerCheckAction`.
3084
3085check-cxx
3086    The attribute value shall be a
3087    :ref:`SpecTypeBuildOptionCXXCompilerCheckAction`.
3088
3089define
3090    The attribute value shall be an optional string. The action adds a define
3091    to the configuration set.  If the attribute value is present, then it is
3092    used as the name of the define, otherwise the ``name`` of the item is used.
3093    The value of the define is the action value.  If the action value is a
3094    string, then it is quoted.
3095
3096define-condition
3097    The attribute value shall be an optional string. The action adds a
3098    conditional define to the configuration set.  If the attribute value is
3099    present, then it is used as the name of the define, otherwise the ``name``
3100    of the item is used.  The value of the define is the action value.
3101
3102define-unquoted
3103    The attribute value shall be an optional string. The action adds a define
3104    to the configuration set.  If the attribute value is present, then it is
3105    used as the name of the define, otherwise the ``name`` of the item is used.
3106    The value of the define is the action value.  If the action value is a
3107    string, then it is not quoted.
3108
3109env-append
3110    The attribute value shall be an optional string. The action appends the
3111    action value to an environment of the configuration set.  If the attribute
3112    value is present, then it is used as the name of the environment variable,
3113    otherwise the ``name`` of the item is used.
3114
3115env-assign
3116    The attribute value shall be an optional string. The action assigns the
3117    action value to an environment of the configuration set.  If the attribute
3118    value is present, then it is used as the name of the environment variable,
3119    otherwise the ``name`` of the item is used.
3120
3121env-enable
3122    The attribute value shall be an optional string. If the action value is
3123    true, then a name is appended to the ``ENABLE`` environment variable of the
3124    configuration set.  If the attribute value is present, then it is used as
3125    the name, otherwise the ``name`` of the item is used.
3126
3127find-program
3128    The attribute shall have no value. The action tries to find the program
3129    specified by the action value. Uses the ``${PATH}`` to find the program.
3130    Returns the result of the find operation, e.g. a path to the program.
3131
3132find-tool
3133    The attribute shall have no value. The action tries to find the tool
3134    specified by the action value. Uses the tool paths specified by the
3135    ``--rtems-tools`` command line option.  Returns the result of the find
3136    operation, e.g. a path to the program.
3137
3138format-and-define
3139    The attribute value shall be an optional string. The action adds a define
3140    to the configuration set.  If the attribute value is present, then it is
3141    used as the name of the define, otherwise the ``name`` of the item is used.
3142    The value of the define is the action value.  The value is formatted
3143    according to the ``format`` attribute value.
3144
3145get-boolean
3146    The attribute shall have no value. The action gets the action value for
3147    subsequent actions from a configuration file variable named by the items
3148    ``name`` attribute. If no such variable exists in the configuration file,
3149    then the default value is used.  The value is converted to a boolean.
3150
3151get-env
3152    The attribute value shall be a string. The action gets the action value for
3153    subsequent actions from the environment variable of the configuration set
3154    named by the attribute value.
3155
3156get-integer
3157    The attribute shall have no value. The action gets the action value for
3158    subsequent actions from a configuration file variable named by the items
3159    ``name`` attribute. If no such variable exists in the configuration file,
3160    then the default value is used.  The value is converted to an integer.
3161
3162get-string
3163    The attribute shall have no value. The action gets the action value for
3164    subsequent actions from a configuration file variable named by the items
3165    ``name`` attribute. If no such variable exists in the configuration file,
3166    then the default value is used.  The value is converted to a string.
3167
3168script
3169    The attribute value shall be a string. The action executes the attribute
3170    value with the Python ``eval()`` function in the context of the script
3171    action handler.
3172
3173set-test-state
3174    The attribute value shall be a
3175    :ref:`SpecTypeBuildOptionSetTestStateAction`.
3176
3177set-value
3178    The attribute value shall be a :ref:`SpecTypeBuildOptionValue`. The action
3179    sets the action value for subsequent actions to the attribute value.
3180
3181split
3182    The attribute shall have no value. The action splits the action value.
3183
3184substitute
3185    The attribute shall have no value. The action performs a ``${VARIABLE}``
3186    substitution on the action value.  Use ``$$`` for a plain ``$`` character.
3187
3188This type is used by the following types:
3189
3190* :ref:`SpecTypeBuildOptionItemType`
3191
3192.. _SpecTypeBuildOptionCCompilerCheckAction:
3193
3194Build Option C Compiler Check Action
3195^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3196
3197This set of attributes specifies a check done using the C compiler. All
3198explicit attributes shall be specified. The explicit attributes for this type
3199are:
3200
3201cflags
3202    The attribute value shall be a list. Each list element shall be a
3203    :ref:`SpecTypeBuildCCompilerOption`.
3204
3205fragment
3206    The attribute value shall be a string. It shall be a code fragment used to
3207    check the availability of a certain feature through compilation with the C
3208    compiler.  The resulting object is not linked to an executable.
3209
3210message
3211    The attribute value shall be a string. It shall be a description of the
3212    feature to check.
3213
3214This type is used by the following types:
3215
3216* :ref:`SpecTypeBuildOptionAction`
3217
3218.. _SpecTypeBuildOptionCXXCompilerCheckAction:
3219
3220Build Option C++ Compiler Check Action
3221^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3222
3223This set of attributes specifies a check done using the C++ compiler. All
3224explicit attributes shall be specified. The explicit attributes for this type
3225are:
3226
3227cxxflags
3228    The attribute value shall be a list. Each list element shall be a
3229    :ref:`SpecTypeBuildCXXCompilerOption`.
3230
3231fragment
3232    The attribute value shall be a string. It shall be a code fragment used to
3233    check the availability of a certain feature through compilation with the
3234    C++ compiler.  The resulting object is not linked to an executable.
3235
3236message
3237    The attribute value shall be a string. It shall be a description of the
3238    feature to check.
3239
3240This type is used by the following types:
3241
3242* :ref:`SpecTypeBuildOptionAction`
3243
3244.. _SpecTypeBuildOptionDefaultByVariant:
3245
3246Build Option Default by Variant
3247^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3248
3249This set of attributes specifies build option default values by variant. All
3250explicit attributes shall be specified. The explicit attributes for this type
3251are:
3252
3253value
3254    The attribute value shall be a :ref:`SpecTypeBuildOptionValue`. It value
3255    shall be the default value for the matching variants.
3256
3257variants
3258    The attribute value shall be a list of strings. It shall be a list of
3259    Python regular expression matching with the desired variants.
3260
3261This type is used by the following types:
3262
3263* :ref:`SpecTypeBuildOptionItemType`
3264
3265.. _SpecTypeBuildOptionName:
3266
3267Build Option Name
3268^^^^^^^^^^^^^^^^^
3269
3270The value shall be a string. It shall be the name of the build option. The
3271value shall match with the regular expression "``^[a-zA-Z_][a-zA-Z0-9_]*$``".
3272
3273This type is used by the following types:
3274
3275* :ref:`SpecTypeBuildOptionItemType`
3276
3277.. _SpecTypeBuildOptionSetTestStateAction:
3278
3279Build Option Set Test State Action
3280^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3281
3282This set of attributes specifies test states for a set of test programs.
3283Generic attributes may be specified. Each generic attribute key shall be a
3284:ref:`SpecTypeName`. Each generic attribute value shall be a
3285:ref:`SpecTypeBuildTestState`. The keys shall be test program names.  The names
3286shall correspond to the name of a :ref:`SpecTypeBuildTestProgramItemType` or
3287:ref:`SpecTypeBuildAdaTestProgramItemType` item.  Due to the processing order
3288of items, there is no way to check if the name specified by the attribute key
3289is valid.
3290
3291This type is used by the following types:
3292
3293* :ref:`SpecTypeBuildOptionAction`
3294
3295.. _SpecTypeBuildOptionValue:
3296
3297Build Option Value
3298^^^^^^^^^^^^^^^^^^
3299
3300A value of this type shall be of one of the following variants:
3301
3302* The value may be a boolean.
3303
3304* The value may be an integer number.
3305
3306* The value may be a list. Each list element shall be a string.
3307
3308* There may by be no value (null).
3309
3310* The value may be a string.
3311
3312This type is used by the following types:
3313
3314* :ref:`SpecTypeBuildOptionAction`
3315
3316* :ref:`SpecTypeBuildOptionDefaultByVariant`
3317
3318* :ref:`SpecTypeBuildOptionItemType`
3319
3320.. _SpecTypeBuildSource:
3321
3322Build Source
3323^^^^^^^^^^^^
3324
3325The value shall be a string. It shall be a source file.  The path to a source
3326file shall be relative to the directory of the :file:`wscript`.
3327
3328This type is used by the following types:
3329
3330* :ref:`SpecTypeBuildAdaTestProgramItemType`
3331
3332* :ref:`SpecTypeBuildBSPItemType`
3333
3334* :ref:`SpecTypeBuildLibraryItemType`
3335
3336* :ref:`SpecTypeBuildObjectsItemType`
3337
3338* :ref:`SpecTypeBuildStartFileItemType`
3339
3340* :ref:`SpecTypeBuildTestProgramItemType`
3341
3342.. _SpecTypeBuildTarget:
3343
3344Build Target
3345^^^^^^^^^^^^
3346
3347The value shall be a string. It shall be the target file path.  The path to the
3348target file shall be relative to the directory of the :file:`wscript`.  The
3349target file is located in the build tree.
3350
3351This type is used by the following types:
3352
3353* :ref:`SpecTypeBuildAdaTestProgramItemType`
3354
3355* :ref:`SpecTypeBuildConfigurationFileItemType`
3356
3357* :ref:`SpecTypeBuildConfigurationHeaderItemType`
3358
3359* :ref:`SpecTypeBuildLibraryItemType`
3360
3361* :ref:`SpecTypeBuildStartFileItemType`
3362
3363* :ref:`SpecTypeBuildTestProgramItemType`
3364
3365.. _SpecTypeBuildTestState:
3366
3367Build Test State
3368^^^^^^^^^^^^^^^^
3369
3370The value shall be a string. This string defines a test state. The value shall
3371be an element of
3372
3373* "``benchmark``",
3374
3375* "``exclude``",
3376
3377* "``expected-fail``",
3378
3379* "``indeterminate``", and
3380
3381* "``user-input``".
3382
3383This type is used by the following types:
3384
3385* :ref:`SpecTypeBuildOptionSetTestStateAction`
3386
3387.. _SpecTypeBuildUseAfterDirective:
3388
3389Build Use After Directive
3390^^^^^^^^^^^^^^^^^^^^^^^^^
3391
3392The value shall be a string. It shall be an internal static library identifier.
3393The library is used to link programs referenced by this item, e.g. ``z`` for
3394``libz.a``.  The library is placed after the use items of the build item
3395context.
3396
3397This type is used by the following types:
3398
3399* :ref:`SpecTypeBuildAdaTestProgramItemType`
3400
3401* :ref:`SpecTypeBuildGroupItemType`
3402
3403* :ref:`SpecTypeBuildScriptItemType`
3404
3405* :ref:`SpecTypeBuildTestProgramItemType`
3406
3407.. _SpecTypeBuildUseBeforeDirective:
3408
3409Build Use Before Directive
3410^^^^^^^^^^^^^^^^^^^^^^^^^^
3411
3412The value shall be a string. It shall be an internal static library identifier.
3413The library is used to link programs referenced by this item, e.g. ``z`` for
3414``libz.a``.  The library is placed before the use items of the build item
3415context.
3416
3417This type is used by the following types:
3418
3419* :ref:`SpecTypeBuildAdaTestProgramItemType`
3420
3421* :ref:`SpecTypeBuildGroupItemType`
3422
3423* :ref:`SpecTypeBuildScriptItemType`
3424
3425* :ref:`SpecTypeBuildTestProgramItemType`
3426
3427.. _SpecTypeConstraintLinkRole:
3428
3429Constraint Link Role
3430^^^^^^^^^^^^^^^^^^^^
3431
3432This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3433value is ``constraint``. It defines the constraint role of links.  The link
3434target shall be a constraint.
3435
3436.. _SpecTypeCopyright:
3437
3438Copyright
3439^^^^^^^^^
3440
3441The value shall be a string. It shall be a copyright statement of a copyright
3442holder of the specification item. The value
3443
3444* shall match with the regular expression
3445  "``^\s*Copyright\s+\(C\)\s+[0-9]+,\s*[0-9]+\s+.+\s*$``",
3446
3447* or, shall match with the regular expression
3448  "``^\s*Copyright\s+\(C\)\s+[0-9]+\s+.+\s*$``",
3449
3450* or, shall match with the regular expression
3451  "``^\s*Copyright\s+\(C\)\s+.+\s*$``".
3452
3453This type is used by the following types:
3454
3455* :ref:`SpecTypeRootItemType`
3456
3457.. _SpecTypeEnabledByExpression:
3458
3459Enabled-By Expression
3460^^^^^^^^^^^^^^^^^^^^^
3461
3462A value of this type shall be an expression which defines under which
3463conditions the specification item or parts of it are enabled.  The expression
3464is evaluated with the use of an *enabled set*.  This is a set of strings which
3465indicate enabled features.
3466
3467A value of this type shall be of one of the following variants:
3468
3469* The value may be a boolean. This expression evaluates directly to the boolean
3470  value.
3471
3472* The value may be a set of attributes. Each attribute defines an operator.
3473  Exactly one of the explicit attributes shall be specified. The explicit
3474  attributes for this type are:
3475
3476  and
3477      The attribute value shall be a list. Each list element shall be an
3478      :ref:`SpecTypeEnabledByExpression`. The *and* operator evaluates to the
3479      *logical and* of the evaluation results of the expressions in the list.
3480
3481  not
3482      The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. The
3483      *not* operator evaluates to the *logical not* of the evaluation results
3484      of the expression.
3485
3486  or
3487      The attribute value shall be a list. Each list element shall be an
3488      :ref:`SpecTypeEnabledByExpression`. The *or* operator evaluates to the
3489      *logical or* of the evaluation results of the expressions in the list.
3490
3491* The value may be a list. Each list element shall be an
3492  :ref:`SpecTypeEnabledByExpression`. This list of expressions evaluates to the
3493  *logical or* of the evaluation results of the expressions in the list.
3494
3495* The value may be a string. If the value is in the *enabled set*, this
3496  expression evaluates to true, otherwise to false.
3497
3498This type is used by the following types:
3499
3500* :ref:`SpecTypeActionRequirementTransition`
3501
3502* :ref:`SpecTypeEnabledByExpression`
3503
3504* :ref:`SpecTypeInterfaceIncludeLinkRole`
3505
3506* :ref:`SpecTypeRootItemType`
3507
3508Please have a look at the following example:
3509
3510.. code-block:: yaml
3511
3512    enabled-by:
3513      and:
3514      - RTEMS_NETWORKING
3515      - not: RTEMS_SMP
3516
3517.. _SpecTypeGlossaryMembershipLinkRole:
3518
3519Glossary Membership Link Role
3520^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3521
3522This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3523value is ``glossary-member``. It defines the glossary membership role of links.
3524
3525.. _SpecTypeIntegerOrString:
3526
3527Integer or String
3528^^^^^^^^^^^^^^^^^
3529
3530A value of this type shall be of one of the following variants:
3531
3532* The value may be an integer number.
3533
3534* The value may be a string.
3535
3536This type is used by the following types:
3537
3538* :ref:`SpecTypeApplicationConfigurationOptionConstraintSet`
3539
3540* :ref:`SpecTypeApplicationConfigurationValueOptionItemType`
3541
3542* :ref:`SpecTypeBuildOptionAction`
3543
3544.. _SpecTypeInterfaceBriefDescription:
3545
3546Interface Brief Description
3547^^^^^^^^^^^^^^^^^^^^^^^^^^^
3548
3549A value of this type shall be of one of the following variants:
3550
3551* There may by be no value (null).
3552
3553* The value may be a string. It shall be the brief description of the
3554  interface.  It should be a single sentence. The value shall not match with
3555  the regular expression "``\n\n``".
3556
3557This type is used by the following types:
3558
3559* :ref:`SpecTypeInterfaceCompoundItemType`
3560
3561* :ref:`SpecTypeInterfaceCompoundMemberDefinition`
3562
3563* :ref:`SpecTypeInterfaceDefineItemType`
3564
3565* :ref:`SpecTypeInterfaceEnumItemType`
3566
3567* :ref:`SpecTypeInterfaceEnumeratorItemType`
3568
3569* :ref:`SpecTypeInterfaceFunctionItemType`
3570
3571* :ref:`SpecTypeInterfaceGroupItemType`
3572
3573* :ref:`SpecTypeInterfaceHeaderFileItemType`
3574
3575* :ref:`SpecTypeInterfaceMacroItemType`
3576
3577* :ref:`SpecTypeInterfaceTypedefItemType`
3578
3579* :ref:`SpecTypeInterfaceVariableItemType`
3580
3581.. _SpecTypeInterfaceCompoundDefinitionKind:
3582
3583Interface Compound Definition Kind
3584^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3585
3586The value shall be a string. It specifies how the interface compound is
3587defined.  It may be a typedef only, the struct or union only, or a typedef with
3588a struct or union definition. The value shall be an element of
3589
3590* "``struct-only``",
3591
3592* "``typedef-and-struct``",
3593
3594* "``typedef-and-union``",
3595
3596* "``typedef-only``", and
3597
3598* "``union-only``".
3599
3600This type is used by the following types:
3601
3602* :ref:`SpecTypeInterfaceCompoundItemType`
3603
3604.. _SpecTypeInterfaceCompoundMemberCompound:
3605
3606Interface Compound Member Compound
3607^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3608
3609This type refines the following types:
3610
3611* :ref:`SpecTypeInterfaceCompoundMemberDefinition` through the ``kind``
3612  attribute if the value is ``struct``
3613
3614* :ref:`SpecTypeInterfaceCompoundMemberDefinition` through the ``kind``
3615  attribute if the value is ``union``
3616
3617This set of attributes specifies an interface compound member compound. All
3618explicit attributes shall be specified. The explicit attributes for this type
3619are:
3620
3621definition
3622    The attribute value shall be a list. Each list element shall be an
3623    :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`.
3624
3625.. _SpecTypeInterfaceCompoundMemberDeclaration:
3626
3627Interface Compound Member Declaration
3628^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3629
3630This type refines the :ref:`SpecTypeInterfaceCompoundMemberDefinition` through
3631the ``kind`` attribute if the value is ``member``. This set of attributes
3632specifies an interface compound member declaration. All explicit attributes
3633shall be specified. The explicit attributes for this type are:
3634
3635definition
3636    The attribute value shall be a string. It shall be the interface compound
3637    member declaration.  On the declaration a context-sensitive substitution of
3638    item variables is performed.
3639
3640.. _SpecTypeInterfaceCompoundMemberDefinition:
3641
3642Interface Compound Member Definition
3643^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3644
3645This set of attributes specifies an interface compound member definition. All
3646explicit attributes shall be specified. The explicit attributes for this type
3647are:
3648
3649brief
3650    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
3651
3652description
3653    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
3654
3655kind
3656    The attribute value shall be a string. It shall be the interface compound
3657    member kind.
3658
3659name
3660    The attribute value shall be a string. It shall be the interface compound
3661    member name.
3662
3663This type is refined by the following types:
3664
3665* :ref:`SpecTypeInterfaceCompoundMemberCompound`
3666
3667* :ref:`SpecTypeInterfaceCompoundMemberDeclaration`
3668
3669This type is used by the following types:
3670
3671* :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`
3672
3673* :ref:`SpecTypeInterfaceCompoundMemberDefinitionVariant`
3674
3675.. _SpecTypeInterfaceCompoundMemberDefinitionDirective:
3676
3677Interface Compound Member Definition Directive
3678^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3679
3680This set of attributes specifies an interface compound member definition
3681directive. All explicit attributes shall be specified. The explicit attributes
3682for this type are:
3683
3684default
3685    The attribute value shall be an
3686    :ref:`SpecTypeInterfaceCompoundMemberDefinition`. The default definition
3687    will be used if no variant-specific definition is enabled.
3688
3689variants
3690    The attribute value shall be a list. Each list element shall be an
3691    :ref:`SpecTypeInterfaceCompoundMemberDefinitionVariant`.
3692
3693This type is used by the following types:
3694
3695* :ref:`SpecTypeInterfaceCompoundItemType`
3696
3697* :ref:`SpecTypeInterfaceCompoundMemberCompound`
3698
3699.. _SpecTypeInterfaceCompoundMemberDefinitionVariant:
3700
3701Interface Compound Member Definition Variant
3702^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3703
3704This set of attributes specifies an interface compound member definition
3705variant. All explicit attributes shall be specified. The explicit attributes
3706for this type are:
3707
3708definition
3709    The attribute value shall be an
3710    :ref:`SpecTypeInterfaceCompoundMemberDefinition`. The definition will be
3711    used if the expression defined by the ``enabled-by`` attribute evaluates to
3712    true.  In generated header files, the expression is evaluated by the C
3713    preprocessor.
3714
3715enabled-by
3716    The attribute value shall be an
3717    :ref:`SpecTypeInterfaceEnabledByExpression`.
3718
3719This type is used by the following types:
3720
3721* :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`
3722
3723.. _SpecTypeInterfaceDefinition:
3724
3725Interface Definition
3726^^^^^^^^^^^^^^^^^^^^
3727
3728A value of this type shall be of one of the following variants:
3729
3730* There may by be no value (null).
3731
3732* The value may be a string. It shall be the definition.  On the definition a
3733  context-sensitive substitution of item variables is performed.
3734
3735This type is used by the following types:
3736
3737* :ref:`SpecTypeInterfaceDefinitionDirective`
3738
3739* :ref:`SpecTypeInterfaceDefinitionVariant`
3740
3741.. _SpecTypeInterfaceDefinitionDirective:
3742
3743Interface Definition Directive
3744^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3745
3746This set of attributes specifies an interface definition directive. All
3747explicit attributes shall be specified. The explicit attributes for this type
3748are:
3749
3750default
3751    The attribute value shall be an :ref:`SpecTypeInterfaceDefinition`. The
3752    default definition will be used if no variant-specific definition is
3753    enabled.
3754
3755variants
3756    The attribute value shall be a list. Each list element shall be an
3757    :ref:`SpecTypeInterfaceDefinitionVariant`.
3758
3759This type is used by the following types:
3760
3761* :ref:`SpecTypeInterfaceDefineItemType`
3762
3763* :ref:`SpecTypeInterfaceEnumeratorItemType`
3764
3765* :ref:`SpecTypeInterfaceMacroItemType`
3766
3767* :ref:`SpecTypeInterfaceTypedefItemType`
3768
3769* :ref:`SpecTypeInterfaceVariableItemType`
3770
3771.. _SpecTypeInterfaceDefinitionVariant:
3772
3773Interface Definition Variant
3774^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3775
3776This set of attributes specifies an interface definition variant. All explicit
3777attributes shall be specified. The explicit attributes for this type are:
3778
3779definition
3780    The attribute value shall be an :ref:`SpecTypeInterfaceDefinition`. The
3781    definition will be used if the expression defined by the ``enabled-by``
3782    attribute evaluates to true.  In generated header files, the expression is
3783    evaluated by the C preprocessor.
3784
3785enabled-by
3786    The attribute value shall be an
3787    :ref:`SpecTypeInterfaceEnabledByExpression`.
3788
3789This type is used by the following types:
3790
3791* :ref:`SpecTypeInterfaceDefinitionDirective`
3792
3793.. _SpecTypeInterfaceDescription:
3794
3795Interface Description
3796^^^^^^^^^^^^^^^^^^^^^
3797
3798A value of this type shall be of one of the following variants:
3799
3800* There may by be no value (null).
3801
3802* The value may be a string. It shall be the description of the interface.  The
3803  description should be short and concentrate on the average case.  All special
3804  cases, usage notes, constraints, error conditions, configuration
3805  dependencies, references, etc. should be described in the
3806  :ref:`SpecTypeInterfaceNotes`.
3807
3808This type is used by the following types:
3809
3810* :ref:`SpecTypeApplicationConfigurationOptionItemType`
3811
3812* :ref:`SpecTypeInterfaceCompoundItemType`
3813
3814* :ref:`SpecTypeInterfaceCompoundMemberDefinition`
3815
3816* :ref:`SpecTypeInterfaceDefineItemType`
3817
3818* :ref:`SpecTypeInterfaceEnumItemType`
3819
3820* :ref:`SpecTypeInterfaceEnumeratorItemType`
3821
3822* :ref:`SpecTypeInterfaceFunctionItemType`
3823
3824* :ref:`SpecTypeInterfaceGroupItemType`
3825
3826* :ref:`SpecTypeInterfaceMacroItemType`
3827
3828* :ref:`SpecTypeInterfaceParameter`
3829
3830* :ref:`SpecTypeInterfaceReturnValue`
3831
3832* :ref:`SpecTypeInterfaceTypedefItemType`
3833
3834* :ref:`SpecTypeInterfaceVariableItemType`
3835
3836.. _SpecTypeInterfaceEnabledByExpression:
3837
3838Interface Enabled-By Expression
3839^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3840
3841A value of this type shall be an expression which defines under which
3842conditions an interface definition is enabled.  In generated header files, the
3843expression is evaluated by the C preprocessor.
3844
3845A value of this type shall be of one of the following variants:
3846
3847* The value may be a boolean. It is converted to 0 or 1.  It defines a symbol
3848  in the expression.
3849
3850* The value may be a set of attributes. Each attribute defines an operator.
3851  Exactly one of the explicit attributes shall be specified. The explicit
3852  attributes for this type are:
3853
3854  and
3855      The attribute value shall be a list. Each list element shall be an
3856      :ref:`SpecTypeInterfaceEnabledByExpression`. The *and* operator defines a
3857      *logical and* of the expressions in the list.
3858
3859  not
3860      The attribute value shall be an
3861      :ref:`SpecTypeInterfaceEnabledByExpression`. The *not* operator defines a
3862      *logical not* of the expression.
3863
3864  or
3865      The attribute value shall be a list. Each list element shall be an
3866      :ref:`SpecTypeInterfaceEnabledByExpression`. The *or* operator defines a
3867      *logical or* of the expressions in the list.
3868
3869* The value may be a list. Each list element shall be an
3870  :ref:`SpecTypeInterfaceEnabledByExpression`. It defines a *logical or* of the
3871  expressions in the list.
3872
3873* The value may be a string. It defines a symbol in the expression.
3874
3875This type is used by the following types:
3876
3877* :ref:`SpecTypeInterfaceCompoundMemberDefinitionVariant`
3878
3879* :ref:`SpecTypeInterfaceDefinitionVariant`
3880
3881* :ref:`SpecTypeInterfaceEnabledByExpression`
3882
3883* :ref:`SpecTypeInterfaceFunctionDefinitionVariant`
3884
3885.. _SpecTypeInterfaceEnumDefinitionKind:
3886
3887Interface Enum Definition Kind
3888^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3889
3890The value shall be a string. It specifies how the enum is defined.  It may be a
3891typedef only, the enum only, or a typedef with an enum definition. The value
3892shall be an element of
3893
3894* "``enum-only``",
3895
3896* "``typedef-and-enum``", and
3897
3898* "``typedef-only``".
3899
3900This type is used by the following types:
3901
3902* :ref:`SpecTypeInterfaceEnumItemType`
3903
3904.. _SpecTypeInterfaceEnumeratorLinkRole:
3905
3906Interface Enumerator Link Role
3907^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3908
3909This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3910value is ``interface-enumerator``. It defines the interface enumerator role of
3911links.
3912
3913.. _SpecTypeInterfaceFunctionDefinition:
3914
3915Interface Function Definition
3916^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3917
3918This set of attributes specifies a function definition. All explicit attributes
3919shall be specified. The explicit attributes for this type are:
3920
3921attributes
3922    The attribute value shall be an optional string. If the value is present,
3923    then it shall be the function attributes. On the attributes a
3924    context-sensitive substitution of item variables is performed.  A function
3925    attribute is for example the indication that the function does not return
3926    to the caller.
3927
3928body
3929    The attribute value shall be an optional string. If the value is present,
3930    then it shall be the definition of a static inline function.  On the
3931    function definition a context-sensitive substitution of item variables is
3932    performed.  If no value is present, then the function is declared as an
3933    external function.
3934
3935params
3936    The attribute value shall be a list of strings. It shall be the list of
3937    parameter declarations of the function.  On the function parameter
3938    declarations a context-sensitive substitution of item variables is
3939    performed.
3940
3941return
3942    The attribute value shall be a string. It shall be the function return
3943    type.  On the return type a context-sensitive substitution of item
3944    variables is performed.
3945
3946This type is used by the following types:
3947
3948* :ref:`SpecTypeInterfaceFunctionDefinitionDirective`
3949
3950* :ref:`SpecTypeInterfaceFunctionDefinitionVariant`
3951
3952.. _SpecTypeInterfaceFunctionDefinitionDirective:
3953
3954Interface Function Definition Directive
3955^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3956
3957This set of attributes specifies a function definition directive. All explicit
3958attributes shall be specified. The explicit attributes for this type are:
3959
3960default
3961    The attribute value shall be an :ref:`SpecTypeInterfaceFunctionDefinition`.
3962    The default definition will be used if no variant-specific definition is
3963    enabled.
3964
3965variants
3966    The attribute value shall be a list. Each list element shall be an
3967    :ref:`SpecTypeInterfaceFunctionDefinitionVariant`.
3968
3969This type is used by the following types:
3970
3971* :ref:`SpecTypeInterfaceFunctionItemType`
3972
3973.. _SpecTypeInterfaceFunctionDefinitionVariant:
3974
3975Interface Function Definition Variant
3976^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3977
3978This set of attributes specifies a function definition variant. All explicit
3979attributes shall be specified. The explicit attributes for this type are:
3980
3981definition
3982    The attribute value shall be an :ref:`SpecTypeInterfaceFunctionDefinition`.
3983    The definition will be used if the expression defined by the ``enabled-by``
3984    attribute evaluates to true.  In generated header files, the expression is
3985    evaluated by the C preprocessor.
3986
3987enabled-by
3988    The attribute value shall be an
3989    :ref:`SpecTypeInterfaceEnabledByExpression`.
3990
3991This type is used by the following types:
3992
3993* :ref:`SpecTypeInterfaceFunctionDefinitionDirective`
3994
3995.. _SpecTypeInterfaceFunctionLinkRole:
3996
3997Interface Function Link Role
3998^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3999
4000This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4001value is ``interface-function``. It defines the interface function role of
4002links.  It is used to indicate that a :ref:`SpecTypeActionRequirementItemType`
4003item specifies functional requirements of an
4004:ref:`SpecTypeInterfaceFunctionItemType` or a
4005:ref:`SpecTypeInterfaceMacroItemType` item.
4006
4007.. _SpecTypeInterfaceGroupIdentifier:
4008
4009Interface Group Identifier
4010^^^^^^^^^^^^^^^^^^^^^^^^^^
4011
4012The value shall be a string. It shall be the identifier of the interface group.
4013The value shall match with the regular expression "``^[A-Z][a-zA-Z0-9]*$``".
4014
4015This type is used by the following types:
4016
4017* :ref:`SpecTypeDesignGroupRequirementItemType`
4018
4019* :ref:`SpecTypeInterfaceGroupItemType`
4020
4021.. _SpecTypeInterfaceGroupMembershipLinkRole:
4022
4023Interface Group Membership Link Role
4024^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4025
4026This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4027value is ``interface-ingroup``. It defines the interface group membership role
4028of links.
4029
4030.. _SpecTypeInterfaceIncludeLinkRole:
4031
4032Interface Include Link Role
4033^^^^^^^^^^^^^^^^^^^^^^^^^^^
4034
4035This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4036value is ``interface-include``. It defines the interface include role of links
4037and is used to indicate that an interface container includes another interface
4038container.  For example, one header file includes another header file. All
4039explicit attributes shall be specified. The explicit attributes for this type
4040are:
4041
4042enabled-by
4043    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. It
4044    shall define under which conditions the interface container is included.
4045
4046.. _SpecTypeInterfaceNotes:
4047
4048Interface Notes
4049^^^^^^^^^^^^^^^
4050
4051A value of this type shall be of one of the following variants:
4052
4053* There may by be no value (null).
4054
4055* The value may be a string. It shall be the notes for the interface.
4056
4057This type is used by the following types:
4058
4059* :ref:`SpecTypeApplicationConfigurationOptionItemType`
4060
4061* :ref:`SpecTypeInterfaceCompoundItemType`
4062
4063* :ref:`SpecTypeInterfaceDefineItemType`
4064
4065* :ref:`SpecTypeInterfaceEnumeratorItemType`
4066
4067* :ref:`SpecTypeInterfaceFunctionItemType`
4068
4069* :ref:`SpecTypeInterfaceMacroItemType`
4070
4071* :ref:`SpecTypeInterfaceTypedefItemType`
4072
4073* :ref:`SpecTypeInterfaceVariableItemType`
4074
4075.. _SpecTypeInterfaceParameter:
4076
4077Interface Parameter
4078^^^^^^^^^^^^^^^^^^^
4079
4080This set of attributes specifies an interface parameter. All explicit
4081attributes shall be specified. The explicit attributes for this type are:
4082
4083description
4084    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
4085
4086dir
4087    The attribute value shall be an :ref:`SpecTypeInterfaceParameterDirection`.
4088
4089name
4090    The attribute value shall be a string. It shall be the interface parameter
4091    name.
4092
4093This type is used by the following types:
4094
4095* :ref:`SpecTypeInterfaceFunctionItemType`
4096
4097* :ref:`SpecTypeInterfaceMacroItemType`
4098
4099.. _SpecTypeInterfaceParameterDirection:
4100
4101Interface Parameter Direction
4102^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4103
4104A value of this type shall be of one of the following variants:
4105
4106* There may by be no value (null).
4107
4108* The value may be a string. It specifies the interface parameter direction.
4109  The value shall be an element of
4110
4111  * "``in``",
4112
4113  * "``out``", and
4114
4115  * "``inout``".
4116
4117This type is used by the following types:
4118
4119* :ref:`SpecTypeInterfaceParameter`
4120
4121* :ref:`SpecTypeTestRunParameter`
4122
4123.. _SpecTypeInterfacePlacementLinkRole:
4124
4125Interface Placement Link Role
4126^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4127
4128This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4129value is ``interface-placement``. It defines the interface placement role of
4130links.  It is used to indicate that an interface definition is placed into an
4131interface container, for example a header file.
4132
4133.. _SpecTypeInterfaceReturnDirective:
4134
4135Interface Return Directive
4136^^^^^^^^^^^^^^^^^^^^^^^^^^
4137
4138This set of attributes specifies an interface return. All explicit attributes
4139shall be specified. The explicit attributes for this type are:
4140
4141return
4142    The attribute value shall be an optional string. It shall describe the
4143    interface return for unspecified return values.
4144
4145return-values
4146    The attribute value shall be a list. Each list element shall be an
4147    :ref:`SpecTypeInterfaceReturnValue`.
4148
4149This type is used by the following types:
4150
4151* :ref:`SpecTypeInterfaceFunctionItemType`
4152
4153* :ref:`SpecTypeInterfaceMacroItemType`
4154
4155.. _SpecTypeInterfaceReturnValue:
4156
4157Interface Return Value
4158^^^^^^^^^^^^^^^^^^^^^^
4159
4160This set of attributes specifies an interface return value. All explicit
4161attributes shall be specified. The explicit attributes for this type are:
4162
4163description
4164    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
4165
4166value
4167    The attribute value shall be a :ref:`SpecTypeBooleanOrIntegerOrString`. It
4168    shall be the described interface return value.
4169
4170This type is used by the following types:
4171
4172* :ref:`SpecTypeInterfaceReturnDirective`
4173
4174.. _SpecTypeInterfaceTargetLinkRole:
4175
4176Interface Target Link Role
4177^^^^^^^^^^^^^^^^^^^^^^^^^^
4178
4179This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4180value is ``interface-target``. It defines the interface target role of links.
4181It is used for interface forward declarations.
4182
4183.. _SpecTypeLink:
4184
4185Link
4186^^^^
4187
4188This set of attributes specifies a link from one specification item to another
4189specification item.  The links in a list are ordered.  The first link in the
4190list is processed first. All explicit attributes shall be specified. The
4191explicit attributes for this type are:
4192
4193role
4194    The attribute value shall be a :ref:`SpecTypeName`. It shall be the role of
4195    the link.
4196
4197uid
4198    The attribute value shall be an :ref:`SpecTypeUID`. It shall be the
4199    absolute or relative UID of the link target item.
4200
4201This type is refined by the following types:
4202
4203* :ref:`SpecTypeApplicationConfigurationGroupMemberLinkRole`
4204
4205* :ref:`SpecTypeBuildDependencyLinkRole`
4206
4207* :ref:`SpecTypeConstraintLinkRole`
4208
4209* :ref:`SpecTypeGlossaryMembershipLinkRole`
4210
4211* :ref:`SpecTypeInterfaceEnumeratorLinkRole`
4212
4213* :ref:`SpecTypeInterfaceFunctionLinkRole`
4214
4215* :ref:`SpecTypeInterfaceGroupMembershipLinkRole`
4216
4217* :ref:`SpecTypeInterfaceIncludeLinkRole`
4218
4219* :ref:`SpecTypeInterfacePlacementLinkRole`
4220
4221* :ref:`SpecTypeInterfaceTargetLinkRole`
4222
4223* :ref:`SpecTypePlacementOrderLinkRole`
4224
4225* :ref:`SpecTypeRequirementRefinementLinkRole`
4226
4227* :ref:`SpecTypeRequirementValidationLinkRole`
4228
4229* :ref:`SpecTypeRuntimeMeasurementRequestLinkRole`
4230
4231* :ref:`SpecTypeSpecificationMemberLinkRole`
4232
4233* :ref:`SpecTypeSpecificationRefinementLinkRole`
4234
4235This type is used by the following types:
4236
4237* :ref:`SpecTypeRootItemType`
4238
4239* :ref:`SpecTypeTestCaseAction`
4240
4241* :ref:`SpecTypeTestCaseCheck`
4242
4243.. _SpecTypeName:
4244
4245Name
4246^^^^
4247
4248The value shall be a string. A string is a valid name if it matches with the
4249``^([a-z][a-z0-9-]*|SPDX-License-Identifier)$`` regular expression.
4250
4251This type is used by the following types:
4252
4253* :ref:`SpecTypeApplicationConfigurationOptionItemType`
4254
4255* :ref:`SpecTypeBuildItemType`
4256
4257* :ref:`SpecTypeBuildOptionSetTestStateAction`
4258
4259* :ref:`SpecTypeFunctionalRequirementItemType`
4260
4261* :ref:`SpecTypeGlossaryItemType`
4262
4263* :ref:`SpecTypeInterfaceItemType`
4264
4265* :ref:`SpecTypeLink`
4266
4267* :ref:`SpecTypeNonFunctionalRequirementItemType`
4268
4269* :ref:`SpecTypeRequirementItemType`
4270
4271* :ref:`SpecTypeRootItemType`
4272
4273* :ref:`SpecTypeRuntimeMeasurementParameterSet`
4274
4275* :ref:`SpecTypeRuntimePerformanceParameterSet`
4276
4277* :ref:`SpecTypeSpecificationAttributeValue`
4278
4279* :ref:`SpecTypeSpecificationExplicitAttributes`
4280
4281* :ref:`SpecTypeSpecificationGenericAttributes`
4282
4283* :ref:`SpecTypeSpecificationItemType`
4284
4285* :ref:`SpecTypeSpecificationList`
4286
4287* :ref:`SpecTypeSpecificationRefinementLinkRole`
4288
4289.. _SpecTypeOptionalString:
4290
4291Optional String
4292^^^^^^^^^^^^^^^
4293
4294A value of this type shall be of one of the following variants:
4295
4296* There may by be no value (null).
4297
4298* The value may be a string.
4299
4300.. _SpecTypePlacementOrderLinkRole:
4301
4302Placement Order Link Role
4303^^^^^^^^^^^^^^^^^^^^^^^^^
4304
4305This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4306value is ``placement-order``. This link role defines the placement order of
4307items in a container item (for example an interface function in a header file
4308or a documentation section).
4309
4310.. _SpecTypeRequirementReference:
4311
4312Requirement Reference
4313^^^^^^^^^^^^^^^^^^^^^
4314
4315This set of attributes specifies a requirement reference. All explicit
4316attributes shall be specified. The explicit attributes for this type are:
4317
4318identifier
4319    The attribute value shall be a string. It shall be the type-specific
4320    identifier of the reference target. For *group* references use the Doxygen
4321    group identifier.
4322
4323type
4324    The attribute value shall be a :ref:`SpecTypeRequirementReferenceType`.
4325
4326This type is used by the following types:
4327
4328* :ref:`SpecTypeRequirementItemType`
4329
4330.. _SpecTypeRequirementReferenceType:
4331
4332Requirement Reference Type
4333^^^^^^^^^^^^^^^^^^^^^^^^^^
4334
4335The value shall be a string. It specifies the type of a requirement reference.
4336The value shall be an element of
4337
4338* "``define``",
4339
4340* "``file``",
4341
4342* "``function``",
4343
4344* "``group``",
4345
4346* "``macro``", and
4347
4348* "``variable``".
4349
4350This type is used by the following types:
4351
4352* :ref:`SpecTypeRequirementReference`
4353
4354.. _SpecTypeRequirementRefinementLinkRole:
4355
4356Requirement Refinement Link Role
4357^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4358
4359This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4360value is ``requirement-refinement``. It defines the requirement refinement role
4361of links.
4362
4363.. _SpecTypeRequirementText:
4364
4365Requirement Text
4366^^^^^^^^^^^^^^^^
4367
4368The value shall be a string. It shall state a requirement or constraint. The
4369value shall not contain an element of
4370
4371* "``acceptable``",
4372
4373* "``adequate``",
4374
4375* "``almost always``",
4376
4377* "``and/or``",
4378
4379* "``appropriate``",
4380
4381* "``approximately``",
4382
4383* "``as far as possible``",
4384
4385* "``as much as practicable``",
4386
4387* "``best``",
4388
4389* "``best possible``",
4390
4391* "``easy``",
4392
4393* "``efficient``",
4394
4395* "``e.g.``",
4396
4397* "``enable``",
4398
4399* "``enough``",
4400
4401* "``etc.``",
4402
4403* "``few``",
4404
4405* "``first rate``",
4406
4407* "``flexible``",
4408
4409* "``generally``",
4410
4411* "``goal``",
4412
4413* "``graceful``",
4414
4415* "``great``",
4416
4417* "``greatest``",
4418
4419* "``ideally``",
4420
4421* "``i.e.``",
4422
4423* "``if possible``",
4424
4425* "``in most cases``",
4426
4427* "``large``",
4428
4429* "``many``",
4430
4431* "``maximize``",
4432
4433* "``minimize``",
4434
4435* "``most``",
4436
4437* "``multiple``",
4438
4439* "``necessary``",
4440
4441* "``numerous``",
4442
4443* "``optimize``",
4444
4445* "``ought to``",
4446
4447* "``probably``",
4448
4449* "``quick``",
4450
4451* "``rapid``",
4452
4453* "``reasonably``",
4454
4455* "``relevant``",
4456
4457* "``robust``",
4458
4459* "``satisfactory``",
4460
4461* "``several``",
4462
4463* "``shall be included but not limited to``",
4464
4465* "``simple``",
4466
4467* "``small``",
4468
4469* "``some``",
4470
4471* "``state of the art``",
4472
4473* "``sufficient``",
4474
4475* "``suitable``",
4476
4477* "``support``",
4478
4479* "``systematically``",
4480
4481* "``transparent``",
4482
4483* "``typical``",
4484
4485* "``user friendly``",
4486
4487* "``usually``",
4488
4489* "``versatile``", and
4490
4491* "``when necessary``".
4492
4493This type is used by the following types:
4494
4495* :ref:`SpecTypeActionRequirementState`
4496
4497* :ref:`SpecTypeApplicationConfigurationGroupItemType`
4498
4499* :ref:`SpecTypeApplicationConfigurationOptionConstraintSet`
4500
4501* :ref:`SpecTypeApplicationConfigurationOptionItemType`
4502
4503* :ref:`SpecTypeConstraintItemType`
4504
4505* :ref:`SpecTypeInterfaceGroupItemType`
4506
4507* :ref:`SpecTypeRequirementItemType`
4508
4509.. _SpecTypeRequirementValidationLinkRole:
4510
4511Requirement Validation Link Role
4512^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4513
4514This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4515value is ``validation``. It defines the requirement validation role of links.
4516
4517.. _SpecTypeRequirementValidationMethod:
4518
4519Requirement Validation Method
4520^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4521
4522The value shall be a string. This value type characterizes a requirement
4523validation method (except validation by test). The value shall be an element of
4524
4525* "``by-analysis``",
4526
4527* "``by-inspection``", and
4528
4529* "``by-review-of-design``".
4530
4531This type is used by the following types:
4532
4533* :ref:`SpecTypeRequirementValidationItemType`
4534
4535.. _SpecTypeRuntimeMeasurementEnvironment:
4536
4537Runtime Measurement Environment
4538^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4539
4540The value shall be a string. It specifies the runtime measurement environment.
4541The value
4542
4543* shall be an element of
4544
4545  * "``FullCache``",
4546
4547  * "``HotCache``", and
4548
4549  * "``DirtyCache``",
4550
4551* or, shall match with the regular expression "``^Load/[1-9][0-9]*$``".
4552
4553This type is used by the following types:
4554
4555* :ref:`SpecTypeRuntimeMeasurementEnvironmentTable`
4556
4557.. _SpecTypeRuntimeMeasurementEnvironmentTable:
4558
4559Runtime Measurement Environment Table
4560^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4561
4562This set of attributes provides runtime performance limits for a set of runtime
4563measurement environments. Generic attributes may be specified. Each generic
4564attribute key shall be a :ref:`SpecTypeRuntimeMeasurementEnvironment`. Each
4565generic attribute value shall be a :ref:`SpecTypeRuntimeMeasurementValueTable`.
4566
4567This type is used by the following types:
4568
4569* :ref:`SpecTypeRuntimePerformanceLimitTable`
4570
4571.. _SpecTypeRuntimeMeasurementParameterSet:
4572
4573Runtime Measurement Parameter Set
4574^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4575
4576This set of attributes defines parameters of the runtime measurement test case.
4577All explicit attributes shall be specified. The explicit attributes for this
4578type are:
4579
4580sample-count
4581    The attribute value shall be an integer number. It shall be the sample
4582    count of the runtime measurement context.
4583
4584In addition to the explicit attributes, generic attributes may be specified.
4585Each generic attribute key shall be a :ref:`SpecTypeName`. The attribute value
4586may have any type.
4587
4588This type is used by the following types:
4589
4590* :ref:`SpecTypeRuntimeMeasurementTestItemType`
4591
4592.. _SpecTypeRuntimeMeasurementRequestLinkRole:
4593
4594Runtime Measurement Request Link Role
4595^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4596
4597This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4598value is ``runtime-measurement-request``. It defines the runtime measurement
4599request role of links.  The link target shall be a
4600:ref:`SpecTypeRuntimeMeasurementTestItemType` item.
4601
4602.. _SpecTypeRuntimeMeasurementValueKind:
4603
4604Runtime Measurement Value Kind
4605^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4606
4607The value shall be a string. It specifies the kind of a runtime measurement
4608value. The value shall be an element of
4609
4610* "``max-lower-bound``",
4611
4612* "``max-upper-bound``",
4613
4614* "``mean-lower-bound``",
4615
4616* "``mean-upper-bound``",
4617
4618* "``min-lower-bound``", and
4619
4620* "``min-upper-bound``".
4621
4622This type is used by the following types:
4623
4624* :ref:`SpecTypeRuntimeMeasurementValueTable`
4625
4626.. _SpecTypeRuntimeMeasurementValueTable:
4627
4628Runtime Measurement Value Table
4629^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4630
4631This set of attributes provides a set of runtime measurement values each of a
4632specified kind.  The unit of the values shall be one second. Generic attributes
4633may be specified. Each generic attribute key shall be a
4634:ref:`SpecTypeRuntimeMeasurementValueKind`. Each generic attribute value shall
4635be a floating-point number.
4636
4637This type is used by the following types:
4638
4639* :ref:`SpecTypeRuntimeMeasurementEnvironmentTable`
4640
4641.. _SpecTypeRuntimePerformanceLimitTable:
4642
4643Runtime Performance Limit Table
4644^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4645
4646This set of attributes provides runtime performance limits for BSP variants
4647specified by ``"<arch>/<bsp>"`` with <arch> being the architecture of the BSP
4648and <bsp> being the base name of the BSP. Generic attributes may be specified.
4649Each generic attribute key shall be a string. Each generic attribute value
4650shall be a :ref:`SpecTypeRuntimeMeasurementEnvironmentTable`.
4651
4652This type is used by the following types:
4653
4654* :ref:`SpecTypeRuntimePerformanceRequirementItemType`
4655
4656.. _SpecTypeRuntimePerformanceParameterSet:
4657
4658Runtime Performance Parameter Set
4659^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4660
4661This set of attributes defines parameters of the runtime performance
4662requirement. Generic attributes may be specified. Each generic attribute key
4663shall be a :ref:`SpecTypeName`. The attribute value may have any type.
4664
4665This type is used by the following types:
4666
4667* :ref:`SpecTypeRuntimePerformanceRequirementItemType`
4668
4669.. _SpecTypeSPDXLicenseIdentifier:
4670
4671SPDX License Identifier
4672^^^^^^^^^^^^^^^^^^^^^^^
4673
4674The value shall be a string. It defines the license of the item expressed
4675though an SPDX License Identifier. The value
4676
4677* shall be equal to "``CC-BY-SA-4.0 OR BSD-2-Clause``",
4678
4679* or, shall be equal to "``BSD-2-Clause``",
4680
4681* or, shall be equal to "``CC-BY-SA-4.0``".
4682
4683This type is used by the following types:
4684
4685* :ref:`SpecTypeRootItemType`
4686
4687.. _SpecTypeSpecificationAttributeSet:
4688
4689Specification Attribute Set
4690^^^^^^^^^^^^^^^^^^^^^^^^^^^
4691
4692This set of attributes specifies a set of attributes. The following explicit
4693attributes are mandatory:
4694
4695* ``attributes``
4696
4697* ``description``
4698
4699* ``mandatory-attributes``
4700
4701The explicit attributes for this type are:
4702
4703attributes
4704    The attribute value shall be a
4705    :ref:`SpecTypeSpecificationExplicitAttributes`. It shall specify the
4706    explicit attributes of the attribute set.
4707
4708description
4709    The attribute value shall be an optional string. It shall be the
4710    description of the attribute set.
4711
4712generic-attributes
4713    The attribute value shall be a
4714    :ref:`SpecTypeSpecificationGenericAttributes`. It shall specify the generic
4715    attributes of the attribute set.
4716
4717mandatory-attributes
4718    The attribute value shall be a
4719    :ref:`SpecTypeSpecificationMandatoryAttributes`. It shall specify the
4720    mandatory attributes of the attribute set.
4721
4722This type is used by the following types:
4723
4724* :ref:`SpecTypeSpecificationInformation`
4725
4726.. _SpecTypeSpecificationAttributeValue:
4727
4728Specification Attribute Value
4729^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4730
4731This set of attributes specifies an attribute value. All explicit attributes
4732shall be specified. The explicit attributes for this type are:
4733
4734description
4735    The attribute value shall be an optional string. It shall be the
4736    description of the attribute value.
4737
4738spec-type
4739    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
4740    specification type of the attribute value.
4741
4742This type is used by the following types:
4743
4744* :ref:`SpecTypeSpecificationExplicitAttributes`
4745
4746.. _SpecTypeSpecificationBooleanValue:
4747
4748Specification Boolean Value
4749^^^^^^^^^^^^^^^^^^^^^^^^^^^
4750
4751This attribute set specifies a boolean value. Only the ``description``
4752attribute is mandatory. The explicit attributes for this type are:
4753
4754assert
4755    The attribute value shall be a boolean. This optional attribute defines the
4756    value constraint of the specified boolean value.  If the value of the
4757    assert attribute is true, then the value of the specified boolean value
4758    shall be true.  If the value of the assert attribute is false, then the
4759    value of the specified boolean value shall be false.  In case the assert
4760    attribute is not present, then the value of the specified boolean value may
4761    be true or false.
4762
4763description
4764    The attribute value shall be an optional string. It shall be the
4765    description of the specified boolean value.
4766
4767This type is used by the following types:
4768
4769* :ref:`SpecTypeSpecificationInformation`
4770
4771.. _SpecTypeSpecificationExplicitAttributes:
4772
4773Specification Explicit Attributes
4774^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4775
4776Generic attributes may be specified. Each generic attribute key shall be a
4777:ref:`SpecTypeName`. Each generic attribute value shall be a
4778:ref:`SpecTypeSpecificationAttributeValue`. Each generic attribute specifies an
4779explicit attribute of the attribute set.  The key of the each generic attribute
4780defines the attribute key of the explicit attribute.
4781
4782This type is used by the following types:
4783
4784* :ref:`SpecTypeSpecificationAttributeSet`
4785
4786.. _SpecTypeSpecificationFloatingPointAssert:
4787
4788Specification Floating-Point Assert
4789^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4790
4791A value of this type shall be an expression which asserts that the
4792floating-point value of the specified attribute satisfies the required
4793constraints.
4794
4795A value of this type shall be of one of the following variants:
4796
4797* The value may be a set of attributes. Each attribute defines an operator.
4798  Exactly one of the explicit attributes shall be specified. The explicit
4799  attributes for this type are:
4800
4801  and
4802      The attribute value shall be a list. Each list element shall be a
4803      :ref:`SpecTypeSpecificationFloatingPointAssert`. The *and* operator
4804      evaluates to the *logical and* of the evaluation results of the
4805      expressions in the list.
4806
4807  eq
4808      The attribute value shall be a floating-point number. The *eq* operator
4809      evaluates to true, if the value to check is equal to the value of this
4810      attribute, otherwise to false.
4811
4812  ge
4813      The attribute value shall be a floating-point number. The *ge* operator
4814      evaluates to true, if the value to check is greater than or equal to the
4815      value of this attribute, otherwise to false.
4816
4817  gt
4818      The attribute value shall be a floating-point number. The *gt* operator
4819      evaluates to true, if the value to check is greater than the value of
4820      this attribute, otherwise to false.
4821
4822  le
4823      The attribute value shall be a floating-point number. The *le* operator
4824      evaluates to true, if the value to check is less than or equal to the
4825      value of this attribute, otherwise to false.
4826
4827  lt
4828      The attribute value shall be a floating-point number. The *lt* operator
4829      evaluates to true, if the value to check is less than the value of this
4830      attribute, otherwise to false.
4831
4832  ne
4833      The attribute value shall be a floating-point number. The *ne* operator
4834      evaluates to true, if the value to check is not equal to the value of
4835      this attribute, otherwise to false.
4836
4837  not
4838      The attribute value shall be a
4839      :ref:`SpecTypeSpecificationFloatingPointAssert`. The *not* operator
4840      evaluates to the *logical not* of the evaluation results of the
4841      expression.
4842
4843  or
4844      The attribute value shall be a list. Each list element shall be a
4845      :ref:`SpecTypeSpecificationFloatingPointAssert`. The *or* operator
4846      evaluates to the *logical or* of the evaluation results of the
4847      expressions in the list.
4848
4849* The value may be a list. Each list element shall be a
4850  :ref:`SpecTypeSpecificationFloatingPointAssert`. This list of expressions
4851  evaluates to the *logical or* of the evaluation results of the expressions in
4852  the list.
4853
4854This type is used by the following types:
4855
4856* :ref:`SpecTypeSpecificationFloatingPointAssert`
4857
4858* :ref:`SpecTypeSpecificationFloatingPointValue`
4859
4860.. _SpecTypeSpecificationFloatingPointValue:
4861
4862Specification Floating-Point Value
4863^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4864
4865This set of attributes specifies a floating-point value. Only the
4866``description`` attribute is mandatory. The explicit attributes for this type
4867are:
4868
4869assert
4870    The attribute value shall be a
4871    :ref:`SpecTypeSpecificationFloatingPointAssert`. This optional attribute
4872    defines the value constraints of the specified floating-point value.  In
4873    case the assert attribute is not present, then the value of the specified
4874    floating-point value may be every valid floating-point number.
4875
4876description
4877    The attribute value shall be an optional string. It shall be the
4878    description of the specified floating-point value.
4879
4880This type is used by the following types:
4881
4882* :ref:`SpecTypeSpecificationInformation`
4883
4884.. _SpecTypeSpecificationGenericAttributes:
4885
4886Specification Generic Attributes
4887^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4888
4889This set of attributes specifies generic attributes.  Generic attributes are
4890attributes which are not explicitly specified by
4891:ref:`SpecTypeSpecificationExplicitAttributes`.  They are restricted to uniform
4892attribute key and value types. All explicit attributes shall be specified. The
4893explicit attributes for this type are:
4894
4895description
4896    The attribute value shall be an optional string. It shall be the
4897    description of the generic attributes.
4898
4899key-spec-type
4900    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
4901    specification type of the generic attribute keys.
4902
4903value-spec-type
4904    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
4905    specification type of the generic attribute values.
4906
4907This type is used by the following types:
4908
4909* :ref:`SpecTypeSpecificationAttributeSet`
4910
4911.. _SpecTypeSpecificationInformation:
4912
4913Specification Information
4914^^^^^^^^^^^^^^^^^^^^^^^^^
4915
4916This set of attributes specifies attribute values. At least one of the explicit
4917attributes shall be specified. The explicit attributes for this type are:
4918
4919bool
4920    The attribute value shall be a :ref:`SpecTypeSpecificationBooleanValue`. It
4921    shall specify a boolean value.
4922
4923dict
4924    The attribute value shall be a :ref:`SpecTypeSpecificationAttributeSet`. It
4925    shall specify a set of attributes.
4926
4927float
4928    The attribute value shall be a
4929    :ref:`SpecTypeSpecificationFloatingPointValue`. It shall specify a
4930    floating-point value.
4931
4932int
4933    The attribute value shall be a :ref:`SpecTypeSpecificationIntegerValue`. It
4934    shall specify an integer value.
4935
4936list
4937    The attribute value shall be a :ref:`SpecTypeSpecificationList`. It shall
4938    specify a list of attributes or values.
4939
4940none
4941    The attribute shall have no value. It specifies that no value is required.
4942
4943str
4944    The attribute value shall be a :ref:`SpecTypeSpecificationStringValue`. It
4945    shall specify a string.
4946
4947This type is used by the following types:
4948
4949* :ref:`SpecTypeSpecificationItemType`
4950
4951.. _SpecTypeSpecificationIntegerAssert:
4952
4953Specification Integer Assert
4954^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4955
4956A value of this type shall be an expression which asserts that the integer
4957value of the specified attribute satisfies the required constraints.
4958
4959A value of this type shall be of one of the following variants:
4960
4961* The value may be a set of attributes. Each attribute defines an operator.
4962  Exactly one of the explicit attributes shall be specified. The explicit
4963  attributes for this type are:
4964
4965  and
4966      The attribute value shall be a list. Each list element shall be a
4967      :ref:`SpecTypeSpecificationIntegerAssert`. The *and* operator evaluates
4968      to the *logical and* of the evaluation results of the expressions in the
4969      list.
4970
4971  eq
4972      The attribute value shall be an integer number. The *eq* operator
4973      evaluates to true, if the value to check is equal to the value of this
4974      attribute, otherwise to false.
4975
4976  ge
4977      The attribute value shall be an integer number. The *ge* operator
4978      evaluates to true, if the value to check is greater than or equal to the
4979      value of this attribute, otherwise to false.
4980
4981  gt
4982      The attribute value shall be an integer number. The *gt* operator
4983      evaluates to true, if the value to check is greater than the value of
4984      this attribute, otherwise to false.
4985
4986  le
4987      The attribute value shall be an integer number. The *le* operator
4988      evaluates to true, if the value to check is less than or equal to the
4989      value of this attribute, otherwise to false.
4990
4991  lt
4992      The attribute value shall be an integer number. The *lt* operator
4993      evaluates to true, if the value to check is less than the value of this
4994      attribute, otherwise to false.
4995
4996  ne
4997      The attribute value shall be an integer number. The *ne* operator
4998      evaluates to true, if the value to check is not equal to the value of
4999      this attribute, otherwise to false.
5000
5001  not
5002      The attribute value shall be a :ref:`SpecTypeSpecificationIntegerAssert`.
5003      The *not* operator evaluates to the *logical not* of the evaluation
5004      results of the expression.
5005
5006  or
5007      The attribute value shall be a list. Each list element shall be a
5008      :ref:`SpecTypeSpecificationIntegerAssert`. The *or* operator evaluates to
5009      the *logical or* of the evaluation results of the expressions in the
5010      list.
5011
5012* The value may be a list. Each list element shall be a
5013  :ref:`SpecTypeSpecificationIntegerAssert`. This list of expressions evaluates
5014  to the *logical or* of the evaluation results of the expressions in the list.
5015
5016This type is used by the following types:
5017
5018* :ref:`SpecTypeSpecificationIntegerAssert`
5019
5020* :ref:`SpecTypeSpecificationIntegerValue`
5021
5022.. _SpecTypeSpecificationIntegerValue:
5023
5024Specification Integer Value
5025^^^^^^^^^^^^^^^^^^^^^^^^^^^
5026
5027This set of attributes specifies an integer value. Only the ``description``
5028attribute is mandatory. The explicit attributes for this type are:
5029
5030assert
5031    The attribute value shall be a :ref:`SpecTypeSpecificationIntegerAssert`.
5032    This optional attribute defines the value constraints of the specified
5033    integer value.  In case the assert attribute is not present, then the value
5034    of the specified integer value may be every valid integer number.
5035
5036description
5037    The attribute value shall be an optional string. It shall be the
5038    description of the specified integer value.
5039
5040This type is used by the following types:
5041
5042* :ref:`SpecTypeSpecificationInformation`
5043
5044.. _SpecTypeSpecificationList:
5045
5046Specification List
5047^^^^^^^^^^^^^^^^^^
5048
5049This set of attributes specifies a list of attributes or values. All explicit
5050attributes shall be specified. The explicit attributes for this type are:
5051
5052description
5053    The attribute value shall be an optional string. It shall be the
5054    description of the list.
5055
5056spec-type
5057    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5058    specification type of elements of the list.
5059
5060This type is used by the following types:
5061
5062* :ref:`SpecTypeSpecificationInformation`
5063
5064.. _SpecTypeSpecificationMandatoryAttributes:
5065
5066Specification Mandatory Attributes
5067^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5068
5069It defines which explicit attributes are mandatory.
5070
5071A value of this type shall be of one of the following variants:
5072
5073* The value may be a list. Each list element shall be a :ref:`SpecTypeName`.
5074  The list defines the mandatory attributes through their key names.
5075
5076* The value may be a string. It defines how many explicit attributes are
5077  mandatory.  If `none` is used, then none of the explicit attributes is
5078  mandatory, they are all optional. The value shall be an element of
5079
5080  * "``all``",
5081
5082  * "``at-least-one``",
5083
5084  * "``at-most-one``",
5085
5086  * "``exactly-one``", and
5087
5088  * "``none``".
5089
5090This type is used by the following types:
5091
5092* :ref:`SpecTypeSpecificationAttributeSet`
5093
5094.. _SpecTypeSpecificationMemberLinkRole:
5095
5096Specification Member Link Role
5097^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5098
5099This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
5100value is ``spec-member``. It defines the specification membership role of
5101links.
5102
5103.. _SpecTypeSpecificationRefinementLinkRole:
5104
5105Specification Refinement Link Role
5106^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5107
5108This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
5109value is ``spec-refinement``. It defines the specification refinement role of
5110links. All explicit attributes shall be specified. The explicit attributes for
5111this type are:
5112
5113spec-key
5114    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5115    specification type refinement attribute key of the specification
5116    refinement.
5117
5118spec-value
5119    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5120    specification type refinement attribute value of the specification
5121    refinement.
5122
5123.. _SpecTypeSpecificationStringAssert:
5124
5125Specification String Assert
5126^^^^^^^^^^^^^^^^^^^^^^^^^^^
5127
5128A value of this type shall be an expression which asserts that the string of
5129the specified attribute satisfies the required constraints.
5130
5131A value of this type shall be of one of the following variants:
5132
5133* The value may be a set of attributes. Each attribute defines an operator.
5134  Exactly one of the explicit attributes shall be specified. The explicit
5135  attributes for this type are:
5136
5137  and
5138      The attribute value shall be a list. Each list element shall be a
5139      :ref:`SpecTypeSpecificationStringAssert`. The *and* operator evaluates to
5140      the *logical and* of the evaluation results of the expressions in the
5141      list.
5142
5143  contains
5144      The attribute value shall be a list of strings. The *contains* operator
5145      evaluates to true, if the string to check converted to lower case with
5146      all white space characters converted to a single space character contains
5147      a string of the list of strings of this attribute, otherwise to false.
5148
5149  eq
5150      The attribute value shall be a string. The *eq* operator evaluates to
5151      true, if the string to check is equal to the value of this attribute,
5152      otherwise to false.
5153
5154  ge
5155      The attribute value shall be a string. The *ge* operator evaluates to
5156      true, if the string to check is greater than or equal to the value of
5157      this attribute, otherwise to false.
5158
5159  gt
5160      The attribute value shall be a string. The *gt* operator evaluates to
5161      true, if the string to check is greater than the value of this attribute,
5162      otherwise to false.
5163
5164  in
5165      The attribute value shall be a list of strings. The *in* operator
5166      evaluates to true, if the string to check is contained in the list of
5167      strings of this attribute, otherwise to false.
5168
5169  le
5170      The attribute value shall be a string. The *le* operator evaluates to
5171      true, if the string to check is less than or equal to the value of this
5172      attribute, otherwise to false.
5173
5174  lt
5175      The attribute value shall be a string. The *lt* operator evaluates to
5176      true, if the string to check is less than the value of this attribute,
5177      otherwise to false.
5178
5179  ne
5180      The attribute value shall be a string. The *ne* operator evaluates to
5181      true, if the string to check is not equal to the value of this attribute,
5182      otherwise to false.
5183
5184  not
5185      The attribute value shall be a :ref:`SpecTypeSpecificationStringAssert`.
5186      The *not* operator evaluates to the *logical not* of the evaluation
5187      results of the expression.
5188
5189  or
5190      The attribute value shall be a list. Each list element shall be a
5191      :ref:`SpecTypeSpecificationStringAssert`. The *or* operator evaluates to
5192      the *logical or* of the evaluation results of the expressions in the
5193      list.
5194
5195  re
5196      The attribute value shall be a string. The *re* operator evaluates to
5197      true, if the string to check matches with the regular expression of this
5198      attribute, otherwise to false.
5199
5200  uid
5201      The attribute shall have no value. The *uid* operator evaluates to true,
5202      if the string is a valid UID, otherwise to false.
5203
5204* The value may be a list. Each list element shall be a
5205  :ref:`SpecTypeSpecificationStringAssert`. This list of expressions evaluates
5206  to the *logical or* of the evaluation results of the expressions in the list.
5207
5208This type is used by the following types:
5209
5210* :ref:`SpecTypeSpecificationStringAssert`
5211
5212* :ref:`SpecTypeSpecificationStringValue`
5213
5214.. _SpecTypeSpecificationStringValue:
5215
5216Specification String Value
5217^^^^^^^^^^^^^^^^^^^^^^^^^^
5218
5219This set of attributes specifies a string. Only the ``description`` attribute
5220is mandatory. The explicit attributes for this type are:
5221
5222assert
5223    The attribute value shall be a :ref:`SpecTypeSpecificationStringAssert`.
5224    This optional attribute defines the constraints of the specified string.
5225    In case the assert attribute is not present, then the specified string may
5226    be every valid string.
5227
5228description
5229    The attribute value shall be an optional string. It shall be the
5230    description of the specified string attribute.
5231
5232This type is used by the following types:
5233
5234* :ref:`SpecTypeSpecificationInformation`
5235
5236.. _SpecTypeTestCaseAction:
5237
5238Test Case Action
5239^^^^^^^^^^^^^^^^
5240
5241This set of attributes specifies a test case action. All explicit attributes
5242shall be specified. The explicit attributes for this type are:
5243
5244action-brief
5245    The attribute value shall be an optional string. It shall be the test case
5246    action brief description.
5247
5248action-code
5249    The attribute value shall be a string. It shall be the test case action
5250    code.
5251
5252checks
5253    The attribute value shall be a list. Each list element shall be a
5254    :ref:`SpecTypeTestCaseCheck`.
5255
5256links
5257    The attribute value shall be a list. Each list element shall be a
5258    :ref:`SpecTypeLink`.
5259
5260This type is used by the following types:
5261
5262* :ref:`SpecTypeTestCaseItemType`
5263
5264.. _SpecTypeTestCaseCheck:
5265
5266Test Case Check
5267^^^^^^^^^^^^^^^
5268
5269This set of attributes specifies a test case check. All explicit attributes
5270shall be specified. The explicit attributes for this type are:
5271
5272brief
5273    The attribute value shall be an optional string. It shall be the test case
5274    check brief description.
5275
5276code
5277    The attribute value shall be a string. It shall be the test case check
5278    code.
5279
5280links
5281    The attribute value shall be a list. Each list element shall be a
5282    :ref:`SpecTypeLink`.
5283
5284This type is used by the following types:
5285
5286* :ref:`SpecTypeTestCaseAction`
5287
5288.. _SpecTypeTestContextMember:
5289
5290Test Context Member
5291^^^^^^^^^^^^^^^^^^^
5292
5293A value of this type shall be of one of the following variants:
5294
5295* The value may be a set of attributes. This set of attributes defines an
5296  action requirement test context member. All explicit attributes shall be
5297  specified. The explicit attributes for this type are:
5298
5299  brief
5300      The attribute value shall be an optional string. It shall be the test
5301      context member brief description.
5302
5303  description
5304      The attribute value shall be an optional string. It shall be the test
5305      context member description.
5306
5307  member
5308      The attribute value shall be a string. It shall be the test context
5309      member definition.  It shall be a valid C structure member definition
5310      without a trailing ``;``.
5311
5312* There may by be no value (null).
5313
5314This type is used by the following types:
5315
5316* :ref:`SpecTypeActionRequirementItemType`
5317
5318* :ref:`SpecTypeRuntimeMeasurementTestItemType`
5319
5320* :ref:`SpecTypeTestCaseItemType`
5321
5322.. _SpecTypeTestHeader:
5323
5324Test Header
5325^^^^^^^^^^^
5326
5327A value of this type shall be of one of the following variants:
5328
5329* The value may be a set of attributes. This set of attributes specifies a test
5330  header.  In case a test header is specified, then instead of a test case a
5331  test run function will be generated.  The test run function will be declared
5332  in the test header target file and defined in the test source target file.
5333  The test run function can be used to compose test cases.  The test header
5334  file is not automatically included in the test source file.  It should be
5335  added to the includes or local includes of the test. All explicit attributes
5336  shall be specified. The explicit attributes for this type are:
5337
5338  code
5339      The attribute value shall be an optional string. If the value is present,
5340      then it shall be the test header code.  The header code is placed at file
5341      scope after the general test declarations and before the test run
5342      function declaration.
5343
5344  includes
5345      The attribute value shall be a list of strings. It shall be a list of
5346      header files included by the header file via ``#include <...>``.
5347
5348  local-includes
5349      The attribute value shall be a list of strings. It shall be a list of
5350      header files included by the header file via ``#include "..."``.
5351
5352  run-params
5353      The attribute value shall be a list. Each list element shall be a
5354      :ref:`SpecTypeTestRunParameter`.
5355
5356  target
5357      The attribute value shall be a string. It shall be the path to the
5358      generated test header file.
5359
5360* There may by be no value (null).
5361
5362This type is used by the following types:
5363
5364* :ref:`SpecTypeActionRequirementItemType`
5365
5366* :ref:`SpecTypeTestCaseItemType`
5367
5368.. _SpecTypeTestRunParameter:
5369
5370Test Run Parameter
5371^^^^^^^^^^^^^^^^^^
5372
5373This set of attributes specifies a parameter for the test run function. In case
5374this parameter is used in an :ref:`SpecTypeActionRequirementItemType` item,
5375then the parameter is also added as a member to the test context, see
5376:ref:`SpecTypeTestContextMember`. All explicit attributes shall be specified.
5377The explicit attributes for this type are:
5378
5379description
5380    The attribute value shall be a string. It shall be the description of the
5381    parameter.
5382
5383dir
5384    The attribute value shall be an :ref:`SpecTypeInterfaceParameterDirection`.
5385
5386name
5387    The attribute value shall be a string. It shall be the parameter name.
5388
5389specifier
5390    The attribute value shall be a string. It shall be the complete function
5391    parameter specifier.  Use ``${.:name}`` for the parameter name, for example
5392    ``"int ${.:name}"``.
5393
5394This type is used by the following types:
5395
5396* :ref:`SpecTypeTestHeader`
5397
5398.. _SpecTypeTestSupportMethod:
5399
5400Test Support Method
5401^^^^^^^^^^^^^^^^^^^
5402
5403A value of this type shall be of one of the following variants:
5404
5405* The value may be a set of attributes. This set of attributes defines an
5406  action requirement test support method. All explicit attributes shall be
5407  specified. The explicit attributes for this type are:
5408
5409  brief
5410      The attribute value shall be an optional string. It shall be the test
5411      support method brief description.
5412
5413  code
5414      The attribute value shall be a string. It shall be the test support
5415      method code.  The code may use a local variable ``ctx`` which points to
5416      the test context, see :ref:`SpecTypeTestContextMember`.
5417
5418  description
5419      The attribute value shall be an optional string. It shall be the test
5420      support method description.
5421
5422* There may by be no value (null).
5423
5424This type is used by the following types:
5425
5426* :ref:`SpecTypeActionRequirementItemType`
5427
5428* :ref:`SpecTypeRuntimeMeasurementTestItemType`
5429
5430* :ref:`SpecTypeRuntimePerformanceRequirementItemType`
5431
5432* :ref:`SpecTypeTestCaseItemType`
5433
5434.. _SpecTypeUID:
5435
5436UID
5437^^^
5438
5439The value shall be a string. The string shall be a valid absolute or relative
5440item UID.
5441
5442This type is used by the following types:
5443
5444* :ref:`SpecTypeLink`
Note: See TracBrowser for help on using the repository browser.