11"""Definition of a project to build."""
22
33from enum import StrEnum
4+ from pathlib import Path
45from tomllib import load
56from typing import TYPE_CHECKING
67
78from .forge import Forge , ForgeType
89
910
10- if TYPE_CHECKING :
11+ if TYPE_CHECKING : # pragma: no cover
1112 from .__main__ import Dockgen
1213
1314
@@ -38,6 +39,7 @@ def __init__(
3839 apt_deps : list [str ] | None = None ,
3940 src_deps : list [str ] | None = None ,
4041 ):
42+ self .dockgen = dockgen
4143 self .name = name
4244 self .url = url
4345 for forge_type in ForgeType :
@@ -51,28 +53,44 @@ def __init__(
5153 self .org = org or self .forge .org
5254 self .version = version or self .forge .version
5355 self .tarball = tarball or self .forge .tarball
54- self .build_systems = [BuildSystem [b ] for b in (build_systems or [ "CMake" ] )]
56+ self .build_systems = [BuildSystem [b ] for b in (build_systems or self . detect () )]
5557 self .apt_deps = set (apt_deps or [])
5658 self .src_deps = set (src_deps or [])
5759
5860 if self .url != "." :
5961 if upstream_dockgen := self .forge .get_file ("dockgen.toml" ):
60- with upstream_dockgen .open ("rb" ) as f :
61- for name , conf in load (f ).items ():
62- if name == self .name :
63- tgt = self
64- elif name in dockgen .projects :
65- tgt = dockgen .projects [name ]
66- else :
67- dockgen .projects [name ] = Project (
68- dockgen = dockgen , name = name , ** conf
69- )
70- dockgen .projects_order .append (name )
71- continue
62+ self .upstream (upstream_dockgen )
7263
73- for k , v in conf .items ():
74- match k :
75- case "apt_deps" :
76- tgt .apt_deps |= set (v )
77- case "src_deps" :
78- tgt .src_deps |= set (v )
64+ def detect (self ) -> list [str ]:
65+ """
66+ Detect build systems
67+ """
68+ return [
69+ build_system .name
70+ for build_system in BuildSystem
71+ if self .forge .get_file (build_system ) is not None
72+ ]
73+
74+ def upstream (self , upstream_dockgen : Path ):
75+ """
76+ Process data from upstream dockgen.toml
77+ """
78+ with upstream_dockgen .open ("rb" ) as f :
79+ for name , conf in load (f ).items ():
80+ if name == self .name :
81+ tgt = self
82+ elif name in self .dockgen .projects :
83+ tgt = self .dockgen .projects [name ]
84+ else :
85+ self .dockgen .projects [name ] = Project (
86+ dockgen = self .dockgen , name = name , ** conf
87+ )
88+ self .dockgen .projects_order .append (name )
89+ continue
90+
91+ for k , v in conf .items ():
92+ match k :
93+ case "apt_deps" :
94+ tgt .apt_deps |= set (v )
95+ case "src_deps" :
96+ tgt .src_deps |= set (v )
0 commit comments