recipetool: create: allow license variable handling to be rerun

If you make adjustments to the source tree (as create_npm.py will be)
then you will need to re-run the license variable handling code at the
end so that we get all of the files that should go into
LIC_FILES_CHKSUM if nothing else. Split out the license variable
handling to a separate function in order to allow this.

(From OE-Core rev: f0d6f4b7e87ea781ac0dffcc8d0310570975811b)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton
2016-09-06 10:06:01 +12:00
committed by Richard Purdie
parent b1c3e44dfb
commit fa90c2f54d

View File

@@ -481,51 +481,8 @@ def create_recipe(args):
# We need a blank line here so that patch_recipe_lines can rewind before the LICENSE comments
lines_before.append('')
licvalues = guess_license(srctree_use)
lic_files_chksum = []
lic_unknown = []
if licvalues:
licenses = []
for licvalue in licvalues:
if not licvalue[0] in licenses:
licenses.append(licvalue[0])
lic_files_chksum.append('file://%s;md5=%s' % (licvalue[1], licvalue[2]))
if licvalue[0] == 'Unknown':
lic_unknown.append(licvalue[1])
lines_before.append('# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is')
lines_before.append('# your responsibility to verify that the values are complete and correct.')
if len(licvalues) > 1:
lines_before.append('#')
lines_before.append('# NOTE: multiple licenses have been detected; if that is correct you should separate')
lines_before.append('# these in the LICENSE value using & if the multiple licenses all apply, or | if there')
lines_before.append('# is a choice between the multiple licenses. If in doubt, check the accompanying')
lines_before.append('# documentation to determine which situation is applicable.')
if lic_unknown:
lines_before.append('#')
lines_before.append('# The following license files were not able to be identified and are')
lines_before.append('# represented as "Unknown" below, you will need to check them yourself:')
for licfile in lic_unknown:
lines_before.append('# %s' % licfile)
lines_before.append('#')
else:
lines_before.append('# Unable to find any files that looked like license statements. Check the accompanying')
lines_before.append('# documentation and source headers and set LICENSE and LIC_FILES_CHKSUM accordingly.')
lines_before.append('#')
lines_before.append('# NOTE: LICENSE is being set to "CLOSED" to allow you to at least start building - if')
lines_before.append('# this is not accurate with respect to the licensing of the software being built (it')
lines_before.append('# will not be in most cases) you must specify the correct value before using this')
lines_before.append('# recipe for anything other than initial testing/development!')
licenses = ['CLOSED']
pkg_license = extravalues.pop('LICENSE', None)
if pkg_license:
if licenses == ['Unknown']:
lines_before.append('# NOTE: The following LICENSE value was determined from the original package metadata')
licenses = [pkg_license]
else:
lines_before.append('# NOTE: Original package metadata indicates license is: %s' % pkg_license)
lines_before.append('LICENSE = "%s"' % ' '.join(licenses))
lines_before.append('LIC_FILES_CHKSUM = "%s"' % ' \\\n '.join(lic_files_chksum))
lines_before.append('')
handled = []
licvalues = handle_license_vars(srctree_use, lines_before, handled, extravalues, tinfoil.config_data)
classes = []
@@ -622,9 +579,6 @@ def create_recipe(args):
handlers = [item[0] for item in handlers]
# Apply the handlers
handled = []
handled.append(('license', licvalues))
if args.binary:
classes.append('bin_package')
handled.append('buildsystem')
@@ -771,6 +725,55 @@ def create_recipe(args):
return 0
def handle_license_vars(srctree, lines_before, handled, extravalues, d):
licvalues = guess_license(srctree, d)
lic_files_chksum = []
lic_unknown = []
if licvalues:
licenses = []
for licvalue in licvalues:
if not licvalue[0] in licenses:
licenses.append(licvalue[0])
lic_files_chksum.append('file://%s;md5=%s' % (licvalue[1], licvalue[2]))
if licvalue[0] == 'Unknown':
lic_unknown.append(licvalue[1])
lines_before.append('# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is')
lines_before.append('# your responsibility to verify that the values are complete and correct.')
if len(licvalues) > 1:
lines_before.append('#')
lines_before.append('# NOTE: multiple licenses have been detected; if that is correct you should separate')
lines_before.append('# these in the LICENSE value using & if the multiple licenses all apply, or | if there')
lines_before.append('# is a choice between the multiple licenses. If in doubt, check the accompanying')
lines_before.append('# documentation to determine which situation is applicable.')
if lic_unknown:
lines_before.append('#')
lines_before.append('# The following license files were not able to be identified and are')
lines_before.append('# represented as "Unknown" below, you will need to check them yourself:')
for licfile in lic_unknown:
lines_before.append('# %s' % licfile)
lines_before.append('#')
else:
lines_before.append('# Unable to find any files that looked like license statements. Check the accompanying')
lines_before.append('# documentation and source headers and set LICENSE and LIC_FILES_CHKSUM accordingly.')
lines_before.append('#')
lines_before.append('# NOTE: LICENSE is being set to "CLOSED" to allow you to at least start building - if')
lines_before.append('# this is not accurate with respect to the licensing of the software being built (it')
lines_before.append('# will not be in most cases) you must specify the correct value before using this')
lines_before.append('# recipe for anything other than initial testing/development!')
licenses = ['CLOSED']
pkg_license = extravalues.pop('LICENSE', None)
if pkg_license:
if licenses == ['Unknown']:
lines_before.append('# NOTE: The following LICENSE value was determined from the original package metadata')
licenses = [pkg_license]
else:
lines_before.append('# NOTE: Original package metadata indicates license is: %s' % pkg_license)
lines_before.append('LICENSE = "%s"' % ' '.join(licenses))
lines_before.append('LIC_FILES_CHKSUM = "%s"' % ' \\\n '.join(lic_files_chksum))
lines_before.append('')
handled.append(('license', licvalues))
return licvalues
def get_license_md5sums(d, static_only=False):
import bb.utils
md5sums = {}
@@ -891,9 +894,9 @@ def crunch_license(licfile):
license = crunched_md5sums.get(md5val, None)
return license, md5val, lictext
def guess_license(srctree):
def guess_license(srctree, d):
import bb
md5sums = get_license_md5sums(tinfoil.config_data)
md5sums = get_license_md5sums(d)
licenses = []
licspecs = ['*LICEN[CS]E*', 'COPYING*', '*[Ll]icense*', 'LEGAL*', '[Ll]egal*', '*GPL*', 'README.lic*', 'COPYRIGHT*', '[Cc]opyright*']