|  | 
| 4 | 4 | 
 | 
| 5 | 5 | import dataclasses | 
| 6 | 6 | import re | 
| 7 |  | -from typing import Dict, List, Optional | 
|  | 7 | +from typing import Dict, List, Optional, Union | 
| 8 | 8 | 
 | 
| 9 | 9 | _arch_re = re.compile(r"\{\{\s*ARCH\s*\}\}") | 
| 10 | 10 | _os_re = re.compile(r"\{\{\s*OS\s*\}\}") | 
| @@ -60,6 +60,28 @@ class TypeCasterConfig: | 
| 60 | 60 |     headers: List[TypeCasterHeader] = dataclasses.field(default_factory=list) | 
| 61 | 61 | 
 | 
| 62 | 62 | 
 | 
|  | 63 | +@dataclasses.dataclass | 
|  | 64 | +class ConditionalHeader: | 
|  | 65 | +    """ | 
|  | 66 | +    Allows specifying that a header will only be autogenerated if the specified | 
|  | 67 | +    condition is true. | 
|  | 68 | +
 | 
|  | 69 | +    .. code-block:: toml | 
|  | 70 | +
 | 
|  | 71 | +        [tool.semiwrap.extension_modules."PACKAGE.NAME".headers] | 
|  | 72 | +        Name = { header="header.h", enable_if = "platform_machine == 'aarch64'" } | 
|  | 73 | +
 | 
|  | 74 | +    """ | 
|  | 75 | + | 
|  | 76 | +    #: Name of the header file | 
|  | 77 | +    header: str | 
|  | 78 | + | 
|  | 79 | +    #: This is a PEP 508 environment marker specification. | 
|  | 80 | +    #: | 
|  | 81 | +    #: The header will not be parsed if this does not evaluate to true | 
|  | 82 | +    enable_if: str | 
|  | 83 | + | 
|  | 84 | + | 
| 63 | 85 | @dataclasses.dataclass | 
| 64 | 86 | class ExtensionModuleConfig: | 
| 65 | 87 |     """ | 
| @@ -123,7 +145,9 @@ class ExtensionModuleConfig: | 
| 123 | 145 |     #: | 
| 124 | 146 |     #: .. seealso:: :ref:`autowrap` | 
| 125 | 147 |     #: | 
| 126 |  | -    headers: Dict[str, str] = dataclasses.field(default_factory=dict) | 
|  | 148 | +    headers: Dict[str, Union[str, ConditionalHeader]] = dataclasses.field( | 
|  | 149 | +        default_factory=dict | 
|  | 150 | +    ) | 
| 127 | 151 | 
 | 
| 128 | 152 |     #: Path to a directory of yaml files. Generation data will be looked up | 
| 129 | 153 |     #: using the key in the headers dictionary. | 
|  | 
0 commit comments