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

Last change on this file since 1ba0f41 was 1ba0f41, checked in by Sebastian Huber <sebastian.huber@…>, on 01/11/22 at 16:00:49

eng: Document get-string-command-line action

Update #4548.

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