From patchwork Mon Dec 13 15:05:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 912 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 C0F6CC433F5 for ; Mon, 13 Dec 2021 15:06:16 +0000 (UTC) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (EUR01-VE1-obe.outbound.protection.outlook.com [40.107.14.88]) by mx.groups.io with SMTP id smtpd.web08.12074.1639407970721331560 for ; Mon, 13 Dec 2021 07:06:15 -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=LaxHbNg4; spf=pass (domain: weidmueller.com, ip: 40.107.14.88, mailfrom: stefan.herbrechtsmeier-oss@weidmueller.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RnMMBBK5ZE63L+TvYNWi8FV90vLBfwAvxIQcTPqecP5gByKpdz1DChacwo4c6kvw2eK4RPAKawQku5DJ1PqB6WRIx1z+1Nre6OgKTjQNvXWTTgyTD7HHBYGHn7qvcTbqXDbqw8P7oMOAMdF6+x+nZwPmYdAN1nul/oXq/24lQDBxPSpEYyMo8y/H2QZHIPavVZMfr2CO7sRAch1U6/T67A6+MM8t+M3W24aIgB5C91zTAtvgmzzrgirXiO4AoRuoTuhsfOqoC2yDYq8HMVwtGD63vwXVb6vuBcJDwz+zcSQ1hXSYgcLaTi9a0x1sstSd8bL9YBJ1KjZ8gSQXVS8vJA== 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=xnZfylpRZ+c/xpG/FVuWL9yWggDhgKhXc9ryGeUk+ZM=; b=l9l3OWzbjvwX7wijwr3XP9MpXQDMGgy/75Y4f4a2zeAxZylB09cDyPCL3aTUPcElmTlejTO0K+g1QLBE+4UFV1+huYnKMw31ssCDCBtgelDjP5gTyQJIoKzbYxP3kvLa6gyucxrULviz6uB1caj976U9Z5wc8G8Fj16bWL8z+RuBdKdTVhCI+26tZRGmuZfrIuHM5/zUT6DqXKSqTqqqidnqxtqTRm4anYgy+4+Gu3gadE9npBAoGqepaM04GhKZF4exqMVgy2h2IkAGAQuFY3r+x1Bg7jxvqJBf487LcyFzW7ZjD6gsTGzB+ZMmu56e167t0N+YrJFRXlFaSsB2Mw== 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=xnZfylpRZ+c/xpG/FVuWL9yWggDhgKhXc9ryGeUk+ZM=; b=LaxHbNg4KUJf3Oa0MuGWw9POLn+pb7cLt2T6gclwv2gu281X9SgoW2tjIE+xFlwyH6vS48XF05o1n1pU4eLJ9gnwUbde2wCGRTjTyAypL5lV49R3nkh0KrSCuuVdE0+LvzKJ3B9U/cWqt4QKcUB1tDmt4u8RZOVt+5Jz/KqAzgM= 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 PA4PR08MB6317.eurprd08.prod.outlook.com (2603:10a6:102:ec::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 15:06:07 +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 15:06:07 +0000 From: Stefan Herbrechtsmeier To: openembedded-core@lists.openembedded.org CC: Stefan Herbrechtsmeier Subject: [RFC PATCH v2 1/3] recipetool: Separate licenses with & operator Date: Mon, 13 Dec 2021 16:05:44 +0100 Message-ID: <20211213150546.22196-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 X-ClientProxiedBy: AM6P192CA0059.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::36) 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 AM6P192CA0059.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::36) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Mon, 13 Dec 2021 15:06:06 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9994aef2-4e03-4f34-f2c7-08d9be4a16e4 X-MS-TrafficTypeDiagnostic: PA4PR08MB6317: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: WsagQVgpAmDyhPeEiISI6UdEqd7ipqZS0EeCjRm02CJDbf5FVuW0Jyw+kdjkNOciBitckfkPj6XZ5+IQnvcK049LZVO3QvqceuG+LMMZAY1q6wSaqVdfNx1nOWPv0gi04uq41OvpX14WS+MRchkFzBatZpn1jHgpVEnoITKek/loN7NJd4vI7MAZEMfWAFci9MUusmnQQHvdjn8t8RL7t+xd2SG4GmYW132H1SmPtKn44aaVfiv/i4YxFc+u9vbZHIaw8hlH3lJJtMThqu/tSL9d9L7UkfiUFf6kYzPiSWLx6AMqtQ40SQj3Lq5QV/bQOvAKBH5z4di8EmSvLFTEQ4/9bJGN3oLxxPcksxQ7EPU1bj4QRxuS3XQX9z1AeRvJLldzxKoCDwHR6hD7uMHsWMz93kMM3do+SLXv1YPGdGcmhEoy07JMxgNjDTnTLiAeb/3B0ncHvaTvIgO2I4sue1Uyq9ygY8VxNbVVokN7IHye5t/kryY3/RgAsD9dG72eUxlr4Yae3FjuSzOzaJavJFSTe91fd3GARFzmHmRRKsaBgWl9VDHz2RtR0n385gimQHVqLo+5GK2h3nHZEPodQu6LLys6+u4Fpzxoicusena7tFOAyB5WzhnYzHpoczuu7tTf1kATArYXbvCF7b0h6VvVqZeNyn4ZhDyF13KJf7Ve6iKDhxZD0yZwgST8H4vxQr98xW2oW9Q/YcoPeojFy2/qh6eCDumrqF+n03gSriUvwvyrRW8Oj4EawMFh25uzMxie6dR46NsBCaPRs6iIhg== 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)(4326008)(316002)(7696005)(6916009)(36756003)(52116002)(66946007)(6666004)(2906002)(1076003)(66476007)(66556008)(8676002)(5660300002)(107886003)(508600001)(38350700002)(86362001)(26005)(8936002)(186003)(6486002)(38100700002)(956004)(2616005)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zwEtOvhhqbdiTlSxjBbs5XyRjzaU5aWm58AY8kf53MFVQquw7hxxKqo62mpyxl5BBP+bXfbt1l4Bnvotp0iBppRoF1E7W3PJUo5ScLN37zmL63rLKAeqTXI63NDgTK+oGn7SI3yo2oZ6i0syYOTlwFFYBl26WLc36b4gJVLntxeW1a8d/n/q2YNdt3bBCGnkasLGwpWzgeTMG+4sH83UqGSsP/VBVFmgBH6TeV0t/7Lg6xbidenuwtaIEQ9yaNvOLm/GZhKh6o5ky8vX4Y+9CIeBcDZm4v5CtveLEfThKTZ1re4rq3C84Jn9xDj/ns3Lb6O5UxOxyl+ZbXdnEQ/edXHb9TwH38F/lycuyY89lNmkll3VXYkPnTtuK3os6/VLToFk/AQM4E7gluATR02ztlq8vpA5h6/vB7XognmcVxzgWYiGyCMO7qspopYueIijc+wjYD3WIeOR6/P9OKcQ9n3e/8No5q0ZQ9yMiL3inGgkXxfWRg9yazAZPbOHIlJR2637T5xbLTNPfeUT/kJnF7JhB7T3rpuUc6KRVhl75TLggk5LDuXinxPG2VdItujT8p9p14lLp2sLwP1+ZtvDxvMq1KBF/wiJzZe4EMDEX3Ap3qbWiS6NHeazjqeipZqJGsqK8YB4mgPsPNOjvB7M4dBTmSPP4hR6Jve/k6CDsqLE72fZOUyUT0jyqkG7AydniuVfOM9dCWrUM2S+fl9j9scZM1JaOcXnLc2Bx4S90DF/NuNL/UesWm1anlRdTgrQEhS7JYyIWKYzLkj9BEz74v/xT/Y6GOFCYBm3mAiKbNnSO1MKxwGh5rKLQC3fm/8ZSm8jCfL7OaXMjNyX2Hhl6C3tvYSpITtt6XG6UsAJjjKKMLKRRYwFzOH8D+cFbFySc77b/si2ZHseo43UmI3AyDgBmbM2GcTH1/k2byKI1VK+ENKafI8ye07reyEYw96ESyd0Xcws2j74nHCjLQ6E/RZPpDupC6Zaq072Ew7GMLtSmzxAq/5160YVTL65q7Iq4QGMXTtAgRUbRUuYOKsUAfUwtJ3B1+2YYYwsUPGXY2T/mInfXHbrh6zAryjeUZiLTkaccJ2PGxcZSNz6zBhh6BSVNi3Vo9RsCQ5jjPzYZNdh9/mboG6iD0itXayegpLUrqW/ZioELOoxGh2GlT1LzJRS7xU1EquRF70A3NK9pMWCT7kBMS2O3Tcz6G5Zr4Y3SVOQLNEEplqQtK2UsVZnvwc4vgILVzWsTSYCNMdMYt03HhMoiPTrn7kj0exA+GRZJH3CpQlzLiok0cFz5SttaFUoZ0TqhcY4GnwMHa/Ihgs0kuTRjM79HoyEpeFdYOfhF10vOyuuSzWms0KpgSrYx/REjRCtiKm8W9wreoFZW96VkcsIZS0/3Rf0/2E3KGJLlBYROvr1JBNJpYSRaZkp8741FoGemW6atQpxUt5LsGtvA9Sjf16LsDi4GeFLd+NSl9Nwb5R6CSsMU+QzZI29DmR3qQnfS6ngqGRql/4wpfi0Z98AQjceVUQXUIc3x2tL3Dj6T/cGPMPWDTQ6+PiUPGlLC7QGk68nwSZZjNVh/1ULJI43+c1bieSdPhIQvBflbQViA5ifv4DjgjmNN4x22OYr+JNrhZHtmUXyqGeO1pk= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9994aef2-4e03-4f34-f2c7-08d9be4a16e4 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2021 15:06:07.2926 (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: GivDArtNSfhA+5kVz5rp29OyqBMYRp+Rcl0VZyZ3CmaREX/6e3ABGE6EQ5pvOPGNx3mPWABQCw9GPVKu/Uwg3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6317 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 15:06:16 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/159641 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. Separate package licenses with & operator: -LICENSE:${PN} = "MIT ISC" +LICENSE:${PN} = "ISC & MIT" Respect | and brackets in LICENSE: -LICENSE = "BSD-3-Clause & (ISC & | & MIT)" +LICENSE = "BSD-3-Clause & (ISC | MIT)" Sort licenses: -LICENSE = "MIT & BSD-3-Clause & ISC" +LICENSE = "BSD-3-Clause & ISC & MIT" Remove duplicates: -LICENSE = "MIT & ISC & MIT" +LICENSE = "ISC & MIT" Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) 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 15:05:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 911 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 DE100C433EF for ; Mon, 13 Dec 2021 15:06:14 +0000 (UTC) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (EUR01-VE1-obe.outbound.protection.outlook.com [40.107.14.88]) by mx.groups.io with SMTP id smtpd.web08.12074.1639407970721331560 for ; Mon, 13 Dec 2021 07:06:14 -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=CyEG815W; spf=pass (domain: weidmueller.com, ip: 40.107.14.88, mailfrom: stefan.herbrechtsmeier-oss@weidmueller.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KcyUSWOeX6AZ6nGlzPpmB6P45Y7Lyc5GBcKihK7x/xiHhq4J80KFoIIZ+UP7zDRajUvSDvit++rBLaYLX5N5VZK97fz9CFuBsiju3pZXnQ0uG3utoJYqZRxica/MKIME6A7uQ6nhq/EXEfmuh5k84hX+VBh93aJPNQRUjiCVzEZs+uabmnf4gIpHrLP8kkQJlm+0B105RcxjLUW/Yw/iePivg6sp78NJ1Sd2J5J1mwg8qbcJnMPbgmP4RBqHgTec+w9Iw33ebJ85gPOs99VfQz5uL5TYNe+cWcVvrlla7PupSB8IzGShwumxbVvL0pVR8tOVRFhRk6SkyjYF045MDA== 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=ktlikhEqPnPNewZrNyzVw68/Ddno7d2GXTs+5Sojr7Q=; b=JwK/V6uypDvpSEkwIx0W141d/r+8iRYjOyFLgOMnjOHwh/0JzKMET8s/T7UQLwyP+HqdhWTtZdeOadaD+jzqCzXeMa/Jx7sGuO6FUG2PaGqdAACPxg2TDFb0jCn8X/f//+Y0eea4D47yQ0NSGNvkkJJOUHeDp5mG6Xi4rox+tZaArYdPF6k9o7ntQ42l7GNHC/6awe5csuskK/DyLGUSXao/C4q63TUhUqyfjsEISAUoEdVHPvo3OXz9V4IElXBl8AMW0TzNYI4EJ65TDzVHRO1F+Tt7VRM5+6zXM0C5aOcxe32HbFjJeDKF2mweR0azu4/GVUEWaGWu82au3zgzEQ== 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=ktlikhEqPnPNewZrNyzVw68/Ddno7d2GXTs+5Sojr7Q=; b=CyEG815W6fcsex2Upot9QprrPQvJzI2fAeGjFUyFZ1C1QQGG6KNCHc/KCPGNFyC5VHWw6MxiGeZIO8vozUui8xbPq5lmztNOxT/+GLj8iSaIcYR1DejB4dGWooYdX1H6pKYv1vNqD2LCEdCICzWr1hOpjShteY/rei30P4e+/MY= 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 PA4PR08MB6317.eurprd08.prod.outlook.com (2603:10a6:102:ec::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 15:06:07 +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 15:06:07 +0000 From: Stefan Herbrechtsmeier To: openembedded-core@lists.openembedded.org CC: Stefan Herbrechtsmeier Subject: [RFC PATCH v2 2/3] selftest: recipetool: Add test for split_pkg_licenses function Date: Mon, 13 Dec 2021 16:05:45 +0100 Message-ID: <20211213150546.22196-2-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211213150546.22196-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20211213150546.22196-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AM6P192CA0059.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::36) 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 AM6P192CA0059.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::36) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Mon, 13 Dec 2021 15:06:07 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 042c17cc-0ad0-43dc-3310-08d9be4a172c X-MS-TrafficTypeDiagnostic: PA4PR08MB6317: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: M0g9toI6DxWlaS2qg2BY0SmSfYNWtKyON6OkXOBfHN2/8wmNi1uzE2W3HZBmK/jq5A0eaGXzpK9L+ddXi+ZlVGMOHyuLawXbgL8RFm5poXj+4Qmg7sv9lUpzM2G+sneeQWNOXTeuH8HV4ExVpjktWF2cNfi9ZZEO8Y0iImmQw6KbRC2gc4cdOYgXgAIErkGYYWo39mK2TouJhFCXZnSGP5Ti3c5cdRn1fNGQOF80NwGr2oPdQvGaLkNDteDJmd7/U+bks9Sv1mtQ1P7ZRM37WFuEUwtNQKItA/WQrwGPzkehOCDgg+uVhzODZgFMWRXCCrI9IhtLxDN3g8E/N4Kw4s3dZUCjJj403P/LI6cobxTJTJlR+UqElEMD0MJW0cEfyh1FeR6dOAAze0vfBbA9l+NuwsbIjIpbE5DSDcCK5m8AivLQOt80qYlWmZugJ0O0IUKUdY6rR0+c4QbbJ4nGyyKZ+2uIUo45u3cWU7bRh4jBq1DPi0d1FsAmpIGN2CWwzCRmCDJjVdFsYJs7T/nAaBKJ0ziVSTNu2jxg62uRSOf3NVpFnKIoBTQiECVKeYeP83JPb/wNCl8+VQFZTbIrZ2WEHWAEpcAyLF0mY89qXroKu3HNoV/2W43XBpQ1cYAddbPo1EPVk4OUIYiS0VvhrL8YAinYCjyp5EyRr2MeKmNISQba/9QxMVH1/VZa80E0P0Ph+7uaV6xoep96pwDXOQ== 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)(4326008)(316002)(7696005)(6916009)(36756003)(52116002)(66946007)(6666004)(2906002)(1076003)(66476007)(66556008)(8676002)(5660300002)(107886003)(508600001)(38350700002)(86362001)(26005)(8936002)(186003)(6486002)(38100700002)(956004)(2616005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PpPMTZKIleXXQuI/4wh05m8dampuLteoYRTx3HVVgbv4Yuc6GR9mDKyLcjpmuMcJXSPsebhojFgTxO/X3nTouHVnqEhXvXzjPAVDqUWF7WIX/dqqhzsq66PzCMX7m1QvpSk9NzqaMRLAR/5gisKPLBxFmidRNUJUURTuMcqj0o+kPqNJU68wYU86icS1F6B5xP7ykZ6ur8StyZNnkx3SvchDuHKVm2pEGar2XkhTxo0pAiM05WYbvl9sJYtS0FMtysOPR6FgXLzJBTpk0At6q5BJrpyfOrcOE/20y2ST3tg/kPyKCZdx52S482e2RDI+AsQmiA79cU4wc5ld6io0Ct/yMJdObufGmt6xEwSArDiWFSG5P3AR6bkyxNxFVdROnhxSj0bG5rXYTUQHeaaKCg0+gZZbzIefR1WokH7BPU+1MSABcXjZ2Rj/FwUYYRGd0YNwL3NT7Pb2j5vIVLo0NZyyTtwgXuj3HlaHxo04PhqBCR2dM5NXYrJDzzpKiz0jBuLbYryt/T9FYxkgXi20NiNXDDJOFqqxG7/DU2t7gonSMCuOPUdyV0eKLrNgUjJZ0Y2zrHQ7wdMWseLQpTsZk9jLSvHU95ccySGEQXh/pHvWJGna0XAjS/E91M0B0JqBVrK8Ku6ZfdW+P8aB7mrqioipuKddRtnq8b50vgFMRiXjJvvsTZEzyeM754jgdD9Tbc0DRtoksZnzKobwSYe+Z+Q0BeMA++otosKQRdUGl7by+L5m+MM51onpnxXynpWPUAB8kLcRn7/wRzzIvsDKjwcp0mGMcjJCKuyhKmnDb54srY+nrFwZc/qKnAHnlZOXJThk2u/nLQPck244plmyjRtHD7I9D8yV79tpqvFCCuFy+FgdLSmV0nXp1246RRqmfTRVuKWKcRoCMk0M1KBLsW2TK5t3fc1NCB62EPboSzPssiUb5m41Sk486KN5lTp4dupMchcWr9kRMxIFWBQ6hCH3JNkL0ej2ATg1A3t+r+ZXOkAUbRWfiuZaB8Asy651NtYVaaRZZQIIrb/QyTJKcOR0DCeUb1I2e0IrU64KOEpMwNqfX/QdJCko5BL1+H1V1RFXR6cFCaOYi9z2yY2axoJc4Ent4pP4UJ3MlkBGk+VJ4svG1ck3bVwVHYD9K0FXUzwEDvrwjPuSLA6TRHirrmWXlKcUHBdLaeQuCCxp3710WR8NCzxkpsKPpP5cm2HTgGWChUzeh882bITeLwu9F37567fjFC3MPpmSZpb5VZPVH3JdgVHmmukC5f+Yf6WpU5XwmVsQjoEPw2Pih+EQyBK98+diuPA/+EspuJQeKntBMMr8ERTryOe7kscErkLQ2ZizIsfkI8N/i545uvv8ohFUw4EvqDN48d9Ayq15Xx9lOPUgRG2WH593DeENKHd1JCjASreU+U170Y0Vsb8gW03KcssKnEnnxPTX12hLPAscHXqYPqa4rEUnD0KO5fE87WhLYwe42hKPks1Nv1FOkRP1sHHGzDN/X7s1hltG44pCKoGD8AofWDOXd8ATiRlphhdcqm1I4njV6ACOhJHMH5q0ogcSlSceZ5BO9Axhs/QU4v10qiVzpE1yYthV3xa0o48P3Ad76d6SBz/gzyVNfjLZ+ROPIw6hYmHdXEfU2vE= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 042c17cc-0ad0-43dc-3310-08d9be4a172c X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2021 15:06:07.7187 (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: Gcz783Z6wk739I5tf9YY/c9SsWgpgjRVUHTUZGbPzjRGk6TtlvNaEqFoYOp+se289BrcUBvpXBZGhgX6ClhkEw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6317 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 15:06:14 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/159640 From: Stefan Herbrechtsmeier Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) 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 15:05:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 913 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 AF8CBC433EF for ; Mon, 13 Dec 2021 15:06:18 +0000 (UTC) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (EUR01-VE1-obe.outbound.protection.outlook.com [40.107.14.88]) by mx.groups.io with SMTP id smtpd.web08.12074.1639407970721331560 for ; Mon, 13 Dec 2021 07:06:18 -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=HVSfgODI; spf=pass (domain: weidmueller.com, ip: 40.107.14.88, mailfrom: stefan.herbrechtsmeier-oss@weidmueller.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EdvzRzZOHQTib0MH0Yag3kBP876w4jEYqryKDQxHjnrqX6GWXm218/MRt+wnmb0OXyqOAwFJknq+BvZ7J9ldJBrXbZMnkJuGE5zDxDuPFxSd0XDn6RXHp6/wFfH2dSkpNW+/snyn4Un7OSsk7MxvvrbCMcVMp0QfT+zSRxIyBvyS9DkzBVizhKsNd1VodUwVM2KOGRrVPP6YhPyC2d1uRemtJHE4H5SDBn2wsEmZqcRR8pIKg6SgvfKvjsBccacVoFcXFUG0Hock5R3S8GH+n7FdFMzitcAT666KbL9eMFxyJHsZMCR6sNkGOSalrZ5usHqjiisjqdoAgUrJCu5zOA== 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=mqOC5ozK7Bt+xh+/+jUXzTAT1bNWoJiTqWPAhwn/I4Q=; b=BuYl6bGXvysE0JPX+IBOLCxWrLfPx971lYmiAbyI2cdn6kfDQS3DTs+9f1wNcaVQ4cg6In7CJl0+SIwobxUAaxGi9eizXNUtPBZqpAmsylRsKtDqiXt2LbPsyMvtiIqY8dzIVaA1OM20bEzhflXFl0xID+O9TPi35fu5bBavvBKNrndCuX/FhTZvGUDjxM9cNKjLO0UwxSIxB5Sbp8LMJwFejd3DJ5TGaqpycEy1ExZjEhO/Lal7u6cmJzKD/jZTitwMtHVbBhMOvKBygHOy3B+EoTW+Eprt/3H95XgL2mC5PYttHTytJmdMdLCk9mbBfQpX9i7TIVNP9clRchb0uQ== 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=mqOC5ozK7Bt+xh+/+jUXzTAT1bNWoJiTqWPAhwn/I4Q=; b=HVSfgODIgwbja4DKaScKcpzvEJXqgGx9xb0XW5NOwmOqvYuNwzTit27CAMqMZggWurRBZLC1Gk6otofnJsXtIl5A9Ts62Jvu/LTPZN+48+wcrclRsGLaxKjVAjS1LHd3Oqtk6vNGLXfpQEupCaBUfCjlzBn4bho5BVhErWCOkbo= 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 PA4PR08MB6317.eurprd08.prod.outlook.com (2603:10a6:102:ec::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 15:06:08 +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 15:06:08 +0000 From: Stefan Herbrechtsmeier To: openembedded-core@lists.openembedded.org CC: Stefan Herbrechtsmeier Subject: [RFC PATCH v2 3/3] selftest: recipetool: Add test for handle_license_vars function Date: Mon, 13 Dec 2021 16:05:46 +0100 Message-ID: <20211213150546.22196-3-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211213150546.22196-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20211213150546.22196-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AM6P192CA0059.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::36) 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 AM6P192CA0059.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::36) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Mon, 13 Dec 2021 15:06:07 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 85fb4a35-974b-49aa-9d3c-08d9be4a176c X-MS-TrafficTypeDiagnostic: PA4PR08MB6317: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: Gh6lfF8w6HEpJI2Vni/qngfjD33Allro050k5kW4El5V/ZM8GNNvS6Rhvc3fDQPRm8CIpystk01fwqiGKg4aNWRhbHpd0DXndvzb13/efXrLWW3reD29Hp50/mZrJtZwZS7cfA9Wat4Ao9E8NAaTDl5pljflHYqQqzcJe5Jux8DmfqGFZQHy3ufH6x+F+5+aluqE7HxaIfQzwAhgYhjovMcHTAEqUSGuDK3ZoL4frO3s7Y4jQg7P4AQ8O/HtDt1vUslzkCAj7a//opYnrWpaGOAeclbXKMNKKcmDm18E7ml01fgJAk0poSQo1kWF567OPPe9knOkoYinJ6vJpu3+79avTXOO4aPLjvJVKcPItMy/KLBu+IVKgi9gIROzvHO6+xf9VX9GU5zbLh/+74II02wpNoyT0e/jIQ8jAM3UeBhXOnEAFrt8N5kqL6DMhyyatzrCCXpZzGjyEkJJ4i+Sj3xnhnE2RAcezIpvd9Fd0BnqTg5+AFBM3WGQIZrhinmm07NVNEw1N+TLSJR7vzpW0Grt1UeAOSFjgH/0yjx3iLJjBOJ3O0cIR2IWAK3WVOBuDV7RpdDgnd/MVsUdUWJrxzXgN40riUPgJpKHPxtaw4O7gvgncqYDJAA0YrziqPVz+32woNZiVY9nRsgZ8sEtLlibZfhpQH76pboHNZEtlIVAYwEQXpCwfL6O7arp1k6RMbzHZeigBDlclC+8CCXGbw== 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)(4326008)(316002)(7696005)(6916009)(36756003)(52116002)(66946007)(6666004)(2906002)(1076003)(66476007)(66556008)(8676002)(5660300002)(107886003)(508600001)(38350700002)(86362001)(26005)(8936002)(186003)(6486002)(38100700002)(956004)(2616005)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: U3gIYkGDDX3gMicOlM8c4g/0jaINViLIrTARu0ZLBdNWMOpcOGSQ192ohl6OBSWQtjJD4ODQFYY9Jejt7PmBHxtaqe9CKkFUWf6sWGxO1SzanUq6wr21YSXYoTcUHOjeTDLL+hAIEIQ/r8k+PXgGYA75hYhDUc4ydx+DISqOnpB1x4bpfQJD5S9Jf/E77d1YcVivrEFoe8H10gmlaFpXvMC86SeNccJM8hiJlofh5bHtqsV9CvBvE7goftXU4fcPjpYSKTUQTgBDOJwtJBwFGo3LELgNlVATihzTiTHBE/4atzkMJMSqvY3i9h1UlpxuMy1BzwSTFt8ZdoF5P3NSb9fvVvryqa8DIwwk7CAefILW3V9ag5NOD28/zoc98XQCKVl71Z/9fIa1FwrnyXy8cwCfuwQzJZRpTb8O0UT+WJZ5wOjnjji4p4JdOfThN5mslyKqMfnbD/Cb3li2XxVCXqoFKNzsSEpwdWy3wvoW4a1djhQHpkTjaoPGi2vz/s/+qizzxmI+ZQ6h3uuWXjj9d2khCcmxaQhYin2AS8sXnNGdSi//iwNGx8XOLH50UFxi7PeiJ9IHADeL0CTR3X0pdFNyGDlzseaCycw5nrxMTXx34U3Z5jDY8zLW9IiKpRe1qF9L5QF/WfC6BQP9GHsxvRSEb2e0Cw1fkU6Zq7MgYgOvVwNxYuPLuCX+L5JmzFSwI+5e0T6ko+Z/OwVXpPSprEmsVGioY8pSa3Z0/f/5zhV5XBPssSFzXy/enXRz//Cx5WEktcZ430ebmR7xJmmpCm51bfpRLc9cDEfWHeOd5+tzTxTrcfh2zDmAqRTtpyZM4kJTTWS/nZe2PM5Km8kcYIcO1yfiswXK3K7WENnro6Gw6uTxVN1+gJ9xcvhlEaOwR958WP7o2YWvVwQvekqrY91g9+V6PXUji+dlRO8X/c26KQnLPervbsE68LWG82ZVX9BX4ygHtOECB4tqGHQ++Sf20hjLYTtO29exnp2TuoCOsEUfjXBJhAlCKyxQrDb6EjoR6IbT7WZZh7vXkKKZ0Gj7Opf3yE2yLbvlJekO9XcTdPOXNB0BPEnhRgpQJCjb8nt7CLb8s0hkSiyLBYgrto6qSE8P7qRSFuIfWbr1NXo30Ur1dv5GsW/W9ZAg+Mlpqc5G354meGN6I95OAAlssGRq8XNScR0i3p8a/XYnLIa0X7J00THbY5994RQZVJnlD1+9EyY0xm+kvoJFGvPc9vyFgv3s14s4tAW5PfAEy36lVcnedqIi7mbnOnz0W1sG74LPr8eyWEXn3OkfZAYCruXSpvb7N6CRzN4RpqzZ3r2030Gb0jvVr0YkZFeBMwtLq/VCHvvN/waFG2Xl2QdIZXkC/LUnrUlU2BZCIvSXj5voZJxMNvEOwKYjl06Dy4ZDthtn/egOHHZINre/hKZuNbFKNiyrruF3r7Z9SWEadWA0LXvgSOqpb/6C+5bmFXuOATeypqA0Qq7qYQTRNK/Cj/DQcgMbLZUsVdOdpCwLSNJsgVG3FsSeaDOQ9XFRnp2Bhdv4zAtLqTsnv4oaBWsQ+rnW9fL7XpjrFs6PstIS91KwgAhrqQhkes2cNXDqy1r3MteWR84g5M4S8vGHDunf5y5I2LBCgrhD3CWhbo7ukG8= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85fb4a35-974b-49aa-9d3c-08d9be4a176c X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2021 15:06:08.2802 (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: fc4UEJ3Exw2BhLXQRQbcDKVlNYQt4W1jnxXXXto3FNVn/pwZY66SRkUp6igxyqapD3WiXlTmzG6S8qFL8hWXvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6317 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 15:06:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/159642 From: Stefan Herbrechtsmeier Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) 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 = [