diff options
author | Robert Yang <liezhi.yang@windriver.com> | 2014-01-13 19:06:00 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-03-21 17:01:31 +0000 |
commit | 578830fe2ff279ea620916ea711b80dc1b29a275 (patch) | |
tree | 7fb70ff469332d2946dcc1af9950dbc066836393 | |
parent | f9ba047afb8780c8bd7cb1ba45470d30abf92e92 (diff) | |
download | openembedded-core-578830fe2ff279ea620916ea711b80dc1b29a275.tar.gz openembedded-core-578830fe2ff279ea620916ea711b80dc1b29a275.tar.bz2 openembedded-core-578830fe2ff279ea620916ea711b80dc1b29a275.zip |
archiver.bbclass: move a few code to copyleft_compliance.bbclass
Move the code which is only used by copyleft_compliance.bbclass from
archiver.bbclassc, and remove the "inherit archiver" from
copyleft_compliance.bbclass.
The archiver.bbclass is used for archiving various types of sources, but
the copyleft_compliance.bbclass is used for analysing the license, they
don't have much relationships.
[YOCTO #4986]
[YOCTO #5113]
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-rw-r--r-- | meta/classes/archiver.bbclass | 19 | ||||
-rw-r--r-- | meta/classes/copyleft_compliance.bbclass | 55 |
2 files changed, 53 insertions, 21 deletions
diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass index 9d4b158a4c..7780c71ade 100644 --- a/meta/classes/archiver.bbclass +++ b/meta/classes/archiver.bbclass @@ -35,25 +35,6 @@ do_ar_original[dirs] = "${ARCHIVER_OUTDIR} ${ARCHIVER_WORKDIR}" # This is a convenience for the shell script to use it -COPYLEFT_LICENSE_INCLUDE ?= 'GPL* LGPL*' -COPYLEFT_LICENSE_INCLUDE[type] = 'list' -COPYLEFT_LICENSE_INCLUDE[doc] = 'Space separated list of globs which include licenses' - -COPYLEFT_LICENSE_EXCLUDE ?= 'CLOSED Proprietary' -COPYLEFT_LICENSE_EXCLUDE[type] = 'list' -COPYLEFT_LICENSE_EXCLUDE[doc] = 'Space separated list of globs which exclude licenses' - -COPYLEFT_RECIPE_TYPE ?= '${@copyleft_recipe_type(d)}' -COPYLEFT_RECIPE_TYPE[doc] = 'The "type" of the current recipe (e.g. target, native, cross)' - -COPYLEFT_RECIPE_TYPES ?= 'target' -COPYLEFT_RECIPE_TYPES[type] = 'list' -COPYLEFT_RECIPE_TYPES[doc] = 'Space separated list of recipe types to include' - -COPYLEFT_AVAILABLE_RECIPE_TYPES = 'target native nativesdk cross crosssdk cross-canadian' -COPYLEFT_AVAILABLE_RECIPE_TYPES[type] = 'list' -COPYLEFT_AVAILABLE_RECIPE_TYPES[doc] = 'Space separated list of available recipe types' - python () { pn = d.getVar('PN', True) diff --git a/meta/classes/copyleft_compliance.bbclass b/meta/classes/copyleft_compliance.bbclass index 32aa7577f0..b47c2c95ad 100644 --- a/meta/classes/copyleft_compliance.bbclass +++ b/meta/classes/copyleft_compliance.bbclass @@ -6,11 +6,62 @@ # # vi:sts=4:sw=4:et -# Need the copyleft_should_include -inherit archiver +COPYLEFT_LICENSE_INCLUDE ?= 'GPL* LGPL*' +COPYLEFT_LICENSE_INCLUDE[type] = 'list' +COPYLEFT_LICENSE_INCLUDE[doc] = 'Space separated list of globs which include licenses' + +COPYLEFT_LICENSE_EXCLUDE ?= 'CLOSED Proprietary' +COPYLEFT_LICENSE_EXCLUDE[type] = 'list' +COPYLEFT_LICENSE_EXCLUDE[doc] = 'Space separated list of globs which exclude licenses' + +COPYLEFT_RECIPE_TYPE ?= '${@copyleft_recipe_type(d)}' +COPYLEFT_RECIPE_TYPE[doc] = 'The "type" of the current recipe (e.g. target, native, cross)' + +COPYLEFT_RECIPE_TYPES ?= 'target' +COPYLEFT_RECIPE_TYPES[type] = 'list' +COPYLEFT_RECIPE_TYPES[doc] = 'Space separated list of recipe types to include' + +COPYLEFT_AVAILABLE_RECIPE_TYPES = 'target native nativesdk cross crosssdk cross-canadian' +COPYLEFT_AVAILABLE_RECIPE_TYPES[type] = 'list' +COPYLEFT_AVAILABLE_RECIPE_TYPES[doc] = 'Space separated list of available recipe types' COPYLEFT_SOURCES_DIR ?= '${DEPLOY_DIR}/copyleft_sources' +def copyleft_recipe_type(d): + for recipe_type in oe.data.typed_value('COPYLEFT_AVAILABLE_RECIPE_TYPES', d): + if oe.utils.inherits(d, recipe_type): + return recipe_type + return 'target' + +def copyleft_should_include(d): + """ + Determine if this recipe's sources should be deployed for compliance + """ + import ast + import oe.license + from fnmatch import fnmatchcase as fnmatch + + recipe_type = d.getVar('COPYLEFT_RECIPE_TYPE', True) + if recipe_type not in oe.data.typed_value('COPYLEFT_RECIPE_TYPES', d): + return False, 'recipe type "%s" is excluded' % recipe_type + + include = oe.data.typed_value('COPYLEFT_LICENSE_INCLUDE', d) + exclude = oe.data.typed_value('COPYLEFT_LICENSE_EXCLUDE', d) + + try: + is_included, reason = oe.license.is_included(d.getVar('LICENSE', True), include, exclude) + except oe.license.LicenseError as exc: + bb.fatal('%s: %s' % (d.getVar('PF', True), exc)) + else: + if is_included: + if reason: + return True, 'recipe has included licenses: %s' % ', '.join(reason) + else: + return False, 'recipe does not include a copyleft license' + else: + return False, 'recipe has excluded licenses: %s' % ', '.join(reason) + + python do_prepare_copyleft_sources () { """Populate a tree of the recipe sources and emit patch series files""" import os.path |