1
1
from __future__ import annotations
2
2
3
- from dataclasses import dataclass , field
4
3
from os import environ , system
5
4
from pathlib import Path
6
5
from sys import executable , platform as sys_platform
7
6
from sysconfig import get_path
8
- from typing import Literal
7
+ from typing import List , Literal , Optional
9
8
10
- from hatchling . builders . config import BuilderConfig
9
+ from pydantic import BaseModel , Field
11
10
12
11
__all__ = (
13
12
"HatchCppBuildConfig" ,
25
24
}
26
25
27
26
28
- @dataclass
29
- class HatchCppBuildConfig (BuilderConfig ):
30
- """Build config values for Hatch C++ Builder."""
31
-
32
- toolchain : str | None = field (default = "raw" )
33
- libraries : list [dict [str , str ]] = field (default_factory = list )
34
- verbose : bool | None = field (default = False )
35
- # build_function: str | None = None
36
- # build_kwargs: t.Mapping[str, str] = field(default_factory=dict)
37
- # editable_build_kwargs: t.Mapping[str, str] = field(default_factory=dict)
38
- # ensured_targets: list[str] = field(default_factory=list)
39
- # skip_if_exists: list[str] = field(default_factory=list)
40
-
41
-
42
- @dataclass
43
- class HatchCppLibrary (object ):
27
+ class HatchCppLibrary (BaseModel ):
44
28
"""A C++ library."""
45
29
46
30
name : str
47
- sources : list [str ]
31
+ sources : List [str ]
48
32
49
- include_dirs : list [str ] = field (default_factory = list )
50
- library_dirs : list [str ] = field (default_factory = list )
51
- libraries : list [str ] = field (default_factory = list )
52
- extra_compile_args : list [str ] = field (default_factory = list )
53
- extra_link_args : list [str ] = field (default_factory = list )
54
- extra_objects : list [str ] = field (default_factory = list )
55
- define_macros : list [str ] = field (default_factory = list )
56
- undef_macros : list [str ] = field (default_factory = list )
33
+ include_dirs : List [str ] = Field (default_factory = list , alias = "include-dirs" )
34
+ library_dirs : List [str ] = Field (default_factory = list , alias = "library-dirs" )
35
+ libraries : List [str ] = Field (default_factory = list )
36
+ extra_compile_args : List [str ] = Field (default_factory = list , alias = "extra-compile-args" )
37
+ extra_link_args : List [str ] = Field (default_factory = list , alias = "extra-link-args" )
38
+ extra_objects : List [str ] = Field (default_factory = list , alias = "extra-objects" )
39
+ define_macros : List [str ] = Field (default_factory = list , alias = "define-macros" )
40
+ undef_macros : List [str ] = Field (default_factory = list , alias = "undef-macros" )
57
41
58
- export_symbols : list [str ] = field (default_factory = list )
59
- depends : list [str ] = field (default_factory = list )
42
+ export_symbols : List [str ] = Field (default_factory = list , alias = "export-symbols" )
43
+ depends : List [str ] = Field (default_factory = list )
60
44
61
45
62
- @dataclass
63
- class HatchCppPlatform (object ):
46
+ class HatchCppPlatform (BaseModel ):
64
47
cc : str
65
48
cxx : str
66
49
platform : Platform
@@ -133,11 +116,10 @@ def get_link_flags(self, library: HatchCppLibrary) -> str:
133
116
return flags
134
117
135
118
136
- @dataclass
137
- class HatchCppBuildPlan (object ):
138
- libraries : list [HatchCppLibrary ] = field (default_factory = list )
139
- platform : HatchCppPlatform = field (default_factory = HatchCppPlatform .default )
140
- commands : list [str ] = field (default_factory = list )
119
+ class HatchCppBuildPlan (BaseModel ):
120
+ libraries : List [HatchCppLibrary ] = Field (default_factory = list )
121
+ platform : HatchCppPlatform = Field (default_factory = HatchCppPlatform .default )
122
+ commands : List [str ] = Field (default_factory = list )
141
123
142
124
def generate (self ):
143
125
self .commands = []
@@ -157,3 +139,17 @@ def cleanup(self):
157
139
temp_obj = Path (f"{ library .name } .obj" )
158
140
if temp_obj .exists ():
159
141
temp_obj .unlink ()
142
+
143
+
144
+ class HatchCppBuildConfig (BaseModel ):
145
+ """Build config values for Hatch C++ Builder."""
146
+
147
+ toolchain : Optional [str ] = Field (default = "raw" )
148
+ libraries : List [HatchCppLibrary ] = Field (default_factory = list )
149
+ verbose : Optional [bool ] = Field (default = False )
150
+ platform : Optional [HatchCppPlatform ] = Field (default_factory = HatchCppPlatform .default )
151
+ # build_function: str | None = None
152
+ # build_kwargs: t.Mapping[str, str] = field(default_factory=dict)
153
+ # editable_build_kwargs: t.Mapping[str, str] = field(default_factory=dict)
154
+ # ensured_targets: list[str] = field(default_factory=list)
155
+ # skip_if_exists: list[str] = field(default_factory=list)
0 commit comments