mirror of
https://git.yoctoproject.org/poky
synced 2026-05-31 00:39:46 +00:00
recipetool: create: split guess_license function
The npm recipetool handler redefines the license code the could be unified. In order to do this refactoring, extract the bits we'll need into separate functions. guess_license() is renamed to find_licenses() and is split into find_license_files() and match_licenses(). (From OE-Core rev: f1ec28feaea8ea6a2df894dd4ddba561c8a04ed2) Signed-off-by: Enguerrand de Ribaucourt <enguerrand.de-ribaucourt@savoirfairelinux.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
01d17cd5d4
commit
69bf37a3dd
@@ -39,7 +39,7 @@ python do_populate_lic() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PSEUDO_IGNORE_PATHS .= ",${@','.join(((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' + (d.getVar('LICENSE_PATH') or '') + ' ' + d.getVar('COREBASE') + '/meta/COPYING').split())}"
|
PSEUDO_IGNORE_PATHS .= ",${@','.join(((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' + (d.getVar('LICENSE_PATH') or '') + ' ' + d.getVar('COREBASE') + '/meta/COPYING').split())}"
|
||||||
# it would be better to copy them in do_install:append, but find_license_filesa is python
|
# it would be better to copy them in do_install:append, but find_license_files is python
|
||||||
python perform_packagecopy:prepend () {
|
python perform_packagecopy:prepend () {
|
||||||
enabled = oe.data.typed_value('LICENSE_CREATE_PACKAGE', d)
|
enabled = oe.data.typed_value('LICENSE_CREATE_PACKAGE', d)
|
||||||
if d.getVar('CLASSOVERRIDE') == 'class-target' and enabled:
|
if d.getVar('CLASSOVERRIDE') == 'class-target' and enabled:
|
||||||
@@ -149,14 +149,14 @@ def find_license_files(d):
|
|||||||
# and "with exceptions" being *
|
# and "with exceptions" being *
|
||||||
# we'll just strip out the modifier and put
|
# we'll just strip out the modifier and put
|
||||||
# the base license.
|
# the base license.
|
||||||
find_license(node.s.replace("+", "").replace("*", ""))
|
find_licenses(node.s.replace("+", "").replace("*", ""))
|
||||||
self.generic_visit(node)
|
self.generic_visit(node)
|
||||||
|
|
||||||
def visit_Constant(self, node):
|
def visit_Constant(self, node):
|
||||||
find_license(node.value.replace("+", "").replace("*", ""))
|
find_licenses(node.value.replace("+", "").replace("*", ""))
|
||||||
self.generic_visit(node)
|
self.generic_visit(node)
|
||||||
|
|
||||||
def find_license(license_type):
|
def find_licenses(license_type):
|
||||||
try:
|
try:
|
||||||
bb.utils.mkdirhier(gen_lic_dest)
|
bb.utils.mkdirhier(gen_lic_dest)
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -1068,6 +1068,7 @@ class RecipetoolTests(RecipetoolBase):
|
|||||||
|
|
||||||
d = DataConnectorCopy
|
d = DataConnectorCopy
|
||||||
d.getVar = Mock(return_value=commonlicdir)
|
d.getVar = Mock(return_value=commonlicdir)
|
||||||
|
d.expand = Mock(side_effect=lambda x: x)
|
||||||
|
|
||||||
srctree = tempfile.mkdtemp(prefix='recipetoolqa')
|
srctree = tempfile.mkdtemp(prefix='recipetoolqa')
|
||||||
self.track_for_cleanup(srctree)
|
self.track_for_cleanup(srctree)
|
||||||
|
|||||||
@@ -960,7 +960,7 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d):
|
|||||||
# Someone else has already handled the license vars, just return their value
|
# Someone else has already handled the license vars, just return their value
|
||||||
return lichandled[0][1]
|
return lichandled[0][1]
|
||||||
|
|
||||||
licvalues = guess_license(srctree, d)
|
licvalues = find_licenses(srctree, d)
|
||||||
licenses = []
|
licenses = []
|
||||||
lic_files_chksum = []
|
lic_files_chksum = []
|
||||||
lic_unknown = []
|
lic_unknown = []
|
||||||
@@ -1216,13 +1216,7 @@ def crunch_license(licfile):
|
|||||||
lictext = ''
|
lictext = ''
|
||||||
return md5val, lictext
|
return md5val, lictext
|
||||||
|
|
||||||
def guess_license(srctree, d):
|
def find_license_files(srctree):
|
||||||
import bb
|
|
||||||
md5sums = get_license_md5sums(d)
|
|
||||||
|
|
||||||
crunched_md5sums = crunch_known_licenses(d)
|
|
||||||
|
|
||||||
licenses = []
|
|
||||||
licspecs = ['*LICEN[CS]E*', 'COPYING*', '*[Ll]icense*', 'LEGAL*', '[Ll]egal*', '*GPL*', 'README.lic*', 'COPYRIGHT*', '[Cc]opyright*', 'e[dp]l-v10']
|
licspecs = ['*LICEN[CS]E*', 'COPYING*', '*[Ll]icense*', 'LEGAL*', '[Ll]egal*', '*GPL*', 'README.lic*', 'COPYRIGHT*', '[Cc]opyright*', 'e[dp]l-v10']
|
||||||
skip_extensions = (".html", ".js", ".json", ".svg", ".ts", ".go")
|
skip_extensions = (".html", ".js", ".json", ".svg", ".ts", ".go")
|
||||||
licfiles = []
|
licfiles = []
|
||||||
@@ -1235,11 +1229,22 @@ def guess_license(srctree, d):
|
|||||||
fullpath = os.path.join(root, fn)
|
fullpath = os.path.join(root, fn)
|
||||||
if not fullpath in licfiles:
|
if not fullpath in licfiles:
|
||||||
licfiles.append(fullpath)
|
licfiles.append(fullpath)
|
||||||
|
|
||||||
|
return licfiles
|
||||||
|
|
||||||
|
def match_licenses(licfiles, srctree, d):
|
||||||
|
import bb
|
||||||
|
md5sums = get_license_md5sums(d)
|
||||||
|
|
||||||
|
crunched_md5sums = crunch_known_licenses(d)
|
||||||
|
|
||||||
|
licenses = []
|
||||||
for licfile in sorted(licfiles):
|
for licfile in sorted(licfiles):
|
||||||
md5value = bb.utils.md5_file(licfile)
|
resolved_licfile = d.expand(licfile)
|
||||||
|
md5value = bb.utils.md5_file(resolved_licfile)
|
||||||
license = md5sums.get(md5value, None)
|
license = md5sums.get(md5value, None)
|
||||||
if not license:
|
if not license:
|
||||||
crunched_md5, lictext = crunch_license(licfile)
|
crunched_md5, lictext = crunch_license(resolved_licfile)
|
||||||
license = crunched_md5sums.get(crunched_md5, None)
|
license = crunched_md5sums.get(crunched_md5, None)
|
||||||
if lictext and not license:
|
if lictext and not license:
|
||||||
license = 'Unknown'
|
license = 'Unknown'
|
||||||
@@ -1249,13 +1254,19 @@ def guess_license(srctree, d):
|
|||||||
if license:
|
if license:
|
||||||
licenses.append((license, os.path.relpath(licfile, srctree), md5value))
|
licenses.append((license, os.path.relpath(licfile, srctree), md5value))
|
||||||
|
|
||||||
|
return licenses
|
||||||
|
|
||||||
|
def find_licenses(srctree, d):
|
||||||
|
licfiles = find_license_files(srctree)
|
||||||
|
licenses = match_licenses(licfiles, srctree, d)
|
||||||
|
|
||||||
# FIXME should we grab at least one source file with a license header and add that too?
|
# FIXME should we grab at least one source file with a license header and add that too?
|
||||||
|
|
||||||
return licenses
|
return licenses
|
||||||
|
|
||||||
def split_pkg_licenses(licvalues, packages, outlines, fallback_licenses=None, pn='${PN}'):
|
def split_pkg_licenses(licvalues, packages, outlines, fallback_licenses=None, pn='${PN}'):
|
||||||
"""
|
"""
|
||||||
Given a list of (license, path, md5sum) as returned by guess_license(),
|
Given a list of (license, path, md5sum) as returned by match_licenses(),
|
||||||
a dict of package name to path mappings, write out a set of
|
a dict of package name to path mappings, write out a set of
|
||||||
package-specific LICENSE values.
|
package-specific LICENSE values.
|
||||||
"""
|
"""
|
||||||
@@ -1418,4 +1429,3 @@ def register_commands(subparsers):
|
|||||||
parser_create.add_argument('--devtool', action="store_true", help=argparse.SUPPRESS)
|
parser_create.add_argument('--devtool', action="store_true", help=argparse.SUPPRESS)
|
||||||
parser_create.add_argument('--mirrors', action="store_true", help='Enable PREMIRRORS and MIRRORS for source tree fetching (disabled by default).')
|
parser_create.add_argument('--mirrors', action="store_true", help='Enable PREMIRRORS and MIRRORS for source tree fetching (disabled by default).')
|
||||||
parser_create.set_defaults(func=create_recipe)
|
parser_create.set_defaults(func=create_recipe)
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from collections import namedtuple
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
from html.parser import HTMLParser
|
from html.parser import HTMLParser
|
||||||
from recipetool.create import RecipeHandler, handle_license_vars
|
from recipetool.create import RecipeHandler, handle_license_vars
|
||||||
from recipetool.create import guess_license, tidy_licenses, fixup_license
|
from recipetool.create import find_licenses, tidy_licenses, fixup_license
|
||||||
from recipetool.create import determine_from_url
|
from recipetool.create import determine_from_url
|
||||||
from urllib.error import URLError, HTTPError
|
from urllib.error import URLError, HTTPError
|
||||||
|
|
||||||
@@ -624,7 +624,7 @@ class GoRecipeHandler(RecipeHandler):
|
|||||||
|
|
||||||
licenses = []
|
licenses = []
|
||||||
lic_files_chksum = []
|
lic_files_chksum = []
|
||||||
licvalues = guess_license(tmp_vendor_dir, d)
|
licvalues = find_licenses(tmp_vendor_dir, d)
|
||||||
shutil.rmtree(tmp_vendor_dir)
|
shutil.rmtree(tmp_vendor_dir)
|
||||||
|
|
||||||
if licvalues:
|
if licvalues:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from bb.fetch2.npm import npm_package
|
|||||||
from bb.fetch2.npmsw import foreach_dependencies
|
from bb.fetch2.npmsw import foreach_dependencies
|
||||||
from recipetool.create import RecipeHandler
|
from recipetool.create import RecipeHandler
|
||||||
from recipetool.create import get_license_md5sums
|
from recipetool.create import get_license_md5sums
|
||||||
from recipetool.create import guess_license
|
from recipetool.create import find_licenses
|
||||||
from recipetool.create import split_pkg_licenses
|
from recipetool.create import split_pkg_licenses
|
||||||
logger = logging.getLogger('recipetool')
|
logger = logging.getLogger('recipetool')
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ class NpmRecipeHandler(RecipeHandler):
|
|||||||
return (licenses, chksums, fallback_licenses)
|
return (licenses, chksums, fallback_licenses)
|
||||||
|
|
||||||
(licenses, extravalues["LIC_FILES_CHKSUM"], fallback_licenses) = _guess_odd_license(licfiles)
|
(licenses, extravalues["LIC_FILES_CHKSUM"], fallback_licenses) = _guess_odd_license(licfiles)
|
||||||
split_pkg_licenses([*licenses, *guess_license(srctree, d)], packages, lines_after, fallback_licenses)
|
split_pkg_licenses([*licenses, *find_licenses(srctree, d)], packages, lines_after, fallback_licenses)
|
||||||
|
|
||||||
classes.append("npm")
|
classes.append("npm")
|
||||||
handled.append("buildsystem")
|
handled.append("buildsystem")
|
||||||
|
|||||||
Reference in New Issue
Block a user