Show project dependency licenses when building in the verbose mode

This commit is contained in:
Ivan Kravets
2022-04-02 16:28:40 +03:00
parent feda42f18f
commit 279fdfc47a
2 changed files with 22 additions and 4 deletions

View File

@ -38,6 +38,7 @@ PlatformIO Core 5
* **Miscellaneous** * **Miscellaneous**
* Show project dependency licenses when building in the verbose mode
* Improved PIO Remote setup on credit-card sized computers (Raspberry Pi, BeagleBon, etc) (`issue #3865 <https://github.com/platformio/platformio-core/issues/3865>`_) * Improved PIO Remote setup on credit-card sized computers (Raspberry Pi, BeagleBon, etc) (`issue #3865 <https://github.com/platformio/platformio-core/issues/3865>`_)
* Better handling of the failed tests using the `Unit Testing <https://docs.platformio.org/en/latest/plus/unit-testing.html>`__ solution. * Better handling of the failed tests using the `Unit Testing <https://docs.platformio.org/en/latest/plus/unit-testing.html>`__ solution.

View File

@ -34,7 +34,10 @@ from platformio import exception, fs, util
from platformio.builder.tools import platformio as piotool from platformio.builder.tools import platformio as piotool
from platformio.clients.http import HTTPClientError, InternetIsOffline from platformio.clients.http import HTTPClientError, InternetIsOffline
from platformio.compat import IS_WINDOWS, hashlib_encode_data, string_types from platformio.compat import IS_WINDOWS, hashlib_encode_data, string_types
from platformio.package.exception import UnknownPackageError from platformio.package.exception import (
MissingPackageManifestError,
UnknownPackageError,
)
from platformio.package.manager.library import LibraryPackageManager from platformio.package.manager.library import LibraryPackageManager
from platformio.package.manifest.parser import ( from platformio.package.manifest.parser import (
ManifestParserError, ManifestParserError,
@ -1061,6 +1064,18 @@ def GetLibBuilders(env): # pylint: disable=too-many-branches
def ConfigureProjectLibBuilder(env): def ConfigureProjectLibBuilder(env):
_pm_storage = {}
def _get_lib_license(pkg):
storage_dir = os.path.dirname(os.path.dirname(pkg.path))
if storage_dir not in _pm_storage:
_pm_storage[storage_dir] = LibraryPackageManager(storage_dir)
try:
return (_pm_storage[storage_dir].load_manifest(pkg) or {}).get("license")
except MissingPackageManifestError:
pass
return None
def _correct_found_libs(lib_builders): def _correct_found_libs(lib_builders):
# build full dependency graph # build full dependency graph
found_lbs = [lb for lb in lib_builders if lb.dependent] found_lbs = [lb for lb in lib_builders if lb.dependent]
@ -1091,10 +1106,12 @@ def ConfigureProjectLibBuilder(env):
nl=False, nl=False,
) )
if int(ARGUMENTS.get("PIOVERBOSE", 0)): if int(ARGUMENTS.get("PIOVERBOSE", 0)):
click.echo(
"(License: %s, " % (_get_lib_license(pkg) or "Unknown"), nl=False
)
if pkg.metadata and pkg.metadata.spec.external: if pkg.metadata and pkg.metadata.spec.external:
click.echo(" [%s]" % pkg.metadata.spec.url, nl=False) click.echo("URI: %s, " % pkg.metadata.spec.url, nl=False)
click.echo(" (", nl=False) click.echo("Path: %s" % lb.path, nl=False)
click.echo(lb.path, nl=False)
click.echo(")", nl=False) click.echo(")", nl=False)
click.echo("") click.echo("")
if lb.depbuilders: if lb.depbuilders: