This commit is contained in:
Willy-JL
2023-09-08 04:11:19 +02:00
36 changed files with 414 additions and 125 deletions
+46 -3
View File
@@ -188,8 +188,19 @@ class AppManager:
raise FlipperManifestException(f"Duplicate app declaration: {app.appid}")
self.known_apps[app.appid] = app
def filter_apps(self, applist: List[str], hw_target: str):
return AppBuildset(self, applist, hw_target)
def filter_apps(
self,
*,
applist: List[str],
ext_applist: List[str],
hw_target: str,
):
return AppBuildset(
self,
hw_target=hw_target,
appnames=applist,
extra_ext_appnames=ext_applist,
)
class AppBuilderException(Exception):
@@ -206,6 +217,12 @@ class AppBuildset:
FlipperAppType.SETTINGS,
FlipperAppType.STARTUP,
)
EXTERNAL_APP_TYPES = (
FlipperAppType.EXTERNAL,
FlipperAppType.MENUEXTERNAL,
FlipperAppType.PLUGIN,
FlipperAppType.DEBUG,
)
@staticmethod
def print_writer(message):
@@ -214,16 +231,21 @@ class AppBuildset:
def __init__(
self,
appmgr: AppManager,
appnames: List[str],
hw_target: str,
appnames: List[str],
*,
extra_ext_appnames: List[str],
message_writer: Callable | None = None,
):
self.appmgr = appmgr
self.appnames = set(appnames)
self.incompatible_extapps, self.extapps = [], []
self._extra_ext_appnames = extra_ext_appnames
self._orig_appnames = appnames
self.hw_target = hw_target
self._writer = message_writer if message_writer else self.print_writer
self._process_deps()
self._process_ext_apps()
self._check_conflicts()
self._check_unsatisfied() # unneeded?
self._check_target_match()
@@ -267,6 +289,27 @@ class AppBuildset:
break
self.appnames.update(provided)
def _process_ext_apps(self):
extapps = [
app
for apptype in self.EXTERNAL_APP_TYPES
for app in self.get_apps_of_type(apptype, True)
]
extapps.extend(map(self.appmgr.get, self._extra_ext_appnames))
for app in extapps:
(
self.extapps
if app.supports_hardware_target(self.hw_target)
else self.incompatible_extapps
).append(app)
def get_ext_apps(self):
return self.extapps
def get_incompatible_ext_apps(self):
return self.incompatible_extapps
def _check_conflicts(self):
conflicts = []
for app in self.appnames:
+15
View File
@@ -255,3 +255,18 @@ class SdkCache:
self.sync_sets(self.sdk.headers, api.headers, False)
self.sync_sets(self.sdk.functions, api.functions)
self.sync_sets(self.sdk.variables, api.variables)
class LazySdkVersionLoader:
def __init__(self, sdk_path: str):
self.sdk_path = sdk_path
self._version = None
@property
def version(self) -> SdkVersion:
if self._version is None:
self._version = SdkCache(self.sdk_path, load_version_only=True).version
return self._version
def __str__(self) -> str:
return str(self.version)