22
22
from .cfg import eval_cfg
23
23
from .toml import load_toml
24
24
from .manifest import Manifest , CargoLock , Workspace , fixup_meson_varname
25
- from ..mesonlib import MesonException , MachineChoice , version_compare_many
25
+ from ..mesonlib import MesonException , MachineChoice , PerMachine , version_compare_many
26
26
from .. import coredata , mlog
27
27
from ..wrap .wrap import PackageDefinition
28
28
@@ -66,8 +66,16 @@ class PackageState:
66
66
# If this package is member of a workspace.
67
67
ws_subdir : T .Optional [str ] = None
68
68
ws_member : T .Optional [str ] = None
69
- # Package configuration state
70
- cfg : T .Optional [PackageConfiguration ] = None
69
+ # Per-machine configuration state
70
+ cfg : PerMachine [T .Optional [PackageConfiguration ]] = dataclasses .field (
71
+ default_factory = lambda : PerMachine (None , None )
72
+ )
73
+
74
+ def get_or_create_cfg (self , machine : MachineChoice ) -> PackageConfiguration :
75
+ """Get configuration for machine, creating if necessary."""
76
+ if self .cfg [machine ] is None :
77
+ self .cfg [machine ] = PackageConfiguration ()
78
+ return self .cfg [machine ]
71
79
72
80
73
81
@dataclasses .dataclass (frozen = True )
@@ -140,7 +148,7 @@ def interpret_package(self, manifest: Manifest, build: builder.Builder, subdir:
140
148
return build .block (ast )
141
149
142
150
def _create_package (self , pkg : PackageState , build : builder .Builder , subdir : str ) -> T .List [mparser .BaseNode ]:
143
- cfg = pkg .cfg
151
+ cfg = pkg .cfg [ MachineChoice . HOST ]
144
152
ast = []
145
153
146
154
ast .extend ([
@@ -194,7 +202,7 @@ def _process_member(member: str) -> None:
194
202
if member in processed_members :
195
203
return
196
204
pkg = ws .packages [member ]
197
- cfg = pkg .cfg
205
+ cfg = pkg .cfg [ MachineChoice . HOST ]
198
206
for depname in cfg .required_deps :
199
207
dep = pkg .manifest .dependencies [depname ]
200
208
if dep .path :
@@ -280,10 +288,10 @@ def _fetch_package_from_subproject(self, package_name: str, meson_depname: str)
280
288
return pkg , False
281
289
282
290
def _prepare_package (self , pkg : PackageState ) -> None :
283
- if pkg .cfg :
291
+ if pkg .cfg [ MachineChoice . HOST ] :
284
292
return
285
293
286
- pkg . cfg = PackageConfiguration ( )
294
+ _ = pkg . get_or_create_cfg ( MachineChoice . HOST )
287
295
# Merge target specific dependencies that are enabled
288
296
cfgs = self ._get_cfgs (MachineChoice .HOST )
289
297
for condition , dependencies in pkg .manifest .target .items ():
@@ -348,7 +356,7 @@ def _load_manifest(self, subdir: str, workspace: T.Optional[Workspace] = None, m
348
356
return manifest_
349
357
350
358
def _add_dependency (self , pkg : PackageState , depname : str ) -> None :
351
- cfg = pkg .cfg
359
+ cfg = pkg .cfg [ MachineChoice . HOST ]
352
360
if depname in cfg .required_deps :
353
361
return
354
362
dep = pkg .manifest .dependencies .get (depname )
@@ -366,7 +374,7 @@ def _add_dependency(self, pkg: PackageState, depname: str) -> None:
366
374
self ._enable_feature (dep_pkg , f )
367
375
368
376
def _enable_feature (self , pkg : PackageState , feature : str ) -> None :
369
- cfg = pkg .cfg
377
+ cfg = pkg .cfg [ MachineChoice . HOST ]
370
378
if feature in cfg .features :
371
379
return
372
380
cfg .features .add (feature )
@@ -479,7 +487,7 @@ def _create_project(self, name: str, pkg: T.Optional[PackageState], build: build
479
487
return [build .function ('project' , args , kwargs )]
480
488
481
489
def _create_dependencies (self , pkg : PackageState , build : builder .Builder ) -> T .List [mparser .BaseNode ]:
482
- cfg = pkg .cfg
490
+ cfg = pkg .cfg [ MachineChoice . HOST ]
483
491
ast : T .List [mparser .BaseNode ] = []
484
492
for depname in cfg .required_deps :
485
493
dep = pkg .manifest .dependencies [depname ]
@@ -520,7 +528,7 @@ def _create_system_dependency(self, name: str, dep: SystemDependency, build: bui
520
528
]
521
529
522
530
def _create_dependency (self , pkg : PackageState , dep : Dependency , build : builder .Builder ) -> T .List [mparser .BaseNode ]:
523
- cfg = pkg .cfg
531
+ cfg = pkg .cfg [ MachineChoice . HOST ]
524
532
version_ = dep .meson_version or [pkg .manifest .package .version ]
525
533
api = dep .api or pkg .manifest .package .api
526
534
kw = {
@@ -601,7 +609,7 @@ def _create_meson_subdir(self, build: builder.Builder) -> T.List[mparser.BaseNod
601
609
]
602
610
603
611
def _create_lib (self , pkg : PackageState , build : builder .Builder , crate_type : raw .CRATE_TYPE ) -> T .List [mparser .BaseNode ]:
604
- cfg = pkg .cfg
612
+ cfg = pkg .cfg [ MachineChoice . HOST ]
605
613
dependencies : T .List [mparser .BaseNode ] = []
606
614
dependency_map : T .Dict [mparser .BaseNode , mparser .BaseNode ] = {}
607
615
for name in cfg .required_deps :
0 commit comments