diff --git a/HISTORY.rst b/HISTORY.rst index 0825752f4c..1451fd11bb 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -64,6 +64,9 @@ PlatformIO 3.0 + Support for the 3rd party manifests (Arduino IDE "library.properties" and ARM mbed "module.json") +* Added support for BBC micro:bit board that is built on the ARM mbed and + Nordic nrf51 platform + (`issue #709 `_) * Print human-readable information when processing environments without ``-v, --verbose`` option (`issue #721 `_) diff --git a/platformio/__init__.py b/platformio/__init__.py index fe95a14d6a..e880489ee4 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -14,7 +14,7 @@ import sys -VERSION = (3, 0, "0a2") +VERSION = (3, 0, "0a3") __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" diff --git a/platformio/builder/tools/piolib.py b/platformio/builder/tools/piolib.py index ad81bdeba5..795f72e644 100644 --- a/platformio/builder/tools/piolib.py +++ b/platformio/builder/tools/piolib.py @@ -24,6 +24,7 @@ from platformio import util from platformio.builder.tools import platformio as piotool +from platformio.managers.lib import LibraryManager class LibBuilderFactory(object): @@ -105,28 +106,8 @@ def version(self): @property def dependencies(self): - deps = self._manifest.get("dependencies") - if not deps: - return deps - items = [] - if isinstance(deps, dict): - if "name" in deps: - items.append(deps) - else: - for name, version in deps.items(): - items.append({"name": name, "version": version}) - elif isinstance(deps, list): - items = [d for d in deps if "name" in d] - for item in items: - for k in ("frameworks", "platforms"): - if k not in item or isinstance(k, list): - continue - if item[k] == "*": - del item[k] - elif isinstance(item[k], basestring): - item[k] = [i.strip() for i in item[k].split(",") - if i.strip()] - return items + return LibraryManager.normalize_dependencies( + self._manifest.get("dependencies", [])) @property def src_filter(self): diff --git a/platformio/managers/lib.py b/platformio/managers/lib.py index a34a196b4a..ce1543a880 100644 --- a/platformio/managers/lib.py +++ b/platformio/managers/lib.py @@ -33,6 +33,30 @@ def __init__(self, package_dir=None): def manifest_name(self): return ".library.json" + @staticmethod + def normalize_dependencies(dependencies): + if not dependencies: + return [] + items = [] + if isinstance(dependencies, dict): + if "name" in dependencies: + items.append(dependencies) + else: + for name, version in dependencies.items(): + items.append({"name": name, "version": version}) + elif isinstance(dependencies, list): + items = [d for d in dependencies if "name" in d] + for item in items: + for k in ("frameworks", "platforms"): + if k not in item or isinstance(k, list): + continue + if item[k] == "*": + del item[k] + elif isinstance(item[k], basestring): + item[k] = [i.strip() for i in item[k].split(",") + if i.strip()] + return items + @staticmethod def max_satisfying_repo_version(versions, requirements=None): @@ -132,10 +156,7 @@ def install(self, name, requirements=None, quiet=False, if not quiet: click.secho("Installing dependencies", fg="yellow") - _dependencies = manifest['dependencies'] - if not isinstance(_dependencies, list): - _dependencies = [_dependencies] - for filters in _dependencies: + for filters in self.normalize_dependencies(manifest['dependencies']): assert "name" in filters if any([s in filters.get("version", "") for s in ("\\", "/")]): self.install("{name}={version}".format(**filters))