diff --git a/platformio/commands/lib/helpers.py b/platformio/commands/lib/helpers.py index c720b10d..9b99cd6c 100644 --- a/platformio/commands/lib/helpers.py +++ b/platformio/commands/lib/helpers.py @@ -14,6 +14,7 @@ import os +from platformio import util from platformio.compat import ci_strings_are_equal from platformio.package.manager.platform import PlatformPackageManager from platformio.package.meta import PackageSpec @@ -22,6 +23,7 @@ from platformio.project.config import ProjectConfig from platformio.project.exception import InvalidProjectConfError +@util.memoized(expire="60s") def get_builtin_libs(storage_names=None): # pylint: disable=import-outside-toplevel from platformio.package.manager.library import LibraryPackageManager @@ -45,8 +47,8 @@ def get_builtin_libs(storage_names=None): return items -def is_builtin_lib(name, storages=None): - for storage in storages or get_builtin_libs(): +def is_builtin_lib(name): + for storage in get_builtin_libs(): for lib in storage["items"]: if lib.get("name") == name: return True diff --git a/platformio/package/manager/library.py b/platformio/package/manager/library.py index 9f670a29..2be81196 100644 --- a/platformio/package/manager/library.py +++ b/platformio/package/manager/library.py @@ -15,6 +15,7 @@ import json import os +from platformio.commands.lib.helpers import is_builtin_lib from platformio.package.exception import MissingPackageManifestError from platformio.package.manager.base import BasePackageManager from platformio.package.meta import PackageSpec, PackageType @@ -77,3 +78,13 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc if fname.endswith((".c", ".cpp", ".h", ".hpp", ".S")): return root return path + + def install_dependency(self, dependency): + spec = self.dependency_to_spec(dependency) + # skip built-in dependencies + not_builtin_conds = [spec.external, spec.owner] + if not any(not_builtin_conds): + not_builtin_conds.append(not is_builtin_lib(spec.name)) + if any(not_builtin_conds): + return super(LibraryPackageManager, self).install_dependency(dependency) + return None