Configure platform instance with project packages using "configure_project_packages" API

This commit is contained in:
Ivan Kravets
2022-02-12 21:59:27 +02:00
parent c37fbda7a8
commit 98603dad66
4 changed files with 17 additions and 19 deletions

View File

@@ -33,12 +33,8 @@ from platformio.project.config import ProjectOptions
@util.memoized() @util.memoized()
def PioPlatform(env): def PioPlatform(env):
variables = env.GetProjectOptions(as_dict=True)
if "framework" in variables:
# support PIO Core 3.0 dev/platforms
variables["pioframework"] = variables["framework"]
p = PlatformFactory.new(os.path.dirname(env["PLATFORM_MANIFEST"])) p = PlatformFactory.new(os.path.dirname(env["PLATFORM_MANIFEST"]))
p.configure_default_packages(variables, COMMAND_LINE_TARGETS) p.configure_project_packages(env["PIOENV"], COMMAND_LINE_TARGETS)
return p return p

View File

@@ -65,7 +65,7 @@ class PlatformPackagesMixin(object):
result.append(item) result.append(item)
return result return result
def autoinstall_runtime_packages(self): def autoinstall_required_packages(self):
for name, options in self.packages.items(): for name, options in self.packages.items():
if options.get("optional", False): if options.get("optional", False):
continue continue

View File

@@ -52,14 +52,10 @@ class PlatformRunMixin(object):
self.ensure_engine_compatible() self.ensure_engine_compatible()
options = self.config.items(env=variables["pioenv"], as_dict=True) self.configure_project_packages(variables["pioenv"], targets)
if "framework" in options: self.autoinstall_required_packages()
# support PIO Core 3.0 dev/platforms
options["pioframework"] = options["framework"]
self.configure_default_packages(options, targets)
self.autoinstall_runtime_packages()
self._report_non_sensitive_data(options, targets) self._report_non_sensitive_data(variables["pioenv"], targets)
self.silent = silent self.silent = silent
self.verbose = verbose or app.get_setting("force_verbose") self.verbose = verbose or app.get_setting("force_verbose")
@@ -79,14 +75,14 @@ class PlatformRunMixin(object):
return result return result
def _report_non_sensitive_data(self, options, targets): def _report_non_sensitive_data(self, env, targets):
topts = options.copy() options = self.config.items(env=env, as_dict=True)
topts["platform_packages"] = [ options["platform_packages"] = [
dict(name=item["name"], version=item["version"]) dict(name=item["name"], version=item["version"])
for item in self.dump_used_packages() for item in self.dump_used_packages()
] ]
topts["platform"] = {"name": self.name, "version": self.version} options["platform"] = {"name": self.name, "version": self.version}
telemetry.send_run_environment(topts, targets) telemetry.send_run_environment(options, targets)
def _run_scons(self, variables, targets, jobs): def _run_scons(self, variables, targets, jobs):
scons_dir = get_core_package_dir("tool-scons") scons_dir = get_core_package_dir("tool-scons")

View File

@@ -178,10 +178,16 @@ class PlatformBase( # pylint: disable=too-many-instance-attributes,too-many-pub
def get_package_type(self, name): def get_package_type(self, name):
return self.packages[name].get("type") return self.packages[name].get("type")
def configure_default_packages(self, options, targets): def configure_project_packages(self, env, targets=None):
options = self.config.items(env=env, as_dict=True)
if "framework" in options:
# support PIO Core 3.0 dev/platforms
options["pioframework"] = options["framework"]
# override user custom packages # override user custom packages
self._custom_packages = options.get("platform_packages") self._custom_packages = options.get("platform_packages")
self.configure_default_packages(options, targets)
def configure_default_packages(self, options, targets):
# enable used frameworks # enable used frameworks
for framework in options.get("framework", []): for framework in options.get("framework", []):
if not self.frameworks: if not self.frameworks: