11from __future__ import annotations
22
3- from dataclasses import dataclass , field
43from os import environ , system
54from pathlib import Path
65from sys import executable , platform as sys_platform
76from sysconfig import get_path
87from typing import Literal
98
10- from hatchling . builders . config import BuilderConfig
9+ from pydantic import BaseModel , Field
1110
1211__all__ = (
1312 "HatchCppBuildConfig" ,
2524}
2625
2726
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 ):
4428 """A C++ library."""
4529
4630 name : str
4731 sources : list [str ]
4832
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" )
5741
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 )
6044
6145
62- @dataclass
63- class HatchCppPlatform (object ):
46+ class HatchCppPlatform (BaseModel ):
6447 cc : str
6548 cxx : str
6649 platform : Platform
@@ -133,11 +116,10 @@ def get_link_flags(self, library: HatchCppLibrary) -> str:
133116 return flags
134117
135118
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 )
141123
142124 def generate (self ):
143125 self .commands = []
@@ -157,3 +139,17 @@ def cleanup(self):
157139 temp_obj = Path (f"{ library .name } .obj" )
158140 if temp_obj .exists ():
159141 temp_obj .unlink ()
142+
143+
144+ class HatchCppBuildConfig (BaseModel ):
145+ """Build config values for Hatch C++ Builder."""
146+
147+ toolchain : str | None = Field (default = "raw" )
148+ libraries : list [HatchCppLibrary ] = Field (default_factory = list )
149+ verbose : bool | None = Field (default = False )
150+ platform : HatchCppPlatform | None = 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