def process_dependencies(self): # pylint: disable=too-many-branches uris = self.env.get("LIB_DEPS", []) if not uris: return storage_dirs = [] for lb in self.env.GetLibBuilders(): if dirname(lb.path) not in storage_dirs: storage_dirs.append(dirname(lb.path)) for uri in uris: found = False for storage_dir in storage_dirs: if found: break lm = LibraryManager(storage_dir) pkg_dir = lm.get_package_dir(*lm.parse_pkg_uri(uri)) if not pkg_dir: continue for lb in self.env.GetLibBuilders(): if lb.path != pkg_dir: continue if lb not in self.depbuilders: self.depend_recursive(lb) found = True break if not found: for lb in self.env.GetLibBuilders(): if lb.name != uri: continue if lb not in self.depbuilders: self.depend_recursive(lb) break
def process_dependencies(self): # pylint: disable=too-many-branches for uri in self.dependencies: found = False for storage_dir in self.env.GetLibSourceDirs(): if found: break lm = LibraryManager(storage_dir) lib_dir = lm.get_package_dir(*lm.parse_pkg_uri(uri)) if not lib_dir: continue for lb in self.env.GetLibBuilders(): if lib_dir not in lb: continue if lb not in self.depbuilders: self.depend_recursive(lb) found = True break if found: continue # look for built-in libraries by a name # which don't have package manifest for lb in self.env.GetLibBuilders(): if lb.name != uri: continue if lb not in self.depbuilders: self.depend_recursive(lb) found = True break
def install_dependencies(self): def _is_builtin(uri): for lb in self.env.GetLibBuilders(): if lb.name == uri: return True return False not_found_uri = [] for uri in self.dependencies: # check if built-in library if _is_builtin(uri): continue found = False for storage_dir in self.env.GetLibSourceDirs(): lm = LibraryManager(storage_dir) if lm.get_package_dir(*lm.parse_pkg_uri(uri)): found = True break if not found: not_found_uri.append(uri) did_install = False lm = LibraryManager( self.env.subst(join("$PROJECT_LIBDEPS_DIR", "$PIOENV"))) for uri in not_found_uri: try: lm.install(uri) did_install = True except (exception.LibNotFound, exception.InternetIsOffline) as e: click.secho("Warning! %s" % e, fg="yellow") # reset cache if did_install: DefaultEnvironment().Replace(__PIO_LIB_BUILDERS=None)
def library_manager_libdeps(lib_deps, storage=None): from platformio.managers.lib import LibraryManager from platformio.project.helpers import get_project_global_lib_dir if not storage: manager = LibraryManager(get_project_global_lib_dir()) else: manager = LibraryManager(storage) for lib in lib_deps: if manager.get_package_dir(*manager.parse_pkg_uri(lib)): continue log("installing: {}".format(lib)) manager.install(lib)
def lib_update(ctx, libraries, only_check, dry_run, json_output): storage_dirs = ctx.meta[CTX_META_STORAGE_DIRS_KEY] only_check = dry_run or only_check json_result = {} for storage_dir in storage_dirs: if not json_output: print_storage_header(storage_dirs, storage_dir) lm = LibraryManager(storage_dir) _libraries = libraries if not _libraries: _libraries = [ manifest['__pkg_dir'] for manifest in lm.get_installed() ] if only_check and json_output: result = [] for library in _libraries: pkg_dir = library if isdir(library) else None requirements = None url = None if not pkg_dir: name, requirements, url = lm.parse_pkg_uri(library) pkg_dir = lm.get_package_dir(name, requirements, url) if not pkg_dir: continue latest = lm.outdated(pkg_dir, requirements) if not latest: continue manifest = lm.load_manifest(pkg_dir) manifest['versionLatest'] = latest result.append(manifest) json_result[storage_dir] = result else: for library in _libraries: lm.update(library, only_check=only_check) if json_output: return click.echo( dump_json_to_unicode(json_result[storage_dirs[0]] if len(storage_dirs) == 1 else json_result)) return True