diff options
| -rw-r--r-- | meta/classes/archiver.bbclass | 14 | ||||
| -rw-r--r-- | meta/classes/copyleft_filter.bbclass | 25 |
2 files changed, 27 insertions, 12 deletions
diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass index b598aa3ad6..7b5274df89 100644 --- a/meta/classes/archiver.bbclass +++ b/meta/classes/archiver.bbclass | |||
| @@ -52,14 +52,12 @@ do_ar_original[dirs] = "${ARCHIVER_OUTDIR} ${ARCHIVER_WORKDIR}" | |||
| 52 | python () { | 52 | python () { |
| 53 | pn = d.getVar('PN', True) | 53 | pn = d.getVar('PN', True) |
| 54 | 54 | ||
| 55 | if d.getVar('COPYLEFT_LICENSE_INCLUDE', True) or \ | 55 | included, reason = copyleft_should_include(d) |
| 56 | d.getVar('COPYLEFT_LICENSE_EXCLUDE', True): | 56 | if not included: |
| 57 | included, reason = copyleft_should_include(d) | 57 | bb.debug(1, 'archiver: %s is excluded: %s' % (pn, reason)) |
| 58 | if not included: | 58 | return |
| 59 | bb.debug(1, 'archiver: %s is excluded: %s' % (pn, reason)) | 59 | else: |
| 60 | return | 60 | bb.debug(1, 'archiver: %s is included: %s' % (pn, reason)) |
| 61 | else: | ||
| 62 | bb.debug(1, 'archiver: %s is included: %s' % (pn, reason)) | ||
| 63 | 61 | ||
| 64 | ar_src = d.getVarFlag('ARCHIVER_MODE', 'src', True) | 62 | ar_src = d.getVarFlag('ARCHIVER_MODE', 'src', True) |
| 65 | ar_dumpdata = d.getVarFlag('ARCHIVER_MODE', 'dumpdata', True) | 63 | ar_dumpdata = d.getVarFlag('ARCHIVER_MODE', 'dumpdata', True) |
diff --git a/meta/classes/copyleft_filter.bbclass b/meta/classes/copyleft_filter.bbclass index 2c1d8f1c90..46be7f7d2f 100644 --- a/meta/classes/copyleft_filter.bbclass +++ b/meta/classes/copyleft_filter.bbclass | |||
| @@ -25,6 +25,14 @@ COPYLEFT_AVAILABLE_RECIPE_TYPES = 'target native nativesdk cross crosssdk cross- | |||
| 25 | COPYLEFT_AVAILABLE_RECIPE_TYPES[type] = 'list' | 25 | COPYLEFT_AVAILABLE_RECIPE_TYPES[type] = 'list' |
| 26 | COPYLEFT_AVAILABLE_RECIPE_TYPES[doc] = 'Space separated list of available recipe types' | 26 | COPYLEFT_AVAILABLE_RECIPE_TYPES[doc] = 'Space separated list of available recipe types' |
| 27 | 27 | ||
| 28 | COPYLEFT_PN_INCLUDE ?= '' | ||
| 29 | COPYLEFT_PN_INCLUDE[type] = 'list' | ||
| 30 | COPYLEFT_PN_INCLUDE[doc] = 'Space separated list of recipe names to include' | ||
| 31 | |||
| 32 | COPYLEFT_PN_EXCLUDE ?= '' | ||
| 33 | COPYLEFT_PN_EXCLUDE[type] = 'list' | ||
| 34 | COPYLEFT_PN_EXCLUDE[doc] = 'Space separated list of recipe names to exclude' | ||
| 35 | |||
| 28 | def copyleft_recipe_type(d): | 36 | def copyleft_recipe_type(d): |
| 29 | for recipe_type in oe.data.typed_value('COPYLEFT_AVAILABLE_RECIPE_TYPES', d): | 37 | for recipe_type in oe.data.typed_value('COPYLEFT_AVAILABLE_RECIPE_TYPES', d): |
| 30 | if oe.utils.inherits(d, recipe_type): | 38 | if oe.utils.inherits(d, recipe_type): |
| @@ -39,9 +47,11 @@ def copyleft_should_include(d): | |||
| 39 | import oe.license | 47 | import oe.license |
| 40 | from fnmatch import fnmatchcase as fnmatch | 48 | from fnmatch import fnmatchcase as fnmatch |
| 41 | 49 | ||
| 50 | included, motive = False, 'recipe did not match anything' | ||
| 51 | |||
| 42 | recipe_type = d.getVar('COPYLEFT_RECIPE_TYPE', True) | 52 | recipe_type = d.getVar('COPYLEFT_RECIPE_TYPE', True) |
| 43 | if recipe_type not in oe.data.typed_value('COPYLEFT_RECIPE_TYPES', d): | 53 | if recipe_type not in oe.data.typed_value('COPYLEFT_RECIPE_TYPES', d): |
| 44 | return False, 'recipe type "%s" is excluded' % recipe_type | 54 | include, motive = False, 'recipe type "%s" is excluded' % recipe_type |
| 45 | 55 | ||
| 46 | include = oe.data.typed_value('COPYLEFT_LICENSE_INCLUDE', d) | 56 | include = oe.data.typed_value('COPYLEFT_LICENSE_INCLUDE', d) |
| 47 | exclude = oe.data.typed_value('COPYLEFT_LICENSE_EXCLUDE', d) | 57 | exclude = oe.data.typed_value('COPYLEFT_LICENSE_EXCLUDE', d) |
| @@ -53,10 +63,17 @@ def copyleft_should_include(d): | |||
| 53 | else: | 63 | else: |
| 54 | if is_included: | 64 | if is_included: |
| 55 | if reason: | 65 | if reason: |
| 56 | return True, 'recipe has included licenses: %s' % ', '.join(reason) | 66 | included, motive = True, 'recipe has included licenses: %s' % ', '.join(reason) |
| 57 | else: | 67 | else: |
| 58 | return False, 'recipe does not include a copyleft license' | 68 | included, motive = False, 'recipe does not include a copyleft license' |
| 59 | else: | 69 | else: |
| 60 | return False, 'recipe has excluded licenses: %s' % ', '.join(reason) | 70 | included, motive = False, 'recipe has excluded licenses: %s' % ', '.join(reason) |
| 61 | 71 | ||
| 72 | if any(fnmatch(d.getVar('PN', True), name) \ | ||
| 73 | for name in oe.data.typed_value('COPYLEFT_PN_INCLUDE', d)): | ||
| 74 | included, motive = True, 'recipe included by name' | ||
| 75 | if any(fnmatch(d.getVar('PN', True), name) \ | ||
| 76 | for name in oe.data.typed_value('COPYLEFT_PN_EXCLUDE', d)): | ||
| 77 | included, motive = False, 'recipe excluded by name' | ||
| 62 | 78 | ||
| 79 | return included, motive | ||
