diff --git a/platformio/commands/lib.py b/platformio/commands/lib.py index 43aa962b..7b35a1f5 100644 --- a/platformio/commands/lib.py +++ b/platformio/commands/lib.py @@ -244,14 +244,10 @@ def lib_list(lm, json_output): print_lib_item(item) -@cli.command("builtin", short_help="List built-in libraries") -@click.option("--storage", multiple=True) -@click.option("--json-output", is_flag=True) -@click.pass_obj -def lib_builtin(lm, storage, json_output): +@util.memoized +def get_builtin_libs(storage_names=None): items = [] - storage_names = storage or [] - del storage + storage_names = storage_names or [] pm = PlatformManager() for manifest in pm.get_installed(): p = PlatformFactory.newPlatform( @@ -261,7 +257,14 @@ def lib_builtin(lm, storage, json_output): continue lm = LibraryManager(storage['path']) items.append(dict(name=storage['name'], items=lm.get_installed())) + return items + +@cli.command("builtin", short_help="List built-in libraries") +@click.option("--storage", multiple=True) +@click.option("--json-output", is_flag=True) +def lib_builtin(storage, json_output): + items = get_builtin_libs(storage) if json_output: return click.echo(json.dumps(items)) diff --git a/platformio/commands/run.py b/platformio/commands/run.py index f270b437..28196a90 100644 --- a/platformio/commands/run.py +++ b/platformio/commands/run.py @@ -22,6 +22,7 @@ import click from platformio import __version__, exception, telemetry, util from platformio.commands.lib import lib_install as cmd_lib_install +from platformio.commands.lib import get_builtin_libs from platformio.commands.platform import \ platform_install as cmd_platform_install from platformio.managers.lib import LibraryManager @@ -279,7 +280,15 @@ def _autoinstall_libdeps(ctx, libraries, verbose=False): try: ctx.invoke(cmd_lib_install, libraries=[lib], silent=not verbose) except exception.LibNotFound as e: - click.secho("Warning! %s" % e, fg="yellow") + if not _is_builtin_lib(lib): + click.secho("Warning! %s" % e, fg="yellow") + + +def _is_builtin_lib(lib_name): + for storage in get_builtin_libs(): + if any([l.get("name") == lib_name for l in storage['items']]): + return True + return False def _clean_pioenvs_dir(pioenvs_dir): diff --git a/platformio/managers/platform.py b/platformio/managers/platform.py index 22838ac6..a8f04678 100644 --- a/platformio/managers/platform.py +++ b/platformio/managers/platform.py @@ -544,15 +544,26 @@ class PlatformBase(PlatformPackagesMixin, PlatformRunMixin): def get_lib_storages(self): storages = [] - for _, opts in (self.frameworks or {}).items(): + for opts in (self.frameworks or {}).values(): if "package" not in opts: continue pkg_dir = self.get_package_dir(opts['package']) if not pkg_dir or not isdir(join(pkg_dir, "libraries")): continue - storages.append( - dict( - name=opts['package'], path=join(pkg_dir, "libraries"))) + libs_dir = join(pkg_dir, "libraries") + storages.append({"name": opts['package'], "path": libs_dir}) + libcores_dir = join(libs_dir, "__cores__") + if not isdir(libcores_dir): + continue + for item in os.listdir(libcores_dir): + libcore_dir = join(libcores_dir, item) + if not isdir(libcore_dir): + continue + storages.append({ + "name": "%s-%s" % (opts['package'], item), + "path": libcore_dir + }) + return storages