mirror of
https://git.yoctoproject.org/poky
synced 2026-09-13 18:49:33 +02:00
recipetool/create_npm: handle the licenses of the dependencies
As usual the 'LICENSE' and the 'LIC_FILES_CHKSUM' values reflects all
the license files discovered in the source tree (including the
dependencies).
For npm recipes the 'LIC_FILES_CHKSUM' value contains also the status of
the 'package.json' file of every packages as it contains license
informations.
Finally each package has a separate 'LICENSE_${PN}-package-name' value
which describes its license.
(From OE-Core rev: 9a70d4996c84b277f423eda5aac4acbe344599f4)
Signed-off-by: Jean-Marie LEMETAYER <jean-marie.lemetayer@savoirfairelinux.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
6fd9cebc98
commit
cfa5544005
@@ -12,7 +12,10 @@ import sys
|
|||||||
import tempfile
|
import tempfile
|
||||||
import bb
|
import bb
|
||||||
from bb.fetch2.npm import NpmEnvironment
|
from bb.fetch2.npm import NpmEnvironment
|
||||||
|
from bb.fetch2.npmsw import foreach_dependencies
|
||||||
from recipetool.create import RecipeHandler
|
from recipetool.create import RecipeHandler
|
||||||
|
from recipetool.create import guess_license
|
||||||
|
from recipetool.create import split_pkg_licenses
|
||||||
|
|
||||||
TINFOIL = None
|
TINFOIL = None
|
||||||
|
|
||||||
@@ -110,6 +113,36 @@ class NpmRecipeHandler(RecipeHandler):
|
|||||||
|
|
||||||
return os.path.join(srctree, "npm-shrinkwrap.json")
|
return os.path.join(srctree, "npm-shrinkwrap.json")
|
||||||
|
|
||||||
|
def _handle_licenses(self, srctree, shrinkwrap_file, dev):
|
||||||
|
"""Return the extra license files and the list of packages"""
|
||||||
|
licfiles = []
|
||||||
|
packages = {}
|
||||||
|
|
||||||
|
def _licfiles_append(licfile):
|
||||||
|
"""Append 'licfile' to the license files list"""
|
||||||
|
licfilepath = os.path.join(srctree, licfile)
|
||||||
|
licmd5 = bb.utils.md5_file(licfilepath)
|
||||||
|
licfiles.append("file://%s;md5=%s" % (licfile, licmd5))
|
||||||
|
|
||||||
|
# Handle the parent package
|
||||||
|
_licfiles_append("package.json")
|
||||||
|
packages["${PN}"] = ""
|
||||||
|
|
||||||
|
# Handle the dependencies
|
||||||
|
def _handle_dependency(name, params, deptree):
|
||||||
|
suffix = "-".join([self._npm_name(dep) for dep in deptree])
|
||||||
|
destdirs = [os.path.join("node_modules", dep) for dep in deptree]
|
||||||
|
destdir = os.path.join(*destdirs)
|
||||||
|
_licfiles_append(os.path.join(destdir, "package.json"))
|
||||||
|
packages["${PN}-" + suffix] = destdir
|
||||||
|
|
||||||
|
with open(shrinkwrap_file, "r") as f:
|
||||||
|
shrinkwrap = json.load(f)
|
||||||
|
|
||||||
|
foreach_dependencies(shrinkwrap, _handle_dependency, dev)
|
||||||
|
|
||||||
|
return licfiles, packages
|
||||||
|
|
||||||
def process(self, srctree, classes, lines_before, lines_after, handled, extravalues):
|
def process(self, srctree, classes, lines_before, lines_after, handled, extravalues):
|
||||||
"""Handle the npm recipe creation"""
|
"""Handle the npm recipe creation"""
|
||||||
|
|
||||||
@@ -199,6 +232,19 @@ class NpmRecipeHandler(RecipeHandler):
|
|||||||
(_, newlines) = bb.utils.edit_metadata(lines_before, ["SRC_URI"], _handle_srcuri)
|
(_, newlines) = bb.utils.edit_metadata(lines_before, ["SRC_URI"], _handle_srcuri)
|
||||||
lines_before[:] = [line.rstrip('\n') for line in newlines]
|
lines_before[:] = [line.rstrip('\n') for line in newlines]
|
||||||
|
|
||||||
|
# In order to generate correct licence checksums in the recipe the
|
||||||
|
# dependencies have to be fetched again using the npmsw url
|
||||||
|
bb.note("Fetching npm dependencies ...")
|
||||||
|
bb.utils.remove(os.path.join(srctree, "node_modules"), recurse=True)
|
||||||
|
fetcher = bb.fetch2.Fetch([url_local], d)
|
||||||
|
fetcher.download()
|
||||||
|
fetcher.unpack(srctree)
|
||||||
|
|
||||||
|
bb.note("Handling licences ...")
|
||||||
|
(licfiles, packages) = self._handle_licenses(srctree, shrinkwrap_file, dev)
|
||||||
|
extravalues["LIC_FILES_CHKSUM"] = licfiles
|
||||||
|
split_pkg_licenses(guess_license(srctree, d), packages, lines_after, [])
|
||||||
|
|
||||||
classes.append("npm")
|
classes.append("npm")
|
||||||
handled.append("buildsystem")
|
handled.append("buildsystem")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user