diff --git a/platformio/__init__.py b/platformio/__init__.py index 2dbb6b98..8eb55718 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -1,7 +1,7 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -VERSION = (2, 2, "1a0") +VERSION = (2, 2, "1a1") __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" diff --git a/platformio/commands/run.py b/platformio/commands/run.py index 6eade5f9..3925ead4 100644 --- a/platformio/commands/run.py +++ b/platformio/commands/run.py @@ -163,7 +163,7 @@ class EnvironmentProcessor(object): telemetry.on_run_environment(self.options, build_targets) # install platform and libs dependencies - _autoinstall_platform(self.cmd_ctx, platform) + _autoinstall_platform(self.cmd_ctx, platform, build_targets) if "lib_install" in self.options: _autoinstall_libs(self.cmd_ctx, self.options['lib_install']) @@ -171,14 +171,34 @@ class EnvironmentProcessor(object): return p.run(build_vars, build_targets, self.verbose_level) -def _autoinstall_platform(ctx, platform): +def _autoinstall_platform(ctx, platform, targets): installed_platforms = PlatformFactory.get_platforms( installed=True).keys() - if (platform not in installed_platforms and ( - not app.get_setting("enable_prompts") or + cmd_options = {} + p = PlatformFactory.newPlatform(platform) + + if "uploadlazy" in targets: + upload_tools = p.pkg_aliases_to_names(["uploader"]) + + # platform without uploaders + if not upload_tools and platform in installed_platforms: + return + # uploaders are already installed + if set(upload_tools) <= set(p.get_installed_packages()): + return + + cmd_options['skip_default_package'] = True + if upload_tools: + cmd_options['with_package'] = ["uploader"] + + elif (set(p.pkg_aliases_to_names(["toolchain"])) <= + set(p.get_installed_packages())): + return + + if (not app.get_setting("enable_prompts") or click.confirm("The platform '%s' has not been installed yet. " - "Would you like to install it now?" % platform))): - ctx.invoke(cmd_platforms_install, platforms=[platform]) + "Would you like to install it now?" % platform)): + ctx.invoke(cmd_platforms_install, platforms=[platform], **cmd_options) def _autoinstall_libs(ctx, libids_list):