From patchwork Mon Dec 13 12:38:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 899 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 26C1BC433EF for ; Mon, 13 Dec 2021 12:38:56 +0000 (UTC) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (EUR04-DB3-obe.outbound.protection.outlook.com [40.107.6.73]) by mx.groups.io with SMTP id smtpd.web10.10522.1639399132240763451 for ; Mon, 13 Dec 2021 04:38:54 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@weidmueller.onmicrosoft.com header.s=selector1-weidmueller-onmicrosoft-com header.b=dLS017Dn; spf=pass (domain: weidmueller.com, ip: 40.107.6.73, mailfrom: stefan.herbrechtsmeier-oss@weidmueller.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NytI5lsWNO+PgOgXKI3KftGXwd3t595f+dpwMbXstUXvxiDsp9ZjyvNWqAk+Cux6TgSbHJNwm2WviV+prKYWMKbvQZIl4q7Lh+hmKx/mi9RWeBQE+HjVRAfU9ihXArX0xDyiNM/hKNmuQ/9CUlGqkwSywkJT9DgRDClM34EWCJjxWdGFevaEYzU6f9M3O/XT7oTHyajHIrIFii+LAYnuGHCNA5J2BSHwRBo///XI7tjjvSagDLgMo6Anql8hWbQxikjbANHC8e6E3J5rkgpzLBDQdByFLlUjTuc/vHsMcXN8iuHmOO2m4zD33vzzTOAChfaA+fJV7gYkIbnuCOF+lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AzF+8UOK3Q8Z1CVjW2AKKJdlBxKeBGOtsVBkEvANQiI=; b=FA10Q/gbO7cgevEvgNBTIgf0u+Mluu6Uy3iY4Tp7c/k7VevqVODr0vmpCe0E4Ylk0JCWyur1HBK3v7G8eP7XL77PCo6Rouwhl7cWM9PgZ1N6WvFeamaS8MZzhBtCvgT2TP4BXhyZaNNdPNYTJT6hkqBOMYxTv7QPwyCqkpKO4YF3wD12wNEum0D8wsnF7K6FSt57MSSaG9lh5SdoN+c4Pklorz81l293Z5EPI5saLtxQW2uET7rrcX7qrp9tGgvrnzi+pFPNwdkpodqqJPu/Cd2VohG4k9Em+Rkhu8VP5okmIlQXVC0ojTxuLhNlN3v1XZ2dsa/RwuVQZwHxmbbdGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AzF+8UOK3Q8Z1CVjW2AKKJdlBxKeBGOtsVBkEvANQiI=; b=dLS017DnEt9eYpH+kIoAzFpwTuwcn6kMyZrAHiebyvRWkGfQpNvbL/qBU7odFI+qvB6Shu1S+gQ/4huuqqgMFnwqyMmGtyjdPqyEv1ZfF9KjO8hdJ17J0Gs14u4DM8Txkp4hUyopjn9n6S8rAaFUU/Vv/1Jhrxwn6I0BPu+M65A= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by PR3PR08MB5595.eurprd08.prod.outlook.com (2603:10a6:102:83::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.17; Mon, 13 Dec 2021 12:38:49 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f:41c4:eb10:5010]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f:41c4:eb10:5010%8]) with mapi id 15.20.4734.032; Mon, 13 Dec 2021 12:38:49 +0000 From: Stefan Herbrechtsmeier To: openembedded-core@lists.openembedded.org CC: Stefan Herbrechtsmeier Subject: [RFC PATCH 1/3] recipetool: Separate licenses with & operator Date: Mon, 13 Dec 2021 13:38:24 +0100 Message-ID: <20211213123826.31605-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 X-ClientProxiedBy: AS9PR06CA0349.eurprd06.prod.outlook.com (2603:10a6:20b:466::24) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 Received: from DE10512.weidmueller.com (89.247.126.92) by AS9PR06CA0349.eurprd06.prod.outlook.com (2603:10a6:20b:466::24) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Mon, 13 Dec 2021 12:38:49 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c53ffadc-6ee0-49d6-214d-08d9be35834f X-MS-TrafficTypeDiagnostic: PR3PR08MB5595:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2399; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: b3Ii4xI27JHUQ/I1xmjtJLkRALC6S7Xdj0HajbnWHeco2drNuicvboUeTnItc5D7REXKVlvUlDdcQDM9Fw+ne2Z0MnBC9ZuMfgAiCUq7lX5gt8JLvHEUpLu9xGQbU5GDhaK1aBdX+FA3ir/s7ZCKZNKMNx26adhZjWMawvs5sP5KPmC6b47yfzQl6Zzb8fRf50rHfuep5R4OGpgPMHJ1qdTSIp/CQ8VH19C2kz410OrQtNSBzrKUWDInImgpGr/QniSaSfj8OtTxkaWiYXvvFJXopJjCV5MR9M6m55S76KLhm2CLE0/keApQxC4H3+SNUfftFonPp9JnWL4i+4WvRcrUlcocBQzpnSUDcqjRMsGbxEkC6WFJkSzg/7O9aJQs69MhkddpyeTdMcc9LUt5xbkCzmEAmA30GSCUt3Bb17rQcEYSMWSrHgxKxJHfBwx4OCHesKmZbheFfHvC1MLaa7Q/1y/0iP3QVXOPJbrtzHpe9QxXd3adb7yQY+n8Yg8FR1qrS5KPVY0Qg9aJXFSrm3dKSfEV9UTJ1bee64tejwhv/iG9xlCO4Kn4bBeUTe4UZqFyIGyuOk5Qmv/F4orFSvilFPCo36vIpStKohTwN2DULwir1qXA/2TZPI7aTIVCk2Yh4lraF8F5ebvDlUrM/WXjIMkzzKcAX6G/pzpHJAk2FJqf6R+j3gjJo55hkHhHi5dmRqXwjUqZGRONkcKPJA+i54CPEafqtEWM6UUMkZJ6fEjvVjqGMGVwzNQTlnhBMWU6HT3ecCBIXlf9W7zMXg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6969.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(6486002)(38350700002)(38100700002)(956004)(2616005)(26005)(83380400001)(186003)(86362001)(316002)(66946007)(52116002)(7696005)(6916009)(5660300002)(36756003)(2906002)(107886003)(8676002)(66556008)(508600001)(66476007)(1076003)(6666004)(8936002)(4326008);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +6n0KlJlJL1WETWcXw5xrdY784Jp1OLkhBfY6xd0yHzcpskodc0Yq+t4ZhsUQ/VyNEj2XmU2dQ3lgA6L7GKDmOMdKvrhZ+cyUo1dpqZeEMRSZFCsugpXDUuSQvEsN0v8mlGj6I+3aNbt790VcgBu7w7cCdw60VlCf7EYITZi9vaNgS4tSQ3fsXSHAoEYRm3VtL0A5QRZh267g8XAW/HeJkH0DMM63eQL06zVDNFk3H9QF9NViyCjkhLw83usBbTwkebQQpv/IxaOnpH/eJvnFsiomE9xYt6DPE2voMxwlQA8NM8XQpzwqCg8axIw9uklbRgS/o1vcK/wgSmPwWqRxcdmlEHNUL51d6xhUGdgUuBfDMl79wI7r808cfThpu4o24k0EDCUx9U8gA2mZQMK9BJn+Za/0wZkJyxPn2Q4iJ1UQB6tU6zRX6+rhK0mqZNDB7JH21z4CTXKYzFZHeOJz3ssMxkXQ1mnvyCsMYnWBkN+gPROJsCqsloi4RMZgZfxSUKx6Qut2dJORj32qaCqNHpfvNtLv1F9/xVYleWd2TO5na/j0OED4f6vQcdT1r0w2kbg509WQJM714eMi0CqWLQamWEPj1WQR7lvIicHTW9/kpeIF8XqILHoWb2oy/2xHjvsbYJiESPzIbAbpbsuE3/CCaqSlc/+ipboegu/wsNelpl5usb6EnYcwwx0p/nMRIMFtTdOV/c39naf7DoCoAs9Z1o0pAk4/PR2teJJsYH7UFi7BfzxRQJ7QrtfYjNpiU+HBTKQSZ58xFabFogYSZgueofsxwDQs1mquB9eaJ/CRF6pNAeOcDBbfLT6IRubYYZO9fJGyWayj5dYIvVOak1YcwdIDcQfnBkMb9dmFPbZtZE+HKft2Sugei7ZgtZjRJ25MPbhdMCdyP6mljXODAjNchgbs1vpTyzHrgMV31cEBYAl1VqMeHZfrGUjvJi0EuxvA8jmlE/MNbwvdDsssnaaPpbbxlcQUJ1PBP6dACdgeXTMERGmkDSruMIvHCOypwSk+CWwYrb3nDHAbIs1v1dcpKrG/pkj2IjLR7xY5JhbqQolTO5eR0dVKJ6UCOS1x3hOm8NmOvhHS1Y5C0A37hZQIr3tyHpxYAH4lFLazEZQ88R4TzQrMSE/PvhJB0RYj6SyJmtE/MBlaM6W7qCHuCUBoGmrbdDEd7fG+TvkABphHPsxtLqoLYjxjYjRFlo1yr41SxPoqseLh2IHBjAnz9x78ev1zGfMNYs8OUGIa5LOxJqkfU0q8/x7PvjtYkDtqMP1z69lfuDipTlC9+TC/QwDevo7pKbrRzWCmu1Z5rO9Pg2/Hmo75+He7GQYd124zkogqdkXnvZTwxUUhGmN0veKdQFpfu0r8RB0ElPndU8eta0AGF/fo7xtFc5mbyLjtyGt1+cpcWP9cHcOb9UWCg0C1BWFCC6U7Elln6ZU1nokVH7qMHyXyAu+3/2/gnFjs4VexRl/1eg5WM/SxGizQYJK9PWlMpGt82SqpniZXlWStgfG2SLtddYt6e6IatUeFJrcSeLA2IgOgRPSFF8MfhqJydOppM7+gPuyhodShOkCFojUpi3DrX1b8GiRLhDgkA3bBBob/k5xdotCUlTdS/ZtdMypEGhObZLscQc//hY= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: c53ffadc-6ee0-49d6-214d-08d9be35834f X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2021 12:38:49.7072 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cdVzpR658mBs2qXPh0cGEVnZc8LqYvvwESB3VSXwfugW0KV04lz05avpnRtKb2ebY5mFA/Fx6o/LKU/BSAHPaQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5595 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 13 Dec 2021 12:38:56 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/159619 From: Stefan Herbrechtsmeier Separate licenses with & operator since it should be satisfied most use cases and it is a reasonable assumption that all the licenses apply. Furthermore flat, split and sort the licenses to minimize license string changes. Signed-off-by: Stefan Herbrechtsmeier --- meta/lib/oeqa/selftest/cases/recipetool.py | 4 +-- scripts/lib/recipetool/create.py | 39 +++++++++++++++++----- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/meta/lib/oeqa/selftest/cases/recipetool.py b/meta/lib/oeqa/selftest/cases/recipetool.py index 439e41597c..95e4753976 100644 --- a/meta/lib/oeqa/selftest/cases/recipetool.py +++ b/meta/lib/oeqa/selftest/cases/recipetool.py @@ -426,7 +426,7 @@ class RecipetoolCreateTests(RecipetoolBase): checkvars = {} checkvars['SUMMARY'] = 'Node Server Example' checkvars['HOMEPAGE'] = 'https://github.com/savoirfairelinux/node-server-example#readme' - checkvars['LICENSE'] = set(['MIT', 'ISC', 'Unknown']) + checkvars['LICENSE'] = 'BSD-3-Clause & ISC & MIT & Unknown' urls = [] urls.append('npm://registry.npmjs.org/;package=@savoirfairelinux/node-server-example;version=${PV}') urls.append('npmsw://${THISDIR}/${BPN}/npm-shrinkwrap.json') @@ -483,7 +483,7 @@ class RecipetoolCreateTests(RecipetoolBase): result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri)) self.assertTrue(os.path.isfile(recipefile)) checkvars = {} - checkvars['LICENSE'] = set(['PSF', '&', 'BSD-3-Clause', 'GPL']) + checkvars['LICENSE'] = 'BSD-3-Clause & GPL & PSF' checkvars['LIC_FILES_CHKSUM'] = 'file://COPYING.txt;md5=35a23d42b615470583563132872c97d6' checkvars['SRC_URI'] = 'https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-${PV}.tar.gz' checkvars['SRC_URI[md5sum]'] = 'c53768d63db3873b7d452833553469de' diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py index 406c97f1c5..8e8a621b4f 100644 --- a/scripts/lib/recipetool/create.py +++ b/scripts/lib/recipetool/create.py @@ -919,6 +919,22 @@ def split_value(value): else: return value +def fixup_license(value): + # Ensure licenses with OR starts and ends with brackets + if '|' in value: + return '(' + value + ')' + return value + +def tidy_licenses(value): + """Flat, split and sort licenses""" + from oe.license import flattened_licenses + def _choose(a, b): + str_a, str_b = sorted((" & ".join(a), " & ".join(b)), key=str.casefold) + return ["(%s | %s)" % (str_a, str_b)] + if not isinstance(value, str): + value = " & ".join(value) + return sorted(list(set(flattened_licenses(value, _choose))), key=str.casefold) + def handle_license_vars(srctree, lines_before, handled, extravalues, d): lichandled = [x for x in handled if x[0] == 'license'] if lichandled: @@ -932,10 +948,13 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d): lines = [] if licvalues: for licvalue in licvalues: - if not licvalue[0] in licenses: - licenses.append(licvalue[0]) + license = licvalue[0] + lics = tidy_licenses(fixup_license(license)) + lics = [lic for lic in lics if lic not in licenses] + if len(lics): + licenses.extend(lics) lic_files_chksum.append('file://%s;md5=%s' % (licvalue[1], licvalue[2])) - if licvalue[0] == 'Unknown': + if license == 'Unknown': lic_unknown.append(licvalue[1]) if lic_unknown: lines.append('#') @@ -944,9 +963,7 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d): for licfile in lic_unknown: lines.append('# %s' % licfile) - extra_license = split_value(extravalues.pop('LICENSE', [])) - if '&' in extra_license: - extra_license.remove('&') + extra_license = tidy_licenses(extravalues.pop('LICENSE', '')) if extra_license: if licenses == ['Unknown']: licenses = extra_license @@ -987,7 +1004,7 @@ def handle_license_vars(srctree, lines_before, handled, extravalues, d): lines.append('# instead of &. If there is any doubt, check the accompanying documentation') lines.append('# to determine which situation is applicable.') - lines.append('LICENSE = "%s"' % ' & '.join(licenses)) + lines.append('LICENSE = "%s"' % ' & '.join(sorted(licenses, key=str.casefold))) lines.append('LIC_FILES_CHKSUM = "%s"' % ' \\\n '.join(lic_files_chksum)) lines.append('') @@ -1226,6 +1243,7 @@ def split_pkg_licenses(licvalues, packages, outlines, fallback_licenses=[], pn=' """ pkglicenses = {pn: []} for license, licpath, _ in licvalues: + license = fixup_license(license) for pkgname, pkgpath in packages.items(): if licpath.startswith(pkgpath + '/'): if pkgname in pkglicenses: @@ -1238,11 +1256,14 @@ def split_pkg_licenses(licvalues, packages, outlines, fallback_licenses=[], pn=' pkglicenses[pn].append(license) outlicenses = {} for pkgname in packages: - license = ' '.join(list(set(pkglicenses.get(pkgname, ['Unknown'])))) or 'Unknown' + # Assume AND operator between license files + license = ' & '.join(list(set(pkglicenses.get(pkgname, ['Unknown'])))) or 'Unknown' if license == 'Unknown' and pkgname in fallback_licenses: license = fallback_licenses[pkgname] + licenses = tidy_licenses(license) + license = ' & '.join(licenses) outlines.append('LICENSE:%s = "%s"' % (pkgname, license)) - outlicenses[pkgname] = license.split() + outlicenses[pkgname] = licenses return outlicenses def read_pkgconfig_provides(d): From patchwork Mon Dec 13 12:38:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 900 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CCE0C433F5 for ; Mon, 13 Dec 2021 12:38:57 +0000 (UTC) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (EUR04-DB3-obe.outbound.protection.outlook.com [40.107.6.73]) by mx.groups.io with SMTP id smtpd.web10.10522.1639399132240763451 for ; Mon, 13 Dec 2021 04:38:56 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@weidmueller.onmicrosoft.com header.s=selector1-weidmueller-onmicrosoft-com header.b=McfNTVcE; spf=pass (domain: weidmueller.com, ip: 40.107.6.73, mailfrom: stefan.herbrechtsmeier-oss@weidmueller.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nkK0RP0l8l3BCTswezAoTA1PLriy4kvehAJ3rtCSdUf3g8lzR5nnILDfzkj/KuOOoQXx62yywRWtFvq/wxgEObVDcnYNO7Xujz7wPaARlC6v2a+xTby63582Ak+nxKeY8z7v23ncAWp4Cd5XP+KN5lPi0rcSy1E+bTojkS8FxjeXkG/DgTVczFe+TdeMHg2czgojnt6G+sZawHGag029RV2XBN5WShji3yIWbibviZg/MO0oHcC3Le7/z3tNqiPEfkI33aNaVoxymtVRm3IscIMImR3bkOO0cqlH/M2JuWeAp8MxcOE2uLbOInrTNx6NjS++pq3XmzfGTP3YZqbnrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IXRmx/I2ByMTMCN15UQowS+7+ADzqgvNr5srUtOn6Bc=; b=KcBXB0pWX9/u0QcXBuxhjw8iTtza/bN+SdPOxqkO6i9MzghGm516sjON6PKmu7GIB6DM/PTK/tr1vOgldy7+iVwXeCLsyin6mgboEKOTY8Zv4zTB7fEfjTd3+F/AUQKA9k09fopwCjOa2rKGxmNNUZXKzSa2E3ehIAzd50k0aHtrNYYNGIZEPK1uiH0V/qETnulcw4p/CKSggUJAfB67OpzGXv9Jv2KvSnA423Btv+lxXS7EOwOdtvw1XsyzZ6sCBKIt3tcdWIan0zzAvOyyB5C/aLXnqm6YD05zK6E+PhFEq4HLFfCmEfGSgaQcIze31VCsDQIrwIvKMB0e7s7NoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IXRmx/I2ByMTMCN15UQowS+7+ADzqgvNr5srUtOn6Bc=; b=McfNTVcE1OtpRwvNwyYnh6f8K9gIY2TJq7WSm/bfXTMP9oqVEVEgsM4sCGJnKI99227oKK+a5Isi8mP74rp+nGUlIs+6wqCVrO7jhwmHVSzg/BQa6RxSM9ycnPZhNWkUpn3+cmcY98fOBON6Ri2I+ciiH0ALEVI9MmvH4fkO0pE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by PR3PR08MB5595.eurprd08.prod.outlook.com (2603:10a6:102:83::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.17; Mon, 13 Dec 2021 12:38:50 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f:41c4:eb10:5010]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f:41c4:eb10:5010%8]) with mapi id 15.20.4734.032; Mon, 13 Dec 2021 12:38:50 +0000 From: Stefan Herbrechtsmeier To: openembedded-core@lists.openembedded.org CC: Stefan Herbrechtsmeier Subject: [RFC PATCH 2/3] selftest: recipetool: Add test for split_pkg_licenses function Date: Mon, 13 Dec 2021 13:38:25 +0100 Message-ID: <20211213123826.31605-2-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211213123826.31605-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20211213123826.31605-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0349.eurprd06.prod.outlook.com (2603:10a6:20b:466::24) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 Received: from DE10512.weidmueller.com (89.247.126.92) by AS9PR06CA0349.eurprd06.prod.outlook.com (2603:10a6:20b:466::24) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Mon, 13 Dec 2021 12:38:49 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cc684dbc-41c5-4248-4de3-08d9be358390 X-MS-TrafficTypeDiagnostic: PR3PR08MB5595:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:404; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LSRkT91/Ooe50Y02ecUYmAodm4PFvKGNdFWtQucjT9yAKXlPDUSbKlpa/v2S+iVf4BEUZ33lc3PDzsf9vuiuheRKJ+gGbeUHa4fTc9xS9mBYu3mqnhBCda3ZKnIu74BxwuEliGCfC0RI5pF02vyT/AxkErbaRo9nh0LOUTIV/bQNtmAqKu6hKRzfYduVZ7l3dqsb2jWM2Lcq6diWUNitrHxgwXZWn8fuip/nwPzuKYCuQzBgWnCYHHZaxnRwHRQUkEoNfly88uJxWt7WpR+JJykEVFu1y74sbsYqd/LArwl6VJz6/cj7Ht2arrwJifW/xqLNIGhRm+AmozwZkgadz2qCXeHQ/xb0A6BrrtOlsdD5wrJknh/fokIZtQZ4eO7J3yd98UC9UP7mN2BYPakpFajRcT/ZU8CuTNtdYOFYMD+fJo2ZrmfQC8aXA4AcEZFQxh7hZOKS8ATNKHZ6L/pQwzSi/Br4YGdqDFhI/03Ef2UBsWGh1PJKWrvZ9vch0iMGdPD19n/E9E3OACTQtGRUJ/ZcmUe0PPS4eWhy0sR7XrBz3/xAC+J6csIVSu2InH0L9dNF/LdzO52K2a70TBhfl8q+s+ViJ69kJZ4zM2l4/YZBEnTbSSWcOLqCQgZS2HF+6kSvpl08kTQcK3kJFsaRmGJ+Rp59ZQnK1Q2tS22Q5uYhYvjWsSBoukGFPzgwGb3/+ZA8EjXAUyBeXaFguoPdPw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6969.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(6486002)(38350700002)(38100700002)(956004)(2616005)(26005)(186003)(86362001)(316002)(66946007)(52116002)(7696005)(6916009)(5660300002)(36756003)(2906002)(107886003)(8676002)(66556008)(508600001)(66476007)(1076003)(6666004)(8936002)(4326008);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LfGJCK9xIelRA89dKeLGtShIMADaAM1G1gOjDlWxhjWXXo4Yh4Tn1Bhq+TiwvP4pBmpXl3NIednP9Y2fsfED7wtH7NdAKhekuNZLbl45gR/LKX3NQPdEo+evSgCPKnEdXlmd7dPcdVuMo93H40sGuslh/4haVkXQfRwe3165fuBmKtbvKBtLvOpcTAFvr5B3bFWClUrOxuFjNH8GGai7xd910oEMqoKI61EJPIF6p1aYeXKj9Xrzjuvj25gfaVi1d4OyetogsPHv7X203UWAF5HZW4rq5fpd2kvMMShScjf0gDgV6kSupm7DrsSeTY+MKScKOMGAvyLJ2pN2LyV8/io494pMOPuf4+9zfUBe2UfzKgvPpGokztws73BvPdc3xywyMz+GiAfDRS5SpRT/xRHW+ZLygKi2dssIqErmZ3bnp2iehS6XzPHDFlVCFzG/1e/B/bcAM40Wt15GYbsxgrCrDON8xJB+wYNIk86UCxzEccbiFzbeH1S6gLk506Po8oSgJkyBDE03bD6upB2ohnjDxHaUDJNcSO1Ai990qUh+JXOdWHZpzowjhCpUXfZ4RcdBGRDugE/MWf9kEPtYwTzPye7Y/QYO/Ivi0mBM5t7O5SmTcwI9D/Dsauv5eenH8e7TCHcJ8CoBGtd9A+gYbM72qw5oZJGm5qb/VPgBGXMPiyMwxljYWaEoQex9YyIZPbfzon1dyUQARClSNzB9XJLa/6rMJnY6TotP/v1s/9D16RpmzLUa3bZ2mZeWR6s0ZrfIGgU2BuD+yRl7aU63E2dCWN3vuKWa2Q0P3WVjWwPwg9M0WpUHaxjDunuFMyLsaunNvIPqEsYjBy6r7WZ/H5fNvc5keVHqLkQ/eR/49nKmr+feed3oU7bDltyCRujctNodsms2RqNmrwR4/GOmyF5ClsY1HdzLKFj+F4rcPWeV2poFVGcmAxvBfI/neWluXYPvkQD3vSvwR8rVp52jrYMdL3d0GcL2esduZzRtMgK/cWunoePiyVcsPGn6QwDCoKV/KyEPM42vcNdkfDYEIUA3cIWnJbBUFssaPQIGMs0OFCRqln1k5sClSxQTIvjLuw4kUryLE2jxspkXb0EsldchqKZ62edPKZiY3v49Iq/e8Eqv8ZoV+6qhQQR4dXHdN+3osLDh9/RAggcb5o6/C0aFgPYE0gxr40+ihkNmLjEuYPz9Mn6CKN9pyflHWo4UV3YPR97ps4DRqJBupMhLDoJQtgIqMFYhXqJWfiUh3TfMuhK1INFmepfiX4qzEP+odvRM68Rk5a6RUbZOUcd25iZAY0Mz3j+lF5lZebDFJ9Rd8RC2KkSTgHziWcUwEIeVQKw/N7tjwbjn33HULz7sa32ARPK0lL80QCaO4nzQbMMJHUAMZ5ca0bKiJok/3HfuvmKHzsOnjmaNWXD6mhkDZZUHeEGJGNJGKPYFZjp7BnuUpY2xgB6zId5JIFPiNsHGHg7jCJ3fcyuVIVzBH+hjpvVUX/o0uln41c/Dk0wJYz/AaGgnF8/KAUW06l2NzTO9b+QxWq8MsTUigvZP5f55QEvt8UjD3tDdwUsDkfHvUIeFW6LHmZHO1f4Q+WleRNzd2Ps+InEX+OQYrn12JNlZbLbkJzLddBEJdxdPFKp2Tcs= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: cc684dbc-41c5-4248-4de3-08d9be358390 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2021 12:38:50.2200 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tq9QOuryoaQk+kE9ktmEzQHpBCnIobIHBK18OMwVSclaXmEKK9ykLEI54BLMCpsoaFKAft8cVBw5R29nkTHtwg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5595 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 13 Dec 2021 12:38:57 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/159620 From: Stefan Herbrechtsmeier Signed-off-by: Stefan Herbrechtsmeier --- meta/lib/oeqa/selftest/cases/recipetool.py | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/meta/lib/oeqa/selftest/cases/recipetool.py b/meta/lib/oeqa/selftest/cases/recipetool.py index 95e4753976..1c73b2c5e0 100644 --- a/meta/lib/oeqa/selftest/cases/recipetool.py +++ b/meta/lib/oeqa/selftest/cases/recipetool.py @@ -541,9 +541,13 @@ class RecipetoolTests(RecipetoolBase): @classmethod def setUpClass(cls): + import sys + super(RecipetoolTests, cls).setUpClass() bb_vars = get_bb_vars(['BBPATH']) cls.bbpath = bb_vars['BBPATH'] + libpath = os.path.join(get_bb_var('COREBASE'), 'scripts', 'lib', 'recipetool') + sys.path.insert(0, libpath) def _copy_file_with_cleanup(self, srcfile, basedstdir, *paths): dstdir = basedstdir @@ -588,6 +592,66 @@ class RecipetoolTests(RecipetoolBase): with open(srcfile, 'w') as fh: fh.writelines(plugincontent) + def test_recipetool_split_pkg_licenses(self): + from create import split_pkg_licenses + licvalues = [ + # Duplicate licenses + ('BSD-2-Clause', 'x/COPYING', None), + ('BSD-2-Clause', 'x/LICENSE', None), + # Multiple licenses + ('MIT', 'x/a/LICENSE.MIT', None), + ('ISC', 'x/a/LICENSE.ISC', None), + # Alternative licenses + ('(MIT | ISC)', 'x/b/LICENSE', None), + # Alternative licenses without brackets + ('MIT | BSD-2-Clause', 'x/c/LICENSE', None), + # Multi licenses with alternatives + ('MIT', 'x/d/COPYING', None), + ('MIT | BSD-2-Clause', 'x/d/LICENSE', None), + # Multi licenses with alternatives and brackets + ('Apache-2.0 & ((MIT | ISC) & BSD-3-Clause)', 'x/e/LICENSE', None) + ] + packages = { + '${PN}': '', + 'a': 'x/a', + 'b': 'x/b', + 'c': 'x/c', + 'd': 'x/d', + 'e': 'x/e', + 'f': 'x/f', + 'g': 'x/g', + } + fallback_licenses = { + # Ignored + 'a': 'BSD-3-Clause', + # Used + 'f': 'BSD-3-Clause' + } + outlines = [] + outlicenses = split_pkg_licenses(licvalues, packages, outlines, fallback_licenses) + expected_outlicenses = { + '${PN}': ['BSD-2-Clause'], + 'a': ['ISC', 'MIT'], + 'b': ['(ISC | MIT)'], + 'c': ['(BSD-2-Clause | MIT)'], + 'd': ['(BSD-2-Clause | MIT)', 'MIT'], + 'e': ['(ISC | MIT)', 'Apache-2.0', 'BSD-3-Clause'], + 'f': ['BSD-3-Clause'], + 'g': ['Unknown'] + } + self.assertEqual(outlicenses, expected_outlicenses) + expected_outlines = [ + 'LICENSE:${PN} = "BSD-2-Clause"', + 'LICENSE:a = "ISC & MIT"', + 'LICENSE:b = "(ISC | MIT)"', + 'LICENSE:c = "(BSD-2-Clause | MIT)"', + 'LICENSE:d = "(BSD-2-Clause | MIT) & MIT"', + 'LICENSE:e = "(ISC | MIT) & Apache-2.0 & BSD-3-Clause"', + 'LICENSE:f = "BSD-3-Clause"', + 'LICENSE:g = "Unknown"' + ] + self.assertEqual(outlines, expected_outlines) + class RecipetoolAppendsrcBase(RecipetoolBase): def _try_recipetool_appendsrcfile(self, testrecipe, newfile, destfile, options, expectedlines, expectedfiles): From patchwork Mon Dec 13 12:38:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 901 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CFC0C433FE for ; Mon, 13 Dec 2021 12:38:59 +0000 (UTC) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (EUR04-DB3-obe.outbound.protection.outlook.com [40.107.6.73]) by mx.groups.io with SMTP id smtpd.web10.10522.1639399132240763451 for ; Mon, 13 Dec 2021 04:38:58 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@weidmueller.onmicrosoft.com header.s=selector1-weidmueller-onmicrosoft-com header.b=w6BXJfMY; spf=pass (domain: weidmueller.com, ip: 40.107.6.73, mailfrom: stefan.herbrechtsmeier-oss@weidmueller.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F7XKrwGtx8i33gYzodFOi4/bbpARAnA39qH/16B/ugITbX4kfDB9/5Wn13pB3oA+I9c0HdnDHFl2oSCnNNcuxHieuGmNBYLRyGBDMABcUy3y0XAJUbKZloe/jLhv51jscuhakRsaJ3Tb+V5BFdkTJ67yZGMIUQ6T2RBB3b/C89pXPowLt0XBbvVzLAr9HFtiMyl7RjfQ//D6d/9oYlHhfn+O4hmBLN0345VeXl7GlE2fCfDdy/qjlNPDYGQDWOzE3opOxbt7eiqDLz8g6/O+evsG4LK7XbjCP8bKpvUSq4s2FDkBCBheulAyBR0Sacsn/bMkwy1zADQo1mCHx0lJ8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6BUd7yje1r4tbIeE2Zgm4hj6IVLfWiL3qiZYiTjL/30=; b=OlMXUk0cgNQZTiMlEh+rH8xfGtCIsLw6Ba4UUvBfNJc2O1HQpMm/rsIbNQQKzXafkEOnM6zv+4R4eHi5bsWejx713BUZy7pGxhsFe6UBzrKE+nCLfTzQXJy8m5yzWZZ/2aKfaOqu1PTb0HvGmrXLPZlIlbufVFtR4p8U1BaHw1/HK7/CiqGn/bZnCyzw84UGRDnDW5n3D5dMEhI6QdeN7CH0f1ZhMsQQIpPpyS4qfMKi25V9ru/lxHA+6LE2TK6AE7IDOFc8T5B6Gii5bc8qQY6t/tqDslqZEHgqE7BFplKrY4k6WrLbu9m2sEYa6miKPKm99fpdm5t26tftRdshMw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6BUd7yje1r4tbIeE2Zgm4hj6IVLfWiL3qiZYiTjL/30=; b=w6BXJfMYylFdaMfyuPCSLotOw1LNw9VkNJb9GpC7PgAuCJq7AzWDeBTY6FEuv1L0SUPQFNDvM+9hDYeWYHpntNW4Wv4yHS2MUQfLHh2YsrHvkDz58T3P0WpvB/oZbEa15rfgwdD0IpmXppu8SDTkCUFGpv+gqGFwzE7/TSWutQA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by PR3PR08MB5595.eurprd08.prod.outlook.com (2603:10a6:102:83::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.17; Mon, 13 Dec 2021 12:38:50 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f:41c4:eb10:5010]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f:41c4:eb10:5010%8]) with mapi id 15.20.4734.032; Mon, 13 Dec 2021 12:38:50 +0000 From: Stefan Herbrechtsmeier To: openembedded-core@lists.openembedded.org CC: Stefan Herbrechtsmeier Subject: [RFC PATCH 3/3] selftest: recipetool: Add test for handle_license_vars function Date: Mon, 13 Dec 2021 13:38:26 +0100 Message-ID: <20211213123826.31605-3-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211213123826.31605-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20211213123826.31605-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0349.eurprd06.prod.outlook.com (2603:10a6:20b:466::24) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 Received: from DE10512.weidmueller.com (89.247.126.92) by AS9PR06CA0349.eurprd06.prod.outlook.com (2603:10a6:20b:466::24) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Mon, 13 Dec 2021 12:38:50 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2d5517fd-50ff-4827-1ceb-08d9be3583dc X-MS-TrafficTypeDiagnostic: PR3PR08MB5595:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MEt9U8wykcxuERujuDYsgiwG35Pv7Q/Fb/n4INaauWAoyBx7Nwwc62n11EFWSqfWyKnsG2tIm5kCQ6c6D6ZNzYBBl5wD9qnDMrliNVlYQZEQ/xu0DR5KHsgLbY1w6T5+wd9AafWMLxzQMK3PANwCGB+7rBvUID6t3Icx1YaWUvNCDV5LNnLuGSEdduUdmLicVcybMzQ9DQ+Hn+Nts3wEtvfOSfmWpni5tbXO8LyzJLEZ7MKtATHW9iotn5GtzQgkA6tdEhXCxuDKLckqaMr52lts/h7dm+R0PJmE4dIXa+VtXEFdJwCUKZQV2vbS6ca2jFIc+cX1pkgo34uu1NvC/VaUaaS4+aLeJkeTs4yHA2FZZJtLAH2x2/HGx4lMv/fneVm15hc5/eOsas47DTwdpaXBhq6a/oj0PxNr02IfOAX90KtOYz0h2R+xjuOd6Nwy9DluE0Bzp3PAq64RxJJm5Fsdvn/48YTAchgfvn/J8oEHcwkR5EXUEjA+8ROHuqqiyWRK/E0qOvlJ3jddL8u65wGKpL9AYVBxofdV/YesyDfKHcH5925FN2iRruf33FDiM0rXA1mHlnfmBqWS5mIx3O26OdfCmLruB7Fj5IEJDbnCB9gvylmbZSu7zdjBGF6AYS8tTm9q947xJUfDHjK5GhB8ioEqeXd6v0q/9MPzOxpjz04mdv4g3IUj1qQxhi6st1shckmY5sOhyPLeMNdrnA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6969.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(6486002)(38350700002)(38100700002)(956004)(2616005)(26005)(83380400001)(186003)(86362001)(316002)(66946007)(52116002)(7696005)(6916009)(5660300002)(36756003)(2906002)(107886003)(8676002)(66556008)(508600001)(66476007)(1076003)(6666004)(8936002)(4326008);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qnzxPmzUMGxMbAKqLkXHy6moaK2jrc5CXCPzmQI6n6sDABbrgYOXRFm6KhTt4gtM3AKPbIE1wfAECKqB+ejycy9S8oEDGtclp3PQR8S/4ZiikBVuchEHcGNDS7M4UtQt/Yro459zLoMQnzv9CdhePhqzobCjt4qe1FQAsT8Dxo5vCGNMmBmTE/vkmDwoWO42k4fqgOr1ejBRfeT+3xhBJl98/nvYhTOyS3RRbBzRUbRCNXDHHs6wvtbBGjSuacNtvCJT7DIcbWRhBGUVB67vYhafbtdfHotSrw231Lta3RiD9445LTZKPmhMf0Znunl0EIq7VAJ3SN0Bd+AABcmw7nWVT+cKf/Czc14bYJkBQpcKq10/8888Ktm+7NtHp2LIMW9xwWmYX+wkDVB3K9JoVF4gTdNgWgz8BcJQTjxkhGKOim1HANN4UU0MkCXWHCZ7jIJgP5oMiY7CI1WZQy0khYgwVkyV/99WFR0SRk6YvnN0y/t0uczdMWCcrlJk4bYtEU5idL/KD1L1bd9FavGgm5/ar8/2aJZos4fEQwxOdHlFJcLD9QcP2BeC6Wzsp7wke0B7ysckiCWqK4+YNt3vvQpNWgvgyfi7/OzruSoaqQCdwuxX28TqXwDQWL9d8F+zusPkGpARo4kx1iSHqNcLOnSUaxQr2YHS3FQN8Cs49vaChgEAgHYJ7wLNWEf4RymhrbX8Vao+TsypQ3PsY97g5M7cwvrQ7gPAs78jZdzSy2Kx+hnD+BXvcnHtbUb10QnKbB76Oiyb7+GrsBqmsns2BrjGcIhYMT0H2CbXcRvCBgp38VWDHhmaTZQj3IBuygYWyKQ9/Sgg1pWEZhHXuLhhrmxc2mgIFzYIhR/QxSFmrDgnqf+Xo8mtijMr6lQ1O/kP5gmCwOz8Ej8JEJwOxrFpeZyvIbwAtpDqMdnEM4ugr4jW0TXeuRvo5CYqJauBVJnTgXf6DP6uOdN97xTcDfe4Ro6LNNbFtG8wkJXkigp38rvgmvQqDE3D/WpHkMbFlhk7HX6y45pET3opBS4H9/fYhP0LQm7l1TkOZ0myNedMk3vRipLG1X7CPEgwXYpbuwa7qsKZMTqFNQRpSaJTgfriyCXMAANTgiOXXnOM5W5mHhj7p8F2tyXcwbuHXjfTLHIpWt1JtXZVarwEjqbeHBgC/CLMu4eZhaTyb1jFuxd47z869kWqNXVb6rsP0zuiyMckmxUm+IA79McUkakMZq8g7zLq6A+wh21iSr0IubfghZLmJak4WhPbWlBV/7xq++zH1FI2Xx1uwxvc0wajEo+mJ20s7RxLl4zno3zMZuDpcGGMoHmGpZkblaEqziC1ztQ6iSQWlbhU4zNtj4ntr6mEOyc5Y7KAw7S+hOGD8Eq2D45wkXLhYrZQm44K+iVTo04t+keu2bOeqXEDJsw/htd42HC9Bo0jGMOS6wBmDfxE/2MIZt+J4VVieqqKrQBzvaY1GT5H8sD8WyGdQs22vfU3OrLfF8Yid+6jPB0oO0nr+uEoDrJX+sPu5Sp10GpP1fJWL3trXrDGKtf1RLNcCEb3c1U/i4Q7rUVZktvd2+L4uxsYd3yzPCbvkaT5wp2X+0tmkEqrk9XL6fGfVV9lqT9iikQ8juDFBeHBK2u8kR9B7kg= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d5517fd-50ff-4827-1ceb-08d9be3583dc X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2021 12:38:50.5396 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ayi9dlDImYKAz3fXLeQoIdQTJ0d4lR4NcVWTILNAw3Vk8UnDQjBD/NETlNyj6R+B8sJEH3jgNqO1KqvfK0lSkQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5595 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 13 Dec 2021 12:38:59 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/159621 From: Stefan Herbrechtsmeier Signed-off-by: Stefan Herbrechtsmeier --- meta/lib/oeqa/selftest/cases/recipetool.py | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/meta/lib/oeqa/selftest/cases/recipetool.py b/meta/lib/oeqa/selftest/cases/recipetool.py index 1c73b2c5e0..5330d73cbf 100644 --- a/meta/lib/oeqa/selftest/cases/recipetool.py +++ b/meta/lib/oeqa/selftest/cases/recipetool.py @@ -592,6 +592,68 @@ class RecipetoolTests(RecipetoolBase): with open(srcfile, 'w') as fh: fh.writelines(plugincontent) + def test_recipetool_handle_license_vars(self): + from create import handle_license_vars + from unittest.mock import Mock + + commonlicdir = get_bb_var('COMMON_LICENSE_DIR') + + d = bb.tinfoil.TinfoilDataStoreConnector + d.getVar = Mock(return_value=commonlicdir) + + srctree = tempfile.mkdtemp(prefix='recipetoolqa') + self.track_for_cleanup(srctree) + + # Multiple licenses + licenses = ['MIT', 'ISC', 'BSD-3-Clause', 'Apache-2.0'] + for licence in licenses: + shutil.copy(os.path.join(commonlicdir, licence), os.path.join(srctree, 'LICENSE.' + licence)) + # Duplicate license + shutil.copy(os.path.join(commonlicdir, 'MIT'), os.path.join(srctree, 'LICENSE')) + + extravalues = { + # Duplicate and missing licenses + 'LICENSE': 'Zlib & BSD-2-Clause & Zlib', + 'LIC_FILES_CHKSUM': [ + 'file://README.md;md5=0123456789abcdef0123456789abcd' + ] + } + lines_before = [] + handled = [] + licvalues = handle_license_vars(srctree, lines_before, handled, extravalues, d) + expected_lines_before = [ + '# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is', + '# your responsibility to verify that the values are complete and correct.', + '# NOTE: Original package / source metadata indicates license is: BSD-2-Clause & Zlib', + '#', + '# NOTE: multiple licenses have been detected; they have been separated with &', + '# in the LICENSE value for now since it is a reasonable assumption that all', + '# of the licenses apply. If instead there is a choice between the multiple', + '# licenses then you should change the value to separate the licenses with |', + '# instead of &. If there is any doubt, check the accompanying documentation', + '# to determine which situation is applicable.', + 'LICENSE = "Apache-2.0 & BSD-2-Clause & BSD-3-Clause & ISC & MIT & Zlib"', + 'LIC_FILES_CHKSUM = "file://LICENSE;md5=0835ade698e0bcf8506ecda2f7b4f302 \\\n' + ' file://LICENSE.MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \\\n' + ' file://LICENSE.ISC;md5=f3b90e78ea0cffb20bf5cca7947a896d \\\n' + ' file://LICENSE.Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \\\n' + ' file://LICENSE.BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \\\n' + ' file://README.md;md5=0123456789abcdef0123456789abcd"', + '' + ] + self.assertEqual(lines_before, expected_lines_before) + expected_licvalues = [ + ('MIT', 'LICENSE', '0835ade698e0bcf8506ecda2f7b4f302'), + ('MIT', 'LICENSE.MIT', '0835ade698e0bcf8506ecda2f7b4f302'), + ('ISC', 'LICENSE.ISC', 'f3b90e78ea0cffb20bf5cca7947a896d'), + ('Apache-2.0', 'LICENSE.Apache-2.0', '89aea4e17d99a7cacdbeed46a0096b10'), + ('BSD-3-Clause', 'LICENSE.BSD-3-Clause', '550794465ba0ec5312d6919e203a55f9') + ] + self.assertEqual(handled, [('license', expected_licvalues)]) + self.assertEqual(extravalues, {}) + self.assertEqual(licvalues, expected_licvalues) + + def test_recipetool_split_pkg_licenses(self): from create import split_pkg_licenses licvalues = [