From patchwork Tue Mar 31 16:06:51 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84921 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 3B0D1109B494 for ; Tue, 31 Mar 2026 16:07:07 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.24317.1774973226660700639 for ; Tue, 31 Mar 2026 09:07:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=Ail9XdYl; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250812.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V5i48A352519; Tue, 31 Mar 2026 16:07:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=9DbXTTApyr1oxfRG351I6WsDlIPDW/JO0fqB8YhPn/o=; b= Ail9XdYlwfzZvEIBBrp+kqT85Ns/6PmoTNFZzyGEamm0v5jIepWmjBZMzdRcGJjV d0FB+Xu6ieNdLNjmD2iuZenYpvCZKW9h2F8Dyilx7g3IU5Dmw23Xayf0t2EnfjLv X7OY3eNrjBgzSV4AztY6bcVvz21wEBPDulkZw7TccUOPUN7Udxl0b1Qek5gFQO65 xWGeCKJwI3ubYQqvM3yp1M+zaUbtAKKfLVV0YXCrCc4aGjhmMIfQRvq7cw4dJ7zG SNyACzYDbxXg7djMAnApp+yGMXaRPt2rW8baMD2pDvC7YN3X3HFmoYbRc+0DK3ft 9GPw9d4yoK1VFaeUKJAMvA== Received: from ala-exchng01.corp.ad.wrs.com (ala-exchng01.wrs.com [128.224.246.36]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d65y4bxjb-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:05 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:03 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:03 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 01/13] bitbake-setup: Resolve unused loop control variables Date: Tue, 31 Mar 2026 09:06:51 -0700 Message-ID: <20260331160703.3137930-2-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=QaZrf8bv c=1 sm=1 tr=0 ts=69cbf129 cx=c_pps a=AbJuCvi4Y3V6hpbCNWx0WA==:117 a=AbJuCvi4Y3V6hpbCNWx0WA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=fTW__CHxibyLmBMfj2wP:22 a=t7CeM3EgAAAA:8 a=IJQjoT7YMls2vlgdCqcA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX/xl+dWhmpmep 2G2BeTTAA9BCw3lQEhf4uitnAzd05Ubp90HsQyOmP8ns/780J3J77xQPqxjj4fLAKViX7w3zhXY c3+IBAC/+CyJLAeEwQ/DpIi0YJ9oqXBxyZcvve3JcCP97JBGiTFcNg8lzvRK8z2qauhQxinWmxx 7ThHCJfArG4cpXokjIVfRzx1K0+Ogxx1DW0uYSKzIX2Th81PEARKHCz6hAU9//DcD31wKHa2eoZ QE1Ga9pgqDREqJi0LocCRcgO+ZYicv9rnR47A3Am8AY0Xqqe4UUB78Pu7BF+l1SKVC5wJmPZlcA A5R0oCBothC2WMzhZzJNiOr07e00Jo22FISlUbwyUT+aNDw8C5h80TITEJ1WqbHqYWk6xpmtdRD hzieh9GcY3seD+k55sHqFgrPdqyuWNpVActF2cUkFQagUfCcsjjY2qF2H1hW6aA6TYHWJwqAV1C pDNo7Rtwre25+GKlDIA== X-Proofpoint-GUID: G5PiQoy7IBogT8fX2uwnOajSWe22jfKa X-Proofpoint-ORIG-GUID: G5PiQoy7IBogT8fX2uwnOajSWe22jfKa X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 suspectscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:07 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19299 The ruff lint tool reported loop control variables that were not being used: B007 Loop control variable `dirs` not used within loop body Adding underscore as a prefix helps indicate that it is not being used inside the loop. Signed-off-by: Rob Woolley --- bin/bitbake-setup | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/bitbake-setup b/bin/bitbake-setup index b02cbc2b1..304fbe6cc 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -134,7 +134,7 @@ def commit_config(config_dir): def _write_layer_list(dest, repodirs): layers = [] for r in repodirs: - for root, dirs, files in os.walk(os.path.join(dest,r)): + for root, _dirs, files in os.walk(os.path.join(dest,r)): if os.path.basename(root) == 'conf' and 'layer.conf' in files: layers.append(os.path.relpath(os.path.dirname(root), dest)) layers_f = os.path.join(dest, ".oe-layers.json") @@ -445,7 +445,7 @@ The bitbake configuration files (local.conf, bblayers.conf and more) can be foun configure_vscode(setupdir, layerdir, bitbake_builddir, init_script) def get_registry_config(registry_path, id): - for root, dirs, files in os.walk(registry_path): + for root, _dirs, files in os.walk(registry_path): for f in files: if f.endswith('.conf.json') and id == get_config_name(f): return os.path.join(root, f) @@ -996,7 +996,7 @@ def has_expired(expiry_date): def list_registry(registry_path, with_expired): json_data = {} - for root, dirs, files in os.walk(registry_path): + for root, _dirs, files in os.walk(registry_path): for f in files: if f.endswith('.conf.json'): config_name = get_config_name(f) From patchwork Tue Mar 31 16:06:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84932 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 63C0610F92EB for ; Tue, 31 Mar 2026 16:07:18 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.24320.1774973227456063417 for ; Tue, 31 Mar 2026 09:07:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=o4A2rFJU; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250812.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V5i48B352519; Tue, 31 Mar 2026 16:07:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=pihGZTyErDUygIr5ObsmyDqUX2L3FCPTPNR22JFtJNM=; b= o4A2rFJUeE7MEepmTQTSPJUwglQU1yGeJ5NGu9dhYv2lW1arPK9hI7bqrbpEF3r8 IVUMfU6ygdHejYgT0sGNnan8daO/UqkyxDxBgG3h8LsM9temqTa8iniUWj6l0suL CNKibbM5dvIVsVyX0Xo8l/xus9e1xpdPumA1oYXRXviKGt+VaWQ5xqnMFVCcB/EJ sajXmCAlMPqfQZ2j3E3973gfsoDwuRlMhbrQY3zZOg0nDZyhHsKOZwcydTUCuU+l bFdufE9dBauDG2mSJNBQLNTPHk9NqW09YJzAhf1X0W2w3KSxDaZAfYeERI21xUqm OaAyXOCuRH0/kmQG+nVrMw== Received: from ala-exchng01.corp.ad.wrs.com (ala-exchng01.wrs.com [128.224.246.36]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d65y4bxjb-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:05 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:04 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:04 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 02/13] bitbake-setup: Fix ambiguous variable names Date: Tue, 31 Mar 2026 09:06:52 -0700 Message-ID: <20260331160703.3137930-3-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=QaZrf8bv c=1 sm=1 tr=0 ts=69cbf129 cx=c_pps a=AbJuCvi4Y3V6hpbCNWx0WA==:117 a=AbJuCvi4Y3V6hpbCNWx0WA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=fTW__CHxibyLmBMfj2wP:22 a=t7CeM3EgAAAA:8 a=Aatwvv_jfEF2aNKkGsIA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfXywTlukZSEBMp 7y2qWiC9ghFe37TCkFj1x5d7aeRc/INprLDS751Sy3VnTwxT84VxBKZq20g0D/iC3SW5n5BrOnw 42QNL4p/tQr9j16ldiQbh+Z11MSg0gRB/tIwRIyx0s7Ecxe8xfQU/yScurUym2iefGAcqtZAAdb c9rkj7Ejp2CaLDJOUsSiGzgPn5N4LVW7e2xpunQCTWD4zls+rdT4UQU/1EoMVEpDOd7vHFp2hMx mZOrxOWc5KinR5TUu1ItUh+Tr8xqN51EHHHAzayfpDmhaQzxF6oVZ3P4G+2id4PlhRxnmIx2DMf zpxoBX8j4xXkpeXgyjQ1NnAdl6fXpAoywtJpEBQ77e69wJDyBtywc4QTi6Jud5ciP4vDtTULo3F MYMi3C6pzqEBMIQ60stm08izuwGqjZQjh36MAbHhKUQeygCcr29AWiGuvlEEvgF/o+5nODvdx0Q V+L7JixL6EUPaWrIZzw== X-Proofpoint-GUID: 1BbjK0aTXImmxJsxjtk7hO2tnPzShx0a X-Proofpoint-ORIG-GUID: 1BbjK0aTXImmxJsxjtk7hO2tnPzShx0a X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 suspectscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19302 The ruff lint tool detected use of ambiguous variables that were named with a single letter: E741 Ambiguous variable name: `l` E741 Ambiguous variable name: `f` This replaces the variables with a descriptive variable to add clarity. Signed-off-by: Rob Woolley --- bin/bitbake-setup | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bin/bitbake-setup b/bin/bitbake-setup index 304fbe6cc..313962cd4 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -248,11 +248,11 @@ bitbake-setup init -L {} /path/to/repo/checkout""".format( if oesetupbuild: links = {'setup-build': oesetupbuild, 'oe-scripts': os.path.dirname(oesetupbuild), 'oe-init-build-env-dir': oeinitbuildenvdir} - for l,t in links.items(): - symlink = os.path.join(layerdir, l) + for link,item in links.items(): + symlink = os.path.join(layerdir, link) if os.path.lexists(symlink): os.remove(symlink) - os.symlink(os.path.relpath(t,layerdir),symlink) + os.symlink(os.path.relpath(item,layerdir),symlink) return layers_fixed_revisions @@ -261,19 +261,19 @@ def setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir, update_bb_c os.makedirs(build_conf_dir) layers_s = [] - for l in layers: - l = os.path.join(layerdir, l) - layers_s.append(" {} \\".format(l)) + for layer in layers: + layer = os.path.join(layerdir, layer) + layers_s.append(" {} \\".format(layer)) - for l in filerelative_layers: + for layer in filerelative_layers: if thisdir: - l = os.path.join(thisdir, l) + layer = os.path.join(thisdir, layer) else: raise Exception("Configuration is using bb-layers-file-relative to specify " \ "a layer path relative to itself. This can be done only " \ "when the configuration is specified by its path on local " \ "disk, not when it's in a registry or is fetched over http.") - layers_s.append(" {} \\".format(l)) + layers_s.append(" {} \\".format(layer)) layers_s = "\n".join(layers_s) bblayers_conf = """BBLAYERS ?= " \\ @@ -446,9 +446,9 @@ The bitbake configuration files (local.conf, bblayers.conf and more) can be foun def get_registry_config(registry_path, id): for root, _dirs, files in os.walk(registry_path): - for f in files: - if f.endswith('.conf.json') and id == get_config_name(f): - return os.path.join(root, f) + for file in files: + if file.endswith('.conf.json') and id == get_config_name(file): + return os.path.join(root, file) raise Exception("Unable to find {} in available configurations; use 'list' sub-command to see what is available".format(id)) def merge_overrides_into_sources(sources, overrides): @@ -997,10 +997,10 @@ def list_registry(registry_path, with_expired): json_data = {} for root, _dirs, files in os.walk(registry_path): - for f in files: - if f.endswith('.conf.json'): - config_name = get_config_name(f) - config_data = json.load(open(os.path.join(root, f))) + for file in files: + if file.endswith('.conf.json'): + config_name = get_config_name(file) + config_data = json.load(open(os.path.join(root, file))) config_desc = config_data["description"] expiry_date = config_data.get("expires", None) if expiry_date: From patchwork Tue Mar 31 16:06:53 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84926 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 79340109B499 for ; Tue, 31 Mar 2026 16:07:17 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.23969.1774973227671478634 for ; Tue, 31 Mar 2026 09:07:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=QJOfSQD+; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250812.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V5i48C352519; Tue, 31 Mar 2026 16:07:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=i6zLAIr7QoDFSNJB7XaCqRPZDy4J39QeI4iSM7NUko0=; b= QJOfSQD+yre0yiDTAxZmj/s8LvXwdT5pCDl3mXQuUWMm1SZG+JJKiE10+vZOtJOM NNKRGdRBvt+nSszwgh94taZgCwXc2ToHevSqfpI+zkG5UdmbEnGRXdELP+dIGCJH MQ9oYVOuhkH2lpK448bIDnAyu//mgNrZKWLBdsmqycUefWpgLqMC/vF/fcNisfqF TxrkdZbYnnHJ+SVQxNxPXD4Z47AAkR4buAnHq8V76s/AFjHJvLzKykMhA+tiIaHQ SL9dC9hvUw7hHx0N8dG8BukXFjxLGV6JwW7CpSzDeJ0QcfsSOYULob02ociCx/lp VaTAfINxf6nRZOCq7cx/Sw== Received: from ala-exchng01.corp.ad.wrs.com (ala-exchng01.wrs.com [128.224.246.36]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d65y4bxjb-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:06 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:04 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:04 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 03/13] bitbake-setup: Set function default to None Date: Tue, 31 Mar 2026 09:06:53 -0700 Message-ID: <20260331160703.3137930-4-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=QaZrf8bv c=1 sm=1 tr=0 ts=69cbf12a cx=c_pps a=AbJuCvi4Y3V6hpbCNWx0WA==:117 a=AbJuCvi4Y3V6hpbCNWx0WA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=fTW__CHxibyLmBMfj2wP:22 a=t7CeM3EgAAAA:8 a=aZRFCHUu4cexEaU8piMA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX7xQari/VfSJv 3MXi/o4xzjs7n5bW26R8+w7L2rfzXbXsOq7DaV2XMi0Z9fHiR5XmG37ETCtnKOhFOapZwvVPie0 7zP2N6fVGIy58qYvrCmksrChiPFhKPkiUSlLia5y5z1j+SiJZq+P4zLaMJ5PHWekr+J5xGM1MQX A7AM8RlNaPAcpGZFdpEfeNOT7EiC4MqP40YFhdMiGDOKM5GElTad9nteimObSMUJIxjqUx7TCX0 RTU/zJsmt5rcMEJ1iOJ/mJ1qMMbjfGZ+0GyQCOkNwnQByLWCjCwgOy+5XqrJWRDclBy1WvpA1Bc aqme54r6x4bqkCYDWYlAVvbKpdZCEnv3nbMNYOO/19PS9MNLifWK1ny3aPBy9nCX4Zh8IeDKiF2 eEfWpzBiro7OZv4cxRTOr8D3zZaX3ZluzVNthT+xJxsJXLf5HtE2D61GKm0ymis74bdqcsvyY8s j2BMYXfTMJSxfiua86Q== X-Proofpoint-GUID: JbVmb5hfZ7P2oCL-CCQhVzV4-BIzYcfc X-Proofpoint-ORIG-GUID: JbVmb5hfZ7P2oCL-CCQhVzV4-BIzYcfc X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 suspectscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:17 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19304 The function defaults are evaluated once and use across calls can lead to unexpected behaviour. Set the value to none and let the function initialize the value in the case when the value is not set. Resolves B006 from flake8-bugbear Signed-off-by: Rob Woolley --- bin/bitbake-setup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/bitbake-setup b/bin/bitbake-setup index 313962cd4..f90f01f55 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -46,7 +46,7 @@ def color_enabled() -> bool: def get_diff_color_param() -> str: return "--color=always" if color_enabled() else "--color=never" -def print_configs(prompt: str, choices: list[str], descriptions: list[str] = []): +def print_configs(prompt: str, choices: list[str], descriptions: list[str] = None): """ Helper function to print a list of choices and align the output. Each option name is made bold to stand out, unless color is not enabled in From patchwork Tue Mar 31 16:06:54 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84923 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 B8A76109B49F for ; Tue, 31 Mar 2026 16:07:17 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.23971.1774973228312520572 for ; Tue, 31 Mar 2026 09:07:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=PdQ0fttZ; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250812.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V5i48D352519; Tue, 31 Mar 2026 16:07:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=AvKZqiwd/n6WH/MmsL8NLmWgPhqfFwGkwu4APuWTDew=; b= PdQ0fttZ7QRgln/yFTcp+Jo/KvO3N71FgKYf0AE8hRqYDgKtTNhRmcKB8Z+8ryGg HS1UbNaAQVfLXFJ/rThEHU0JP5UTGf6CwpaVoXn4LqXxc+TbdYxYN+GqI+qmIvvO bD/ERWzt6RYYpm3mKIMTtoE+J2c5wEvjEa9hrFJeljhNVzIBwrKEDjeQzHSmgjy8 Mwmj39eqXXpkJmzOXc8seQuDAujyZ8f+88O7l0KoW2ThmDUvtPz+p0Xc1cay/dkI nuPOomKJEtOe/BSJlImJFjQ7Zak9aRS6LoIdCC1+tHmrflMp168vsxM4HK1u1LLI AFu/xoCwZIybqbJ90/sGnw== Received: from ala-exchng01.corp.ad.wrs.com (ala-exchng01.wrs.com [128.224.246.36]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d65y4bxjb-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:06 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:04 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:04 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 04/13] bitbake-setup: Add checks for version information Date: Tue, 31 Mar 2026 09:06:54 -0700 Message-ID: <20260331160703.3137930-5-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=QaZrf8bv c=1 sm=1 tr=0 ts=69cbf12a cx=c_pps a=AbJuCvi4Y3V6hpbCNWx0WA==:117 a=AbJuCvi4Y3V6hpbCNWx0WA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=fTW__CHxibyLmBMfj2wP:22 a=t7CeM3EgAAAA:8 a=vUYKkVZVldypNouynCYA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX9GaIhEIX428c Pqk2f7rRbi6pXQAtUS9BuTIZ9h2S2vqkWGZlFC98Zc4x5GbL+VKTKnEUV4Q9MehFDWLJfMolRJG dDGHa5akIliXbtv4aEtGaCIhOM0MLjVkX0+JbjNgggjW8cxa8a+f382wSZuQA7yUZ/m+Z512kV3 B/lH7LVdwt7jSSYylC5LtJiVzYNA/BE42wZi0hlPShPR+WfrS2Zk0gCPtNuhyBV5svCtQXXpQf4 G0/dc5rWWooBYomAc8N77zq33W4Kw9/6cZv/8TipQbL2jkccePIE48uFfrEuWpyEpziNUvLnd+g eKNHtxt+OFcpIPQfwYsnLPDYRmhBa1Go3IHvnMdmqR1/Sp9hU7WSBwjGcW8GKKDcQWbe6haSHVs 4wOufOl/J3T3mixM1oGQXDd8BL3ujRv+HQyBzmYkXpSbs1nD//5U13hGSkVipAKF0z6ubdkBFmo 76086w4FIxDOH5nstzA== X-Proofpoint-GUID: 4C2EiwcqghJmFtV0KuTrHItML3q2qFKO X-Proofpoint-ORIG-GUID: 4C2EiwcqghJmFtV0KuTrHItML3q2qFKO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 suspectscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:17 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19306 The __version__ has been present since bbmake to ensure that the Python script uses the appropriate bb module. Other bitbake-* scripts do not check the version. When executed in place, the bitbake-* scripts manipulate sys.path to find the bb module in ../lib. This path is inserted to the beginning of sys.path and it cannot be overridden by any other modules named bb. This commit adds a check for ../lib/bb/__init__.py before making changes to sys.path. It falls back to importing the bitbake_setup module using a custom bitbake_setup package. Signed-off-by: Rob Woolley --- bin/bitbake-setup | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/bin/bitbake-setup b/bin/bitbake-setup index f90f01f55..073b18f95 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -23,10 +23,33 @@ import time bindir = os.path.abspath(os.path.dirname(__file__)) -sys.path[0:0] = [os.path.join(os.path.dirname(bindir), 'lib')] +libdir = os.path.join(os.path.dirname(bindir), 'lib') +bbfile = os.path.join(libdir, 'bb', '__init__.py') -import bb.msg # noqa: E402 -import bb.process # noqa: E402 +# Obtain __version__ and import bb +if os.path.exists(bbfile): + # Execute bitbake-setup in git repository + try: + sys.path[0:0] = [libdir] + import bb.msg # noqa: E402 + import bb.process # noqa: E402 + from bb import __version__ # noqa: E402 + except ImportError as e: + print(f"Could not import bb from lib: {e}") +else: + # Execute bitbake-setup installed with packages + try: + from importlib.metadata import version, PackageNotFoundError # noqa:E402 + try: + import bb.msg # noqa: E402 + import bb.process # noqa: E402 + __version__ = version("bitbake_setup") + except ImportError as e: + print(f"Could not import bb: {e}") + except PackageNotFoundError as e: + print(f"Could not find package bb: {e}") + except ImportError as e: + print(f"Could not import bb from package: {e}") logger = bb.msg.logger_create('bitbake-setup', sys.stdout) From patchwork Tue Mar 31 16:06:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84924 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 ABDAE109B49D for ; Tue, 31 Mar 2026 16:07:17 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.24322.1774973228727094870 for ; Tue, 31 Mar 2026 09:07:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=aTVnv3i7; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250812.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V5i48E352519; Tue, 31 Mar 2026 16:07:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=p2b4C/6IXS04/8IVLzxFa8pJoRZYyI1tRt9AUEGoZZw=; b= aTVnv3i7Hihvwh/vv67yM5VOE2vIo2FPeS3lCM2t95OMZqLHgMsGorIRWiumCUEK YnLvLywZ+oCGH68tZ0NifmSJVCuJdtZvQf6bxhsoNvivLIZc5qUw4s7oQPythszi l+4WiUXCHHCN7CF6EOdmA/uMandlSZLohvHGwY8RQPpWOcr6ZehR+eCFrr4EQ1d5 i00JnFQwM9sa3+ftqNO6B751nmhHW8LC98UVsDy3JASqARzSjHTrW2GlJq4CAera eB53IdPEGL0eP6pxKmEfzZQQFGVJTRWgVNUwhkjhk1xnirVZR8Qk2S0HhKthHto5 KiriGFqzlRamSWDUNRO0aw== Received: from ala-exchng01.corp.ad.wrs.com (ala-exchng01.wrs.com [128.224.246.36]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d65y4bxjb-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:07 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:04 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:04 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 05/13] bitbake-setup: Add version option Date: Tue, 31 Mar 2026 09:06:55 -0700 Message-ID: <20260331160703.3137930-6-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=QaZrf8bv c=1 sm=1 tr=0 ts=69cbf12b cx=c_pps a=AbJuCvi4Y3V6hpbCNWx0WA==:117 a=AbJuCvi4Y3V6hpbCNWx0WA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=fTW__CHxibyLmBMfj2wP:22 a=t7CeM3EgAAAA:8 a=3MZ2cW2_6ngPcrpQ0mEA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfXypsgYRpnGKYI v0Qvrtva8nNffT6qWC013P0/uzJ3zfhneqjF8ShtcYan1d/IsRhQguDvvJzs47NmcEWBdR82UKa fBUJTuOzBuT8OBVh/cN6YPUSFveI1SnunN/vr4KcAMqdIPMmapNdyQama0lPhjEb6DRO/OgAe70 X+uvVLhl3I6zdFcjuXvWbt27vw6/B59GQWmjt0l0pKCtvmXMZ3qm+Bc1m85M+IL6G67xIlQJyeY LW+GFjhHVpVZr2U2fevBBQkWvjV3mU/Yt2qagoXxZ/o5IcMM0Ok1AEPpOllnfzJFS65RjPWm0KF fWyg4aBRvwimcR2yN5TftVfkGwOMH9/v2Ji3vctpHO1wAFrkigyBamyh9GNYEGsV+ouVOA+eEoB DIRo2NF+OlRvLWpFoKkt/f0j2YLzG0D3w3H2qSaNlGfk5ndxux4z2B0e+t7/IOxbIPiI+zmW1F0 5U5jsprxoZ/hKaWsEpw== X-Proofpoint-GUID: ZrfLo0eXS9_xImuH0XvQmwgH9VEFI_qC X-Proofpoint-ORIG-GUID: ZrfLo0eXS9_xImuH0XvQmwgH9VEFI_qC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 suspectscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:17 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19307 This adds the long-form version option to match bitbake. Signed-off-by: Rob Woolley --- bin/bitbake-setup | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/bitbake-setup b/bin/bitbake-setup index 073b18f95..f602dc1e2 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -1263,6 +1263,7 @@ def main(): ) parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true') + parser.add_argument('--version', action='version', version='%(prog)s ' + __version__) parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR') parser.add_argument('--no-network', action='store_true', help='Do not check whether configuration repositories and layer repositories have been updated; use only the local cache.') parser.add_argument('--global-settings', action='store', metavar='PATH', help='Path to the global settings file.') From patchwork Tue Mar 31 16:06:56 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84927 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 0475B10F92E0 for ; Tue, 31 Mar 2026 16:07:18 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.24318.1774973227113724990 for ; Tue, 31 Mar 2026 09:07:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=KlTBZOnS; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8N2249206; Tue, 31 Mar 2026 16:07:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=MkwjutSynuM2Eqq+KcfRqoaRS6CrYkUlTmtZ1aVUajg=; b= KlTBZOnSwODveWC/eMYgPx1LpeIv93yareeUcF8pgHNDc3PWA0CSlCOaUcdN3Ku3 st1/xT6sfB6pAVk/Qj1DSrDU14xjmGqxHzkFz2UzVdvgfaofQAZqaqf+ktQrCScG nYrKSSLvYSDsMFNzyQyuEbC/4UcWpaaeX9QRlcoonCWp4BdT2cax31VLaxDQIE9s 2n+75u9Jc9nwghRHsfVfVW2ZO6m0a+2W6AVDHmH9PuD+k6m5Nf66E1bcsFFJW92l /xgk4hWmrNOXBw8mjJ1AybLL8sBgj5LjnyChmDClAEaD9uw2YPkvrDjMxl2qezyc CIAmP6s0Nyp57LyO2p498A== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:05 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:04 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:04 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 06/13] bitbake-setup: Add the conditional script stanza Date: Tue, 31 Mar 2026 09:06:56 -0700 Message-ID: <20260331160703.3137930-7-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf129 cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=t7CeM3EgAAAA:8 a=I3xv36lx51p9eynh3TUA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: xVUlskzN_VULBP1G9L16VDb8UixYNGGZ X-Proofpoint-GUID: xVUlskzN_VULBP1G9L16VDb8UixYNGGZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfXw37l58TEfuzq tjfsIxVqZJF4UWsJY8Q0C1Auo0cB9bM9EciGG4Jdl7B84Pen0NQbnKhJ1pIQyqoUqFv8+owhffL b3a+cvOCzY/5v/fzzXgPZnxkAoYDQDDoYs5RsUj+Vdp+5Y3Ebb+I9mKQzGg7+ijuYCudEILDK5k BFL5utIoOZ8+LMKMtuX52A8Y35ftrpnqB2aw1kOg2Q1tEOvhSaoFbcXjC5ZsiB9xmOZf1yxQPiO L/7N2xxv+YgcAIYfg7ZsZCvNSO+kzPxqWUS7GI39MYeViUIbMN9g3lN3oSZg6flJxG57FYnE3GT Y4T2Zn3Mz3q1A78UygCkjIP8pVfl9qOA5k1l/t7jnf87WjHIr1zZvr0RQzamYmKpZ/lTsS8xCQm EDJOJeqfyxJBWzzrnopVjjCrYrXize2koHwzvuAdXJ1vE0OVzfMUE2NtZPH7ZSxCK41TlNs8t6O rRZ5qQ+nhiH67nJvNfg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19301 This ensures that the main function is only executed if the module is executed in the top-level environment. Signed-off-by: Rob Woolley --- bin/bitbake-setup | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/bitbake-setup b/bin/bitbake-setup index f602dc1e2..be420adb6 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -1403,4 +1403,5 @@ def main(): else: parser.print_help() -main() +if __name__ == '__main__': + main() From patchwork Tue Mar 31 16:06:57 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84930 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 1C43010F92E5 for ; Tue, 31 Mar 2026 16:07:18 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.24321.1774973227594561804 for ; Tue, 31 Mar 2026 09:07:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=bFkAnjAg; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8O2249206; Tue, 31 Mar 2026 16:07:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=EaoQbH8jwIIc8mFuxq6dKlxV0DBiM2EMZfO+VeWtnog=; b= bFkAnjAgKAFg91NUQp2wimlRBEhzDnofoTQPw/LU4sQgSqBkjl0S2bzWIoUU0FrN vtfcNRuUFdVxZcGPE+6cBQQfzKUBw7D9N5cMqSljOt13+BMuPQohAl4k32cxKzKx 2wRT0wrc8qDkAB1xp/U8GfXFxF5OyQ0AFl+i/7yBO6VDwSrCjMieWEmgD0XfPXMq AFuCJ4VEWuHnu10NtP61ynZ6DadA+iCtuugZUwNSpG/OcBSxNMfRmFwzOppo/r17 o8n7xHZvonUjKlsxjA7x32RkLTmKjynXiye2as5slEvq+JEnaY2TGKGbapn5EoF3 L23Ujue/P6o1qEN6glmilQ== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:06 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:04 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:04 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 07/13] bitbake-setup: Add version check and catch exceptions Date: Tue, 31 Mar 2026 09:06:57 -0700 Message-ID: <20260331160703.3137930-8-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf12a cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=t7CeM3EgAAAA:8 a=JdKmuWCP-GRYc3YyTgcA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: Z6fub_4GSKFRz0XymUHajYlNk0jXXpJq X-Proofpoint-GUID: Z6fub_4GSKFRz0XymUHajYlNk0jXXpJq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX6RSCKtKZTiuM 0bk15+ccUpuZ9K3lLkR+/+MwHLwROwoeMqemtwsLvJH/Xu5NlX2XWNU/oukvNbdscqFbKFdwgVD 07+9XPRZ8+ioxxvJfZBCvpssQq6C0c9o/xjr4sh8ZaFfgl1C8DZouD03f2EJ2cirtvxN2Mh3vHF 2pOc4WaKHsNOt/zoNdjpTesrQnFxg0mQd8Ay4Zpb0uEoyCb5LKS1Ja6ipk/DOg35pNXa/ODDRll R6YETY1scO+EG1k9RxRyefDtmUO0BJ7lOiqmB/3bS8ujR7fmxQ9uZ4Cl8a32U8MeBqtzZsR3n2m Cc/UB9bCqX3TPb+XsIsekKCdFpSxQifm+75IqklLpfeRMVclbBmCYXgmzYh0i/cju9FKUojOxhD 43HNN5g45M924q59uj8WN+UODtugfdbjogp0bF5aUcAOPfnZsSX+PiiHKfKvMEuAwE75Nik1fNA ekT9uMLAMddcJaM7MaA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19303 This modifies the conditional script stanza to match bitbake. It adds a version check to ensure that the correct bb module version has been found. It also catches any exceptions thrown during execution. Signed-off-by: Rob Woolley --- bin/bitbake-setup | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bin/bitbake-setup b/bin/bitbake-setup index be420adb6..939645121 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -1404,4 +1404,11 @@ def main(): parser.print_help() if __name__ == '__main__': - main() + if __version__ != bb.__version__: + sys.exit("Bitbake core version and program version mismatch!") + try: + sys.exit(main()) + except Exception: + import traceback + traceback.print_exc() + sys.exit(1) From patchwork Tue Mar 31 16:06:58 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84925 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 9B829109B49B for ; Tue, 31 Mar 2026 16:07:17 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.23970.1774973228163438071 for ; Tue, 31 Mar 2026 09:07:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=MY2w78RD; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8P2249206; Tue, 31 Mar 2026 16:07:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=is8AT0dGhXST+ufCCg85hoS5gCD+45A1iSKZAP4EKuE=; b= MY2w78RD3nTTX7z4mZ93Z4oXLJlnoS/V82+5Z+ah5rkLYrTePBMWuBUdVEww12Cc 1CZ+PZwwnVR+iTiyhZ+8PPKFtzo3Q6azRCReFN8qsgffHWdWg/jBsvRKefDb0OXf 0Of2Xqe9SqxgKJJdwRJSjXbg9cjEjuAQW6+mVJGMor2dhVbktGY9Imj7azmRpsNa j0vpP3u5/OcZooTewDn2vPZJ2Ts3dxXL1zYY1ly9RUG3pub/geNpM7QSGiiD3HCX z1B3Cihq6JpiJkjBSFQTXZAah9vhwX62wdxv90GyYDPTTTHiE5BmDH1RiwEW26Sm YP1fo0ohtcjqS98ZbG4C+Q== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:06 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:04 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:05 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 08/13] bitbake: Add checks for importing bb module Date: Tue, 31 Mar 2026 09:06:58 -0700 Message-ID: <20260331160703.3137930-9-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf12a cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=t7CeM3EgAAAA:8 a=vUYKkVZVldypNouynCYA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: Ntvt1zFYWTYhwqbFnaDFrT1xG1yYZaks X-Proofpoint-GUID: Ntvt1zFYWTYhwqbFnaDFrT1xG1yYZaks X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX1Wf1mHgd2gKQ tpXx3JgvoDJwvQk1oWDWjlNdOPeZVx0r3CR4k7/dWo6Sgc6V6MxBSrPtQilKgEDurF2G8ETdIT6 j86oG8Pb/fBqXyOWdb9ARIgaj1SZ3IMDNLvYIIFrsSz2X4Jn2Z2hf7L9IAxqds3i1OCQeEyMMg8 vbJf6gIQutJDUqofuJvImhOB2MpmhhiXhEU6CPthatQ3HtRZ5UULQ5P/JmdpXflaIZkx91raEa/ YweT+ol70SStxyAH8Jl7uzeIJ3GQNweL2J3TZb8zQbe9oOq82M8+Hx+q+79qllytdz0QpXo01l4 7tqKr0EFb31rAfUvPphziVx6dzOQCAln6T2UOQUOGhCzs+Y3lRzzT4Y+z6UE4NS1rcRKt4tMhZI kZ4lnBBeJQ0KlG6dOgxNj/qr36vFFyKmrMGDhbBhyTy6a8hyeLEyFS0inANOq2ugOat70yF+CIZ 0HeXA/wjxSS/AxCtuIA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:17 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19305 The __version__ has been present since bbmake to ensure that the Python script uses the appropriate bb module. This was necessary when bbmake had functional code that had to match the bb module. The code has since been moved into bb/main.py. The skeleton code left in bin/bitbake rarely changes save for bumping the version. When executed in place, the bitbake script manipulates sys.path to find the bb module in ../lib. This path is inserted to the beginning of sys.path and it cannot be overridden. This path is inserted regardless of whether the bb module is present in the lib directory. This adds a check for the existence of the lib/bb/__init__.py file before inserting the directory to the beginning of sys.path. This supports bitbake to be executed from inside the git repository. It deliberately fails in the situation where lib/bb/__init__.py is missing, but the bb package exists inside a site-package directory. This situation was previously possible. Signed-off-by: Rob Woolley --- bin/bitbake | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/bin/bitbake b/bin/bitbake index a995bd665..76ec80d90 100755 --- a/bin/bitbake +++ b/bin/bitbake @@ -15,23 +15,27 @@ import sys import warnings warnings.simplefilter("default") -sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), - 'lib')) -try: - import bb -except RuntimeError as exc: - sys.exit(str(exc)) +bindir = os.path.abspath(os.path.dirname(__file__)) +libdir = os.path.join(os.path.dirname(bindir), 'lib') +bbfile = os.path.join(libdir, 'bb', '__init__.py') + +if os.path.exists(bbfile): + # Execute bitbake in git repository + try: + sys.path[0:0] = [libdir] + import bb + except ImportError as e: + print(f"Could not import bb from lib: {e}", file=sys.stderr) +else: + print(f"Could not find bb module", file=sys.stderr) + sys.exit(1) from bb import cookerdata from bb.main import bitbake_main, BitBakeConfigParameters, BBMainException bb.utils.check_system_locale() -__version__ = "2.16.0" - if __name__ == "__main__": - if __version__ != bb.__version__: - sys.exit("Bitbake core version and program version mismatch!") try: sys.exit(bitbake_main(BitBakeConfigParameters(sys.argv), cookerdata.CookerConfiguration())) From patchwork Tue Mar 31 16:06:59 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84928 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 E730310F3DCD for ; Tue, 31 Mar 2026 16:07:17 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.23973.1774973228847749209 for ; Tue, 31 Mar 2026 09:07:09 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=X22sLPXd; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8Q2249206; Tue, 31 Mar 2026 16:07:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=/Qtk79xbMYnbnOiw2Ldh3ujzzAK/6OX1TS7E5KbPqZw=; b= X22sLPXdqLf59BUbtfQEhvYDfHrfKhSzQtfwWBWk4onbvGD+RFgaFOvm4zRg2UtX rjgV6ex9+YmFwWZhquK0E2sLQ4kBQH9rjrgQ1Wt8lGTtfYB8fGgINwsMCsuoZ07y M5O88XePviHMZ0cBUpVeSkTdTtWHASHbX0ucHJqgwtdnFXa5dX6KEHnQGz5F90t6 m8JsDf4XZS1TC82+72E6Aun6rS/DFpy82clzI+gv4WWyUtzD0owYiPBLd7VIwZYU ztaTWjfex76t+R4rY1GgzWN/DKSlSBOAjhuHfXOngtHArxKJ3nT95BRzvRkg6xDo SGhOylQx5DnBYYPIOLztWw== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:07 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:05 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:05 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 09/13] pypi: Add PyPI packaging for bitbake-setup Date: Tue, 31 Mar 2026 09:06:59 -0700 Message-ID: <20260331160703.3137930-10-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf12b cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=24AZYWMyAAAA:8 a=iGHA9ds3AAAA:8 a=Q4-j1AaZAAAA:8 a=t7CeM3EgAAAA:8 a=qV09NasGAAAA:8 a=V5MqrhjLj9XmrIPkEmEA:9 a=bG88sKzkDEFeXWNnvthB:22 a=nM-MV4yxpKKO9kiQg6Ot:22 a=9H3Qd4_ONW2Ztcrla5EB:22 a=FdTzh2GWekK77mhwV6Dw:22 a=GlicbclHOgpI_Rq0ze_Y:22 X-Proofpoint-ORIG-GUID: aMBvwBtpYHXPjsZElxLagsx6hhYVr26Q X-Proofpoint-GUID: aMBvwBtpYHXPjsZElxLagsx6hhYVr26Q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX2ssV528ChXoZ CuPEdCmwxv8A/mApJreIg/W0mUMsg5gc9oB392eh/2xpUZ48WruiJrz2ltPbscjPhO1cef+SfC7 od2ansDgWb1cXzRgY/NTOPzDKzpz1D1bv8YJtg5nNIrspFZjsE1WtJofC5y2uRplw+DvP15/wq/ CNuHeAeggExBPk3wfkoWy8ae0BzWJAYt+qM3/3cMft8zoC4iBe1g2BstKx1oyAC4GMwQOWmKpwE 0epd/Wnk3KA/TLT+Fj+BAAeLx/tNjmkIVXxIYzfv9EzWGVmUzM5ZJmLZCgHX7vtuS4gMW2d4pcU KGaH117d5CB64vt0VxBxWL2wcNFntsJe9UiCWAoK1Nv0tm6QBAcUje5+vdpOpMw92poZwZ/uVdl KylnBR6moGSIGPvk8ozy0YeVh9+X3XOVsdF9+Lxtj+GBE3Soxw8nSTJjGF8IOfRji/eGPU9SCYm Rf5ylRySjytfEP9+jRQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:17 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19308 We wish to publish bitbake-setup to PyPI to improve the workflow for new users that are familiar with pip install. In order to publish bitbake-setup as a standalone package, we must create a staging directory for Python to build the package. The package-bitbake-setup.py automates the staging of the necessary files. You may supply your desired directory as the first argument, but packaging_workspace in the root of the git repository is chosen by default. The packaging process and related tests have also been included as part of bitbake-selftest and lib/bb/tests/setup.py. These tests use package-bitbake-setup.py. The tests include: * Verify bitbake-setup --help runs successfully. * Verify bitbake-setup list runs successfully. * Verify console script entry points are correctly defined. * Verify all expected modules can be imported from installed package. * Verify package metadata is correctly set. * Verify vendored dependencies (bs4, ply, progressbar, simplediff) are not bundled in package. * Verify version is set correctly (not fallback 0.0.0 unless expected). * Verify wheel METADATA file contains required fields. The pyproject.toml, LICENSE, and README.md files are used to create the package and provide information for PyPI. Assisted-by: Claude:claude-4.6-opus Signed-off-by: Rob Woolley --- bin/bitbake-selftest | 2 + contrib/pypi/LICENSE | 9 + contrib/pypi/README.md | 42 ++++ contrib/pypi/package-bitbake-setup.py | 79 +++++++ contrib/pypi/pyproject.toml | 92 ++++++++ lib/bb/tests/setup.py | 289 +++++++++++++++++++++++++- 6 files changed, 512 insertions(+), 1 deletion(-) create mode 100644 contrib/pypi/LICENSE create mode 100644 contrib/pypi/README.md create mode 100755 contrib/pypi/package-bitbake-setup.py create mode 100644 contrib/pypi/pyproject.toml diff --git a/bin/bitbake-selftest b/bin/bitbake-selftest index fb7c57dd8..7b5d68ff9 100755 --- a/bin/bitbake-selftest +++ b/bin/bitbake-selftest @@ -67,6 +67,8 @@ ENV_HELP = """\ Environment variables: BB_SKIP_NETTESTS set to 'yes' in order to skip tests using network connection + BB_SKIP_PYPI_TESTS set to 'no' to run PyPI packaging tests + (default: yes/skip) BB_TMPDIR_NOCLEAN set to 'yes' to preserve test tmp directories """ diff --git a/contrib/pypi/LICENSE b/contrib/pypi/LICENSE new file mode 100644 index 000000000..f9b44182d --- /dev/null +++ b/contrib/pypi/LICENSE @@ -0,0 +1,9 @@ +bitbake-setup is licensed under the GNU General Public License version 2.0. See +LICENSE.GPL-2.0-only for further details. + +Individual files contain the following style tags instead of the full license text: + + SPDX-License-Identifier: GPL-2.0-only + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/contrib/pypi/README.md b/contrib/pypi/README.md new file mode 100644 index 000000000..a6dd99e09 --- /dev/null +++ b/contrib/pypi/README.md @@ -0,0 +1,42 @@ +# bitbake-setup + +This package provides the `bitbake-setup` command and the Python modules +required to support BitBake setup and configuration. + +## Usage + +Instructions on uses of bitbake-setup can be found in +[Setting Up the Environment With bitbake-setup](https://docs.yoctoproject.org/bitbake/dev/bitbake-user-manual/bitbake-user-manual-environment-setup.html) from the Yocto Project manual. + +List the available configurations; +```bash +bitbake-setup list +``` + +Show the help for the bitbake-setup init subcommand: +```bash +bitbake-setup init --help +usage: bitbake-setup init [-h] [--non-interactive] [--source-overrides SOURCE_OVERRIDES] [--setup-dir-name SETUP_DIR_NAME] [--skip-selection SKIP_SELECTION] [-L SOURCE_NAME PATH] + [config ...] + +positional arguments: + config path/URL/id to a configuration file (use 'list' command to get available ids), followed by configuration options. Bitbake-setup will ask to choose from available + choices if command line doesn't completely specify them. + +options: + -h, --help show this help message and exit + --non-interactive Do not ask to interactively choose from available options; if bitbake-setup cannot make a decision it will stop with a failure. + --source-overrides SOURCE_OVERRIDES + Override sources information (repositories/revisions) with values from a local json file. + --setup-dir-name SETUP_DIR_NAME + A custom setup directory name under the top directory. + --skip-selection SKIP_SELECTION + Do not select and set an option/fragment from available choices; the resulting bitbake configuration may be incomplete. + -L SOURCE_NAME PATH, --use-local-source SOURCE_NAME PATH + Symlink local source into a build, instead of getting it as prescribed by a configuration (useful for local development). +``` + +To initialize a workspace for the Poky reference distro using the development branch (ie. "master") of OpenEmbedded: +```bash +bitbake-setup init poky-master +``` \ No newline at end of file diff --git a/contrib/pypi/package-bitbake-setup.py b/contrib/pypi/package-bitbake-setup.py new file mode 100755 index 000000000..60c503c4e --- /dev/null +++ b/contrib/pypi/package-bitbake-setup.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 + +import argparse +import logging +import shutil +from pathlib import Path + + +def create_packaging_workspace(directory): + # Create the directory for packaging workspace + if len(directory or "") > 0: + workspace_dir = Path(directory) + else: + # This script is located in contrib/pypi/package-bitbake-setup.py + workspace_dir = Path(__file__).parents[2] / "packaging_workspace" + + if not workspace_dir.exists(): + logging.debug(f"Created packaging workspace at: {workspace_dir}") + workspace_dir.mkdir(exist_ok=True) + else: + logging.debug(f"Packaging workspace already exists at: {workspace_dir}") + + # Copy packaging files to the workspace + files_to_copy = [ + "contrib/pypi/pyproject.toml", + "contrib/pypi/README.md", + "contrib/pypi/LICENSE", + "LICENSE.MIT", + "LICENSE.GPL-2.0-only" + ] + + for file in files_to_copy: + src_path = Path(__file__).parents[2] / file + dest_path = workspace_dir / Path(file).name + + if src_path.is_dir(): + shutil.copytree(src_path, dest_path, dirs_exist_ok=True) + logging.debug(f"Copied directory: {src_path} to {dest_path}") + else: + shutil.copy2(src_path, dest_path) + logging.debug(f"Copied file: {src_path} to {dest_path}") + + + # Copy necessary modules to the workspace + modules_to_bundle = [ + "lib/bb", + ] + + for module in modules_to_bundle: + src_path = Path(__file__).parents[2] / module + dest_path = workspace_dir / "src" / Path(module).name + + if src_path.is_dir(): + shutil.copytree(src_path, dest_path, dirs_exist_ok=True) + logging.debug(f"Bundled module directory: {src_path} to {dest_path}") + else: + shutil.copy2(src_path, dest_path) + logging.debug(f"Bundled module file: {src_path} to {dest_path}") + + # Create bitbake_setup module + bitbake_setup_dir = Path(workspace_dir / "src" / "bitbake_setup") + bitbake_setup_dir.mkdir(exist_ok=True) + Path(bitbake_setup_dir / "__init__.py").touch() + shutil.copy2(Path(__file__).parents[2] / "bin" / "bitbake-setup", str(bitbake_setup_dir / "__main__.py")) + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + + parser = argparse.ArgumentParser(description='Package bitbake-setup for PyPI') + parser.add_argument('-v', '--verbose', action='store_true', help='increase output verbosity.') + parser.add_argument('-d', '--directory', type=str, help='specify the directory to create the packaging workspace in.') + + args = parser.parse_args() + + if args.verbose: + logging.getLogger().setLevel(logging.DEBUG) + + create_packaging_workspace(args.directory) diff --git a/contrib/pypi/pyproject.toml b/contrib/pypi/pyproject.toml new file mode 100644 index 000000000..69f34667d --- /dev/null +++ b/contrib/pypi/pyproject.toml @@ -0,0 +1,92 @@ +[build-system] +requires = [ + "setuptools>=64", +] +build-backend = "setuptools.build_meta" + +[project] +name = "bitbake-setup" +dynamic = ["version"] +description = "bitbake-setup" +readme = "README.md" +requires-python = ">=3.9" +license = "GPL-2.0-only AND MIT" +authors = [ + { name = "OpenEmbedded BitBake Developers", email = "bitbake-devel@lists.openembedded.org" } +] +classifiers = [ + "Programming Language :: Python :: 3", + "Operating System :: POSIX :: Linux", +] + +dependencies = [ + # bitbake-setup is mostly self-contained +] + +[project.optional-dependencies] +test = [ + "pytest>=7", +] + +lint = [ + "ruff>=0.3", + "mypy>=1.8", +] + +dev = [ + "pytest>=7", + "ruff>=0.3", + "mypy>=1.8", + "build", + "twine", +] + +[project.scripts] +bitbake-setup = "bitbake_setup.__main__:main" + +[project.urls] +Homepage = "https://git.openembedded.org/bitbake/" +Documentation = "https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-environment-setup.html" +Repository = "https://git.openembedded.org/bitbake/" + +[tool.mypy] +python_version = "3.9" +warn_unused_configs = true +ignore_missing_imports = true +no_implicit_optional = true +check_untyped_defs = false + +[tool.ruff] +target-version = "py39" +line-length = 88 +src = ["src"] + +[tool.ruff.lint] +select = [ + "E", # pycodestyle + "F", # pyflakes + "B", # flake8-bugbear + "I", # import sorting +] +ignore = [ + "E501", # line length (handled by formatter) +] + +[tool.ruff.format] +quote-style = "double" +indent-style = "space" + +[tool.setuptools] +package-dir = { "" = "src" } +zip-safe = false +include-package-data = true + +[tool.setuptools.dynamic] +version = {attr = "bb.__version__"} + +[tool.setuptools.packages.find] +where = ["src"] +include = [ + "bb*", + "bitbake_setup" +] diff --git a/lib/bb/tests/setup.py b/lib/bb/tests/setup.py index 638d56d3b..b031270e7 100644 --- a/lib/bb/tests/setup.py +++ b/lib/bb/tests/setup.py @@ -11,7 +11,14 @@ import glob import hashlib import json import os +import shutil import stat +import subprocess +import sys +import tempfile +import unittest +import venv +import zipfile from bb.tests.support.httpserver import HTTPService class BitbakeSetupTest(FetcherTest): @@ -92,7 +99,11 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"])) def runbbsetup(self, cmd): bbsetup = os.path.abspath(os.path.dirname(__file__) + "/../../../bin/bitbake-setup") - return bb.process.run("{} --global-settings {} {}".format(bbsetup, os.path.join(self.tempdir, 'global-config'), cmd)) + # Set PYTHONPATH so subprocess can find bb module instead of relying on the current directory + env = os.environ.copy() + libdir = os.path.abspath(os.path.dirname(__file__) + "/../..") + env["PYTHONPATH"] = libdir + ":" + env.get("PYTHONPATH", "") + return bb.process.run("{} --global-settings {} {}".format(bbsetup, os.path.join(self.tempdir, 'global-config'), cmd), env=env, cwd=self.tempdir) def _add_json_config_to_registry_helper(self, name, sources): @@ -726,3 +737,279 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"])) self.assertEqual(f.read(), 'conflicting-upstream\n', "re-cloned layer must contain the upstream content after conflict backup") del os.environ['BBPATH'] + +@unittest.skipIf(os.environ.get("BB_SKIP_PYPI_TESTS", "yes") != "no", + "PyPI packaging test (set BB_SKIP_PYPI_TESTS=no to run)") +class PyPIPackagingTest(unittest.TestCase): + """Tests for PyPI packaging of bitbake-setup. + + These tests build a wheel from source, install it in an isolated venv, + and verify the package works correctly. Skipped by default unless + BB_SKIP_PYPI_TESTS=no is set. + """ + + wheel_path = None + build_tempdir = None + workspace_dir = None + + @classmethod + def setUpClass(cls): + """Build wheel once for all tests in this class.""" + # Locate contrib/pypi directory + cls.pypi_dir = os.path.abspath( + os.path.join(os.path.dirname(__file__), '..', '..', '..', 'contrib', 'pypi') + ) + + # Check for required build tools + cls._check_build_tools() + + # Create temporary directory for packaging workspace + cls.build_tempdir = tempfile.mkdtemp(prefix="bitbake-pypi-build-") + + # Run package-bitbake-setup.py to create packaging workspace + cls._create_packaging_workspace() + + # Build the wheel + cls._build_wheel() + + @classmethod + def _check_build_tools(cls): + """Verify build tools are available, skip if not.""" + try: + result = subprocess.run( + [sys.executable, "-m", "build", "--version"], + capture_output=True, check=True + ) + except (subprocess.CalledProcessError, FileNotFoundError): + raise unittest.SkipTest("'build' package not installed (pip install build)") + + @classmethod + def _create_packaging_workspace(cls): + """Create packaging workspace using package-bitbake-setup.py.""" + script = os.path.join(cls.pypi_dir, 'package-bitbake-setup.py') + cls.workspace_dir = os.path.join(cls.build_tempdir, 'workspace') + result = subprocess.run( + [sys.executable, script, '-d', cls.workspace_dir], + capture_output=True, text=True + ) + if result.returncode != 0: + raise unittest.SkipTest(f"Packaging workspace creation failed: {result.stderr}") + + @classmethod + def _build_wheel(cls): + """Build the wheel in the packaging workspace.""" + result = subprocess.run( + [sys.executable, "-m", "build", "--wheel"], + cwd=cls.workspace_dir, + capture_output=True, text=True + ) + if result.returncode != 0: + raise unittest.SkipTest(f"Wheel build failed: {result.stderr}") + + # Find the built wheel + dist_dir = os.path.join(cls.workspace_dir, 'dist') + wheels = glob.glob(os.path.join(dist_dir, '*.whl')) + if not wheels: + raise unittest.SkipTest("No wheel file found after build") + cls.wheel_path = wheels[0] + + @classmethod + def tearDownClass(cls): + """Clean up the shared wheel build artifacts.""" + if cls.build_tempdir and os.environ.get("BB_TMPDIR_NOCLEAN") != "yes": + shutil.rmtree(cls.build_tempdir, ignore_errors=True) + elif cls.build_tempdir: + print(f"Not cleaning up {cls.build_tempdir}. Please remove manually.") + + def setUp(self): + """Create isolated venv for testing the installed package.""" + self.venv_dir = tempfile.mkdtemp(prefix="bitbake-pypi-venv-") + + # Create venv without pip (faster, no network needed) + venv.create(self.venv_dir, with_pip=False, symlinks=True) + + # Get paths to venv python and bin directory + if sys.platform == 'win32': + self.venv_python = os.path.join(self.venv_dir, 'Scripts', 'python.exe') + self.venv_bin = os.path.join(self.venv_dir, 'Scripts') + else: + self.venv_python = os.path.join(self.venv_dir, 'bin', 'python') + self.venv_bin = os.path.join(self.venv_dir, 'bin') + + # Install wheel using pip from the outer environment (offline, no-deps) + site_packages = self._get_site_packages() + result = subprocess.run( + [sys.executable, "-m", "pip", "install", + "--target", site_packages, + "--no-deps", "--no-index", + self.wheel_path], + capture_output=True, text=True + ) + if result.returncode != 0: + self.fail(f"Failed to install wheel: {result.stderr}") + + # Install console script entry point manually + self._install_console_script() + + def _get_site_packages(self): + """Get the site-packages directory in the venv.""" + lib_dir = os.path.join(self.venv_dir, 'lib') + # Find python version directory + for d in os.listdir(lib_dir): + if d.startswith('python'): + return os.path.join(lib_dir, d, 'site-packages') + raise RuntimeError("Could not find site-packages in venv") + + def _install_console_script(self): + """Create console script wrapper in venv bin directory.""" + site_packages = self._get_site_packages() + script_path = os.path.join(self.venv_bin, 'bitbake-setup') + script_content = f'''#!{self.venv_python} +import sys +sys.path.insert(0, "{site_packages}") +from bitbake_setup.__main__ import main +sys.exit(main()) +''' + with open(script_path, 'w') as f: + f.write(script_content) + os.chmod(script_path, 0o755) + + def tearDown(self): + """Remove venv after test.""" + if os.environ.get("BB_TMPDIR_NOCLEAN") != "yes": + shutil.rmtree(self.venv_dir, ignore_errors=True) + else: + print(f"Not cleaning up {self.venv_dir}. Please remove manually.") + + def test_imports(self): + """Verify all expected modules can be imported from installed package.""" + + site_packages = self._get_site_packages() + imports = ['bb', 'bitbake_setup'] + for module in imports: + result = subprocess.run( + [self.venv_python, '-c', f'import sys; sys.path.insert(0, "{site_packages}"); import {module}'], + capture_output=True, text=True + ) + self.assertEqual(result.returncode, 0, + f"Failed to import {module}: {result.stderr}") + + def test_console_script_help(self): + """Verify bitbake-setup --help runs successfully.""" + script = os.path.join(self.venv_bin, 'bitbake-setup') + result = subprocess.run( + [script, '--help'], + capture_output=True, text=True + ) + self.assertEqual(result.returncode, 0, + f"bitbake-setup --help failed: {result.stderr}") + self.assertIn('usage:', result.stdout.lower()) + + def test_console_script_list(self): + """Verify bitbake-setup list runs successfully.""" + script = os.path.join(self.venv_bin, 'bitbake-setup') + result = subprocess.run( + [script, 'list'], + capture_output=True, text=True + ) + # List may return 0 even with no configurations + self.assertEqual(result.returncode, 0, + f"bitbake-setup list failed: {result.stderr}") + + def test_package_metadata(self): + """Verify package metadata is correctly set.""" + site_packages = self._get_site_packages() + code = ''' +import json +import sys +sys.path.insert(0, "{}") +from importlib.metadata import metadata +m = metadata("bitbake-setup") +print(json.dumps({{ + "name": m["Name"], + "version": m["Version"], + "requires_python": m.get("Requires-Python", ""), + "license": m.get("License", ""), +}})) +'''.format(site_packages) + result = subprocess.run( + [self.venv_python, '-c', code], + capture_output=True, text=True + ) + self.assertEqual(result.returncode, 0, + f"Failed to get metadata: {result.stderr}") + + meta = json.loads(result.stdout) + self.assertEqual(meta['name'], 'bitbake-setup') + self.assertIn('>=3.9', meta['requires_python']) + + def test_vendored_dependencies(self): + """Verify vendored dependencies (bs4, ply, progressbar, simplediff) are not bundled in package.""" + # Check that vendored packages do not exist in root of wheel + with zipfile.ZipFile(self.wheel_path, 'r') as whl: + names = whl.namelist() + + # Check for expected package directories + expected = ['bs4/', 'ply/', 'progressbar/', 'simplediff/'] + for pkg in expected: + found = any(n.startswith(pkg) for n in names) + self.assertFalse(found, + f"Unexpected vendored package '{pkg}' found in wheel") + + def test_version_from_wheel(self): + """Verify version is set correctly (not fallback 0.0.0 unless expected).""" + import re + # Extract version from wheel filename + wheel_name = os.path.basename(self.wheel_path) + # Wheel format: {name}-{version}(-{build})?-{python}-{abi}-{platform}.whl + parts = wheel_name.split('-') + version = parts[1] + + # Check version format (should be semver-like or contain git info) + version_pattern = r'^\d+\.\d+\.\d+.*$' + self.assertTrue(re.match(version_pattern, version), + f"Version '{version}' doesn't match expected pattern") + + print(f"Extracted version from wheel: {version}") + + self.assertNotEqual(version, '0.0.0', + "Version is fallback 0.0.0 - no git tags found") + + def test_wheel_metadata_file(self): + """Verify wheel METADATA file contains required fields.""" + with zipfile.ZipFile(self.wheel_path, 'r') as whl: + # Find METADATA file in dist-info + metadata_path = None + for name in whl.namelist(): + if name.endswith('.dist-info/METADATA'): + metadata_path = name + break + + self.assertIsNotNone(metadata_path, "METADATA file not found in wheel") + + # Parse metadata + metadata_content = whl.read(metadata_path).decode('utf-8') + + # Check required fields + self.assertIn('Metadata-Version:', metadata_content) + self.assertIn('Name: bitbake-setup', metadata_content) + self.assertIn('Version:', metadata_content) + self.assertIn('Requires-Python:', metadata_content) + + def test_entry_points(self): + """Verify console script entry points are correctly defined.""" + with zipfile.ZipFile(self.wheel_path, 'r') as whl: + # Find entry_points.txt in dist-info + entry_points_path = None + for name in whl.namelist(): + if name.endswith('.dist-info/entry_points.txt'): + entry_points_path = name + break + + self.assertIsNotNone(entry_points_path, + "entry_points.txt not found in wheel") + + content = whl.read(entry_points_path).decode('utf-8') + self.assertIn('[console_scripts]', content) + self.assertIn('bitbake-setup', content) + self.assertIn('bitbake_setup.__main__:main', content) From patchwork Tue Mar 31 16:07:00 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84929 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 0FFDC10F92E3 for ; Tue, 31 Mar 2026 16:07:18 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.23974.1774973229601954478 for ; Tue, 31 Mar 2026 09:07:09 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=SRVtYDKv; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8R2249206; Tue, 31 Mar 2026 16:07:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=8n99xtl4hIGYnko4AuVJLu+5N8KSGrao6fjGpaG/QT4=; b= SRVtYDKvYUKQvG6otGLVdcdzfNSqnalz34rSoSiZ7x8sXFbXifYgNrm9y8yY649b XtzHbkoaAZ8wvPeAKzXPMYKOxUS07767CQrx5I5tIEUoWSi2FD0JkGoxmnvgV51M /yZaMwyJnZ2fzlFOROZrZoVw/X4DoxN6wGNB3HyHuybp3WV0IcaknAYKJQ5RWJb4 8sRYsxXft7o1kE9lndN3vtvXvKEk/UxEBmD5iaZZmFNATMQrDH0QT+4WrV3ZRDgN S8wOJiVpBuI6XxSsJLX75wvGMGqa/FWyaEAKaIvK6XkdNd344NvZGWKtB3m5w+nz LypRJvognnQhrmHnN4MtrA== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:07 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:05 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:05 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 10/13] pypi: Add packaging documentation for developers Date: Tue, 31 Mar 2026 09:07:00 -0700 Message-ID: <20260331160703.3137930-11-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf12b cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=t7CeM3EgAAAA:8 a=SIW4pjiE_UkdO4QYDIoA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: O6iEFQk7aSftRL98mPxhALMsYW9ADpt3 X-Proofpoint-GUID: O6iEFQk7aSftRL98mPxhALMsYW9ADpt3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX1O32HNCALCRe BKu+d41bDWhWhPgOGmD6LsrILFReirLJvju+FZkaZ+EUpgCsVPnr/n/qfSV2P1I0bso2x2R4l61 ENl5FYxHOmIdH+IOScfl/RA8u9/iyIzkxka1rXMXfl8gwoKSWKmu9ezGUxlxax5KsiQs3zxieBv 75yvQPI+1ZzGYlwotHlKozaeKQXQPz3pSgey4Tr+8Mumaklbrk/bTQmhICq5CJmfu7VzSPzKTiu l8ZAkgtxrYeGTzMgqH9Jki7RQikYDX0zuPpqWViNiOgyL1eCLHxE7rcuw+Ec/q1J3WV08ahBQ5r ixXARmHZ4dqUHU/wKXxtG0MCe5ivqqXPcGu+XOwFxlP50Nc+TeA7RkiHeTkvWJkd2XOS69httnL WQDQ3NO0AWvTDAd4aljR2NhidXFsMaMqEG+acveW12DgUYYcDgzMNhlt26wK+9ONzLKIJyUr46T XED2N/4Lh/Q8sNFS6tw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19309 Signed-off-by: Rob Woolley --- contrib/pypi/BUILD.md | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 contrib/pypi/BUILD.md diff --git a/contrib/pypi/BUILD.md b/contrib/pypi/BUILD.md new file mode 100644 index 000000000..b12fc0839 --- /dev/null +++ b/contrib/pypi/BUILD.md @@ -0,0 +1,50 @@ +# Development Instructions + +## Requirements + +- Python >= 3.9 +- pip >= 19 (for installation) + +## Testing + +To lint the `bitbake-setup` pypi packaging, run the ruff tool. +```bash +ruff check bin/bitbake-setup contrib/pypi +``` + +The steps to build and test the `bitbake-setup` pypi packaging have been automated with the `bitbake-selftest` tool. This tool automatically creates a Python virtual environment for you. + +Run the bitbake-selftest +```bash +BB_SKIP_PYPI_TESTS=no bin/bitbake-selftest -v bb.tests.setup.PyPIPackagingTest +``` + +## Packaging + +### Create the development sandbox + +To create the development sandbox run: +```bash +contrib/pypi/package-bitbake-setup.py +cd packaging_workshop +``` + +### Building the package + +To install the development tools manually run: +```bash +python3 -m pip install -e '.[dev]' +``` + +To build a wheel (.whl) then use: +```bash +python3 -m build +``` + +This produces a wheel (.whl) file in the dist directory. This may be installed using pip. + +### Installing the package + +```bash +python3 -m pip install dist/bitbake_setup-*-py3-none-any.whl +``` From patchwork Tue Mar 31 16:07:01 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84931 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 526EB10F92E6 for ; Tue, 31 Mar 2026 16:07:18 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.24323.1774973229696185800 for ; Tue, 31 Mar 2026 09:07:09 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=k1UNo0g4; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8S2249206; Tue, 31 Mar 2026 16:07:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=MmlQEO3wOMbEOw5dgksO4ImhzwHPUEGpxvH0ZzgKuNY=; b= k1UNo0g4YyUrhe96419HIMvP9EVwHaMvNjXaVtgUodC189caXLNnJnUGuRaExqXy 0dT/kyLdOlW35syL0CDnmTW7H/IiwNa3T5FftoC26SkB721yF2pafoB+5golTm7j DCtybxtU97XhZmSvWDtYc1GxYDiORMp3C7e/W7mVm5uY3ve0hxnhUqzOzeAuYmjE RswOD6Hcb6JTkh5PtqQYz7dAaR8lY3zdoyUgwlJ17p0VomRSauZ5g5O4T3rOEVlS c1vm4ASGnDYjSepwfCTXMg+V717LiuXL9mFAaFgqFYe0aVmLxIJmu5R7tCh4Ybcn 237HQ2KjKV5TsKsHeKr/nA== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:08 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:05 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:05 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 11/13] gitignore: Ignore temporary staging directory Date: Tue, 31 Mar 2026 09:07:01 -0700 Message-ID: <20260331160703.3137930-12-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf12c cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=t7CeM3EgAAAA:8 a=0vOpnHimbWeZp4raT20A:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: ysfWrnH0EySqedcMLfiO8mGQLKKjZ_ug X-Proofpoint-GUID: ysfWrnH0EySqedcMLfiO8mGQLKKjZ_ug X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX+HDLfZNQBdur SuikhkQLwyo8Vrv8gNjGWMyZBMKNSspnrPIMR+oCG6Tw0j2ys0ov95OQ7+lxREVtzJ9SDXbBmuR q34VWAFUu8biRZot31OMz7+HHNMb/c3lIE+6jotddPAmR87P5zokSympRX6/HIC65MDk8UcXVH1 nIGXX+rJ9IUsU0NeqBfV7o9+6/lyTH1PJfb3g2al9MQS/Yld1xg6vbNZrvAErpxJ1aPQDBb2G4G TcBhJffOGHkhRbs56elu6OrneyB3kYnaq0h1TFQkxSrerIso/nk1UUSuYymRdEeBaA48isbBSEK vbEqL2vGRtJ4FR/KvjhJ0SuOhvO8SPSZi6ZgJrXpSgC1+ED8PGlK/DvT7RAZUCL/5d0bb39BfMt MBOrLuSHknFdMF+vvu6SEY+JcHbo5zRaM+bQnkfqKHuybV2KBFGqIVoEcXTfnAlajfPL1yv6rt+ hjZFi/0FAlinTv7PIuA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19310 This directory gets created automatically by package-bitbake-setup.py when packaging bitbake-setup for PyPI. It is a temporary staging directory and should not be added to git. Signed-off-by: Rob Woolley --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a6a256b2c..9a5c4ec49 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ lib/toaster/contrib/tts/backlog.txt lib/toaster/contrib/tts/log/* lib/toaster/contrib/tts/.cache/* lib/bb/tests/runqueue-tests/bitbake-cookerdaemon.log +packaging_workspace/ From patchwork Tue Mar 31 16:07:02 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84922 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 3AF0F109B497 for ; Tue, 31 Mar 2026 16:07:17 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.23975.1774973230339005905 for ; Tue, 31 Mar 2026 09:07:10 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=nbmFwt09; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8T2249206; Tue, 31 Mar 2026 16:07:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=CPfjqgxC1Pw7+596qsTMfKEFSYZzXk7VTn/7xhI6Ls0=; b= nbmFwt09UjoVFxejaomvZGmyJQz6yLj/qsOuApmPJ7jF0Hcdj8lrU3vTova+aFVe D7LBbu+fOR5rL/Z+WphAjnpnz27YT9BumlZLEiZDUR/U1+AM7Bps8s+bKtM+Cmor xlmAXaCRilcH3/blw/Luhwl5eLqN0kbPH4pRCTg1C3X+c8rrrJ6Oikq4LpjNDYkm KbafNlO5D/dblc0XeR5YFGOte97EcT+wMj2FWx2VKHWaWFQ6i8YkGE0ls7deWon2 eY1775LppQpGGkVqQpZIDVqjhIdWWf2C02gE7j0xA5TD5gYxggTPHEzUwnwOUUl/ pqpi1VeYoGX9skJT7r+1Mw== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:08 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:05 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:05 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 12/13] lib: Vendorize bundled third-party libraries under bb._vendor Date: Tue, 31 Mar 2026 09:07:02 -0700 Message-ID: <20260331160703.3137930-13-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf12c cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=t7CeM3EgAAAA:8 a=sdMhlzqdCMuPHYe87FcA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: JQDDYh5VvOC9vVMKbm7FendGfA53dBn1 X-Proofpoint-GUID: JQDDYh5VvOC9vVMKbm7FendGfA53dBn1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfX5ZnsyiQXj7F0 fd1/xLeqMQZsN4UYNKpQCTUQhfuInx7f53ojeyrT3JW2gnVJLtm6//eF7XvXOELXm5g7xhz2WOx xpf5XyiwoffsD2H6uqClZEoJVKUaomw8fioPCBQpqnxWa+0Se7cGRO+t7WoKGtfJOq5B9B7ydFH XliKfcFc5ZU2tWdV6fsJ3K/CO6zpiXPN2/qakoeZvH2cexlNHD96pOMKKqgniPtGCLf0dPCDLJq zpS49C/bVmH8ajqpfLenkndQ89z8EloCW+C2a+fnkoUSpvybnAUHPo7Vf8MsA0+BAsnsoXLuSqm wexfp/GbCyONNqBGsrQF173ZJcodcdBxET3dRI102tZs0sFHvVlg80cqzl5TWEdPRO4kGlrGqdI YBaGMfxMfO/sntssRc7rGpl9yaNfSruwTBCbntITOvQ/ivZ3TqCxoqdRmKEu0FXuUblje0M3agh pKc95IBiv+b6Uehln3g== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:17 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19311 Move ply, progressbar, simplediff, and bs4 from lib/ into lib/bb/_vendor/ to avoid conflicts with system-installed versions and to support proper packaging. These libraries contain local modifications from their upstream versions. - Create lib/bb/_vendor/__init__.py - Move ply/, progressbar/, simplediff/, bs4/ into bb/_vendor/ - Convert absolute self-references to relative imports within ply (yacc.py) and bs4 (20 import sites across 8 files) - Update all external import sites to use bb._vendor prefix: bb/pysh/pyshlex.py, bb/pysh/pyshyacc.py, bb/ui/knotty.py, bb/siggen.py, bb/fetch2/wget.py, toaster/tests/views/test_views.py Assisted-by: Claude:claude-4.6-opus Signed-off-by: Rob Woolley --- lib/bb/_vendor/__init__.py | 18 ++++++++++++++++++ lib/{ => bb/_vendor}/bs4/AUTHORS | 0 lib/{ => bb/_vendor}/bs4/CHANGELOG | 0 lib/{ => bb/_vendor}/bs4/LICENSE | 0 lib/{ => bb/_vendor}/bs4/__init__.py | 0 lib/{ => bb/_vendor}/bs4/builder/__init__.py | 2 +- lib/{ => bb/_vendor}/bs4/builder/_html5lib.py | 12 ++++++------ .../_vendor}/bs4/builder/_htmlparser.py | 6 +++--- lib/{ => bb/_vendor}/bs4/builder/_lxml.py | 6 +++--- lib/{ => bb/_vendor}/bs4/css.py | 2 +- lib/{ => bb/_vendor}/bs4/dammit.py | 0 lib/{ => bb/_vendor}/bs4/diagnose.py | 9 ++++----- lib/{ => bb/_vendor}/bs4/element.py | 6 +++--- lib/{ => bb/_vendor}/bs4/formatter.py | 2 +- lib/{ => bb/_vendor}/ply/__init__.py | 0 lib/{ => bb/_vendor}/ply/lex.py | 0 lib/{ => bb/_vendor}/ply/yacc.py | 6 +----- lib/{ => bb/_vendor}/progressbar/LICENSE.txt | 0 lib/{ => bb/_vendor}/progressbar/__init__.py | 0 lib/{ => bb/_vendor}/progressbar/compat.py | 0 .../_vendor}/progressbar/progressbar.py | 0 lib/{ => bb/_vendor}/progressbar/widgets.py | 0 lib/{ => bb/_vendor}/simplediff/LICENSE | 0 lib/{ => bb/_vendor}/simplediff/__init__.py | 0 lib/bb/fetch2/wget.py | 4 ++-- lib/bb/pysh/pyshlex.py | 2 +- lib/bb/pysh/pyshyacc.py | 2 +- lib/bb/siggen.py | 2 +- lib/bb/ui/knotty.py | 2 +- lib/toaster/tests/views/test_views.py | 2 +- 30 files changed, 48 insertions(+), 35 deletions(-) create mode 100644 lib/bb/_vendor/__init__.py rename lib/{ => bb/_vendor}/bs4/AUTHORS (100%) rename lib/{ => bb/_vendor}/bs4/CHANGELOG (100%) rename lib/{ => bb/_vendor}/bs4/LICENSE (100%) rename lib/{ => bb/_vendor}/bs4/__init__.py (100%) rename lib/{ => bb/_vendor}/bs4/builder/__init__.py (99%) rename lib/{ => bb/_vendor}/bs4/builder/_html5lib.py (98%) rename lib/{ => bb/_vendor}/bs4/builder/_htmlparser.py (99%) rename lib/{ => bb/_vendor}/bs4/builder/_lxml.py (99%) rename lib/{ => bb/_vendor}/bs4/css.py (99%) rename lib/{ => bb/_vendor}/bs4/dammit.py (100%) rename lib/{ => bb/_vendor}/bs4/diagnose.py (96%) rename lib/{ => bb/_vendor}/bs4/element.py (99%) rename lib/{ => bb/_vendor}/bs4/formatter.py (99%) rename lib/{ => bb/_vendor}/ply/__init__.py (100%) rename lib/{ => bb/_vendor}/ply/lex.py (100%) rename lib/{ => bb/_vendor}/ply/yacc.py (99%) rename lib/{ => bb/_vendor}/progressbar/LICENSE.txt (100%) rename lib/{ => bb/_vendor}/progressbar/__init__.py (100%) rename lib/{ => bb/_vendor}/progressbar/compat.py (100%) rename lib/{ => bb/_vendor}/progressbar/progressbar.py (100%) rename lib/{ => bb/_vendor}/progressbar/widgets.py (100%) rename lib/{ => bb/_vendor}/simplediff/LICENSE (100%) rename lib/{ => bb/_vendor}/simplediff/__init__.py (100%) diff --git a/lib/bb/_vendor/__init__.py b/lib/bb/_vendor/__init__.py new file mode 100644 index 000000000..3c054dc32 --- /dev/null +++ b/lib/bb/_vendor/__init__.py @@ -0,0 +1,18 @@ +# +# Copyright BitBake Contributors +# +# SPDX-License-Identifier: GPL-2.0-only +# + +""" +Vendored third-party libraries for BitBake. + +These libraries have been modified from their upstream versions and are +bundled here to avoid conflicts with system-installed packages. + +Vendored packages: + - bs4 (BeautifulSoup4) + - ply + - progressbar + - simplediff +""" diff --git a/lib/bs4/AUTHORS b/lib/bb/_vendor/bs4/AUTHORS similarity index 100% rename from lib/bs4/AUTHORS rename to lib/bb/_vendor/bs4/AUTHORS diff --git a/lib/bs4/CHANGELOG b/lib/bb/_vendor/bs4/CHANGELOG similarity index 100% rename from lib/bs4/CHANGELOG rename to lib/bb/_vendor/bs4/CHANGELOG diff --git a/lib/bs4/LICENSE b/lib/bb/_vendor/bs4/LICENSE similarity index 100% rename from lib/bs4/LICENSE rename to lib/bb/_vendor/bs4/LICENSE diff --git a/lib/bs4/__init__.py b/lib/bb/_vendor/bs4/__init__.py similarity index 100% rename from lib/bs4/__init__.py rename to lib/bb/_vendor/bs4/__init__.py diff --git a/lib/bs4/builder/__init__.py b/lib/bb/_vendor/bs4/builder/__init__.py similarity index 99% rename from lib/bs4/builder/__init__.py rename to lib/bb/_vendor/bs4/builder/__init__.py index ffb31fc25..d60a9a672 100644 --- a/lib/bs4/builder/__init__.py +++ b/lib/bb/_vendor/bs4/builder/__init__.py @@ -6,7 +6,7 @@ import itertools import re import warnings import sys -from bs4.element import ( +from ..element import ( CharsetMetaAttributeValue, ContentMetaAttributeValue, RubyParenthesisString, diff --git a/lib/bs4/builder/_html5lib.py b/lib/bb/_vendor/bs4/builder/_html5lib.py similarity index 98% rename from lib/bs4/builder/_html5lib.py rename to lib/bb/_vendor/bs4/builder/_html5lib.py index 7c46a8511..8ca19fec6 100644 --- a/lib/bs4/builder/_html5lib.py +++ b/lib/bb/_vendor/bs4/builder/_html5lib.py @@ -7,14 +7,14 @@ __all__ = [ import warnings import re -from bs4.builder import ( +from . import ( DetectsXMLParsedAsHTML, PERMISSIVE, HTML, HTML_5, HTMLTreeBuilder, ) -from bs4.element import ( +from ..element import ( NamespacedAttribute, nonwhitespace_re, ) @@ -23,7 +23,7 @@ from html5lib.constants import ( namespaces, prefixes, ) -from bs4.element import ( +from ..element import ( Comment, Doctype, NavigableString, @@ -134,7 +134,7 @@ class TreeBuilderForHtml5lib(treebuilder_base.TreeBuilder): if soup: self.soup = soup else: - from bs4 import BeautifulSoup + from .. import BeautifulSoup # TODO: Why is the parser 'html.parser' here? To avoid an # infinite loop? self.soup = BeautifulSoup( @@ -180,7 +180,7 @@ class TreeBuilderForHtml5lib(treebuilder_base.TreeBuilder): return TextNode(Comment(data), self.soup) def fragmentClass(self): - from bs4 import BeautifulSoup + from .. import BeautifulSoup # TODO: Why is the parser 'html.parser' here? To avoid an # infinite loop? self.soup = BeautifulSoup("", "html.parser") @@ -198,7 +198,7 @@ class TreeBuilderForHtml5lib(treebuilder_base.TreeBuilder): return treebuilder_base.TreeBuilder.getFragment(self).element def testSerializer(self, element): - from bs4 import BeautifulSoup + from .. import BeautifulSoup rv = [] doctype_re = re.compile(r'^(.*?)(?: PUBLIC "(.*?)"(?: "(.*?)")?| SYSTEM "(.*?)")?$') diff --git a/lib/bs4/builder/_htmlparser.py b/lib/bb/_vendor/bs4/builder/_htmlparser.py similarity index 99% rename from lib/bs4/builder/_htmlparser.py rename to lib/bb/_vendor/bs4/builder/_htmlparser.py index 3cc187f89..f55cbadf6 100644 --- a/lib/bs4/builder/_htmlparser.py +++ b/lib/bb/_vendor/bs4/builder/_htmlparser.py @@ -13,16 +13,16 @@ from html.parser import HTMLParser import sys import warnings -from bs4.element import ( +from ..element import ( CData, Comment, Declaration, Doctype, ProcessingInstruction, ) -from bs4.dammit import EntitySubstitution, UnicodeDammit +from ..dammit import EntitySubstitution, UnicodeDammit -from bs4.builder import ( +from . import ( DetectsXMLParsedAsHTML, ParserRejectedMarkup, HTML, diff --git a/lib/bs4/builder/_lxml.py b/lib/bb/_vendor/bs4/builder/_lxml.py similarity index 99% rename from lib/bs4/builder/_lxml.py rename to lib/bb/_vendor/bs4/builder/_lxml.py index 4f7cf7468..fc80133b2 100644 --- a/lib/bs4/builder/_lxml.py +++ b/lib/bb/_vendor/bs4/builder/_lxml.py @@ -14,14 +14,14 @@ except ImportError as e: from io import BytesIO from io import StringIO from lxml import etree -from bs4.element import ( +from ..element import ( Comment, Doctype, NamespacedAttribute, ProcessingInstruction, XMLProcessingInstruction, ) -from bs4.builder import ( +from . import ( DetectsXMLParsedAsHTML, FAST, HTML, @@ -30,7 +30,7 @@ from bs4.builder import ( ParserRejectedMarkup, TreeBuilder, XML) -from bs4.dammit import EncodingDetector +from ..dammit import EncodingDetector LXML = 'lxml' diff --git a/lib/bs4/css.py b/lib/bb/_vendor/bs4/css.py similarity index 99% rename from lib/bs4/css.py rename to lib/bb/_vendor/bs4/css.py index cd1fd2df8..7cbeb83c1 100644 --- a/lib/bs4/css.py +++ b/lib/bb/_vendor/bs4/css.py @@ -68,7 +68,7 @@ class CSS(object): result (a common mistake). """ # Import here to avoid circular import - from bs4.element import ResultSet + from .element import ResultSet return ResultSet(None, results) def compile(self, select, namespaces=None, flags=0, **kwargs): diff --git a/lib/bs4/dammit.py b/lib/bb/_vendor/bs4/dammit.py similarity index 100% rename from lib/bs4/dammit.py rename to lib/bb/_vendor/bs4/dammit.py diff --git a/lib/bs4/diagnose.py b/lib/bb/_vendor/bs4/diagnose.py similarity index 96% rename from lib/bs4/diagnose.py rename to lib/bb/_vendor/bs4/diagnose.py index 469279534..76d0be8f1 100644 --- a/lib/bs4/diagnose.py +++ b/lib/bb/_vendor/bs4/diagnose.py @@ -6,9 +6,8 @@ __license__ = "MIT" import cProfile from io import BytesIO from html.parser import HTMLParser -import bs4 -from bs4 import BeautifulSoup, __version__ -from bs4.builder import builder_registry +from . import BeautifulSoup, __version__ +from .builder import builder_registry import os import pstats @@ -219,8 +218,8 @@ def profile(num_elements=100000, parser="lxml"): filename = filehandle.name data = rdoc(num_elements) - vars = dict(bs4=bs4, data=data, parser=parser) - cProfile.runctx('bs4.BeautifulSoup(data, parser)' , vars, vars, filename) + vars = dict(BeautifulSoup=BeautifulSoup, data=data, parser=parser) + cProfile.runctx('BeautifulSoup(data, parser)' , vars, vars, filename) stats = pstats.Stats(filename) # stats.strip_dirs() diff --git a/lib/bs4/element.py b/lib/bb/_vendor/bs4/element.py similarity index 99% rename from lib/bs4/element.py rename to lib/bb/_vendor/bs4/element.py index 0aefe734b..38ca2dc27 100644 --- a/lib/bs4/element.py +++ b/lib/bb/_vendor/bs4/element.py @@ -9,8 +9,8 @@ import re import sys import warnings -from bs4.css import CSS -from bs4.formatter import ( +from .css import CSS +from .formatter import ( Formatter, HTMLFormatter, XMLFormatter, @@ -420,7 +420,7 @@ class PageElement(object): and not isinstance(new_child, NavigableString)): new_child = NavigableString(new_child) - from bs4 import BeautifulSoup + from . import BeautifulSoup if isinstance(new_child, BeautifulSoup): # We don't want to end up with a situation where one BeautifulSoup # object contains another. Insert the children one at a time. diff --git a/lib/bs4/formatter.py b/lib/bb/_vendor/bs4/formatter.py similarity index 99% rename from lib/bs4/formatter.py rename to lib/bb/_vendor/bs4/formatter.py index 9fa1b57cb..50f775aee 100644 --- a/lib/bs4/formatter.py +++ b/lib/bb/_vendor/bs4/formatter.py @@ -1,4 +1,4 @@ -from bs4.dammit import EntitySubstitution +from .dammit import EntitySubstitution class Formatter(EntitySubstitution): """Describes a strategy to use when outputting a parse tree to a string. diff --git a/lib/ply/__init__.py b/lib/bb/_vendor/ply/__init__.py similarity index 100% rename from lib/ply/__init__.py rename to lib/bb/_vendor/ply/__init__.py diff --git a/lib/ply/lex.py b/lib/bb/_vendor/ply/lex.py similarity index 100% rename from lib/ply/lex.py rename to lib/bb/_vendor/ply/lex.py diff --git a/lib/ply/yacc.py b/lib/bb/_vendor/ply/yacc.py similarity index 99% rename from lib/ply/yacc.py rename to lib/bb/_vendor/ply/yacc.py index 529f85b08..0cd9b522b 100644 --- a/lib/ply/yacc.py +++ b/lib/bb/_vendor/ply/yacc.py @@ -100,12 +100,8 @@ try: except AttributeError: MAXINT = sys.maxsize -# Python 2.x/3.0 compatibility. def load_ply_lex(): - if sys.version_info[0] < 3: - import lex - else: - import ply.lex as lex + from . import lex return lex # This object is a stand-in for a logging object created by the diff --git a/lib/progressbar/LICENSE.txt b/lib/bb/_vendor/progressbar/LICENSE.txt similarity index 100% rename from lib/progressbar/LICENSE.txt rename to lib/bb/_vendor/progressbar/LICENSE.txt diff --git a/lib/progressbar/__init__.py b/lib/bb/_vendor/progressbar/__init__.py similarity index 100% rename from lib/progressbar/__init__.py rename to lib/bb/_vendor/progressbar/__init__.py diff --git a/lib/progressbar/compat.py b/lib/bb/_vendor/progressbar/compat.py similarity index 100% rename from lib/progressbar/compat.py rename to lib/bb/_vendor/progressbar/compat.py diff --git a/lib/progressbar/progressbar.py b/lib/bb/_vendor/progressbar/progressbar.py similarity index 100% rename from lib/progressbar/progressbar.py rename to lib/bb/_vendor/progressbar/progressbar.py diff --git a/lib/progressbar/widgets.py b/lib/bb/_vendor/progressbar/widgets.py similarity index 100% rename from lib/progressbar/widgets.py rename to lib/bb/_vendor/progressbar/widgets.py diff --git a/lib/simplediff/LICENSE b/lib/bb/_vendor/simplediff/LICENSE similarity index 100% rename from lib/simplediff/LICENSE rename to lib/bb/_vendor/simplediff/LICENSE diff --git a/lib/simplediff/__init__.py b/lib/bb/_vendor/simplediff/__init__.py similarity index 100% rename from lib/simplediff/__init__.py rename to lib/bb/_vendor/simplediff/__init__.py diff --git a/lib/bb/fetch2/wget.py b/lib/bb/fetch2/wget.py index ca4959ab5..aaa5027f3 100644 --- a/lib/bb/fetch2/wget.py +++ b/lib/bb/fetch2/wget.py @@ -27,8 +27,8 @@ from bb.fetch2 import FetchMethod from bb.fetch2 import FetchError from bb.fetch2 import logger from bb.fetch2 import runfetchcmd -from bs4 import BeautifulSoup -from bs4 import SoupStrainer +from bb._vendor.bs4 import BeautifulSoup +from bb._vendor.bs4 import SoupStrainer class WgetProgressHandler(bb.progress.LineFilterProgressHandler): """ diff --git a/lib/bb/pysh/pyshlex.py b/lib/bb/pysh/pyshlex.py index a42c29446..3f99cd1bd 100644 --- a/lib/bb/pysh/pyshlex.py +++ b/lib/bb/pysh/pyshlex.py @@ -14,7 +14,7 @@ # that hard to enable pull mode. import re -from ply import lex +from bb._vendor.ply import lex from bb.pysh.sherrors import * class NeedMore(Exception): diff --git a/lib/bb/pysh/pyshyacc.py b/lib/bb/pysh/pyshyacc.py index 924860a6f..67e22c96e 100644 --- a/lib/bb/pysh/pyshyacc.py +++ b/lib/bb/pysh/pyshyacc.py @@ -13,7 +13,7 @@ import sys import bb.pysh.pyshlex as pyshlex tokens = pyshlex.tokens -from ply import yacc +from bb._vendor.ply import yacc import bb.pysh.sherrors as sherrors class IORedirect: diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py index 985fa7e4c..4d0aa4ac3 100644 --- a/lib/bb/siggen.py +++ b/lib/bb/siggen.py @@ -12,7 +12,7 @@ import tempfile import pickle import bb.data import difflib -import simplediff +from bb._vendor import simplediff import json import types from contextlib import contextmanager diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py index 82531ef8f..15025e8dd 100644 --- a/lib/bb/ui/knotty.py +++ b/lib/bb/ui/knotty.py @@ -14,7 +14,7 @@ import io import os import sys import logging -import progressbar +from bb._vendor import progressbar import signal import bb.msg import time diff --git a/lib/toaster/tests/views/test_views.py b/lib/toaster/tests/views/test_views.py index e1adfcf86..5e64e8192 100644 --- a/lib/toaster/tests/views/test_views.py +++ b/lib/toaster/tests/views/test_views.py @@ -27,7 +27,7 @@ import toastergui from toastergui.tables import SoftwareRecipesTable import json -from bs4 import BeautifulSoup +from bb._vendor.bs4 import BeautifulSoup import string PROJECT_NAME = "test project" From patchwork Tue Mar 31 16:07:03 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Woolley X-Patchwork-Id: 84933 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 34F4110F92E7 for ; Tue, 31 Mar 2026 16:07:18 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.24325.1774973230896395242 for ; Tue, 31 Mar 2026 09:07:11 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@windriver.com header.s=PPS06212021 header.b=cJ750TsX; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=85502649bd=rob.woolley@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V6nv8U2249206; Tue, 31 Mar 2026 16:07:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=89SxVKN82X8uZvIAiDbuPOopuGkicbdujUVkyBZNDT8=; b= cJ750TsX1OlasTc7iDHenjHGntP8vTA32ZzEEUB8kOvx2djLvgwsfpnFD9x6Mn8C LKFkSut8uIqObzlFAQLnPP6XZsuL4Ti5RM2rl4OMs0STStN3GpVYLoCkVLmMn0+V sLD8f3YxtOxCSXWTDXlGEsDCpXWU5j0gB8EzjBKIUGU62j3xNTOnCmnz/cgHtLDK cz1jKw6tAxZwKL1SstFZ2CODH1yAva7QOJjwF+mDB/njLpXDBhSZ9bZBrmB/8vRJ h1zVSm5IWOT6Adf3Mo7d7aSsiEqcC9CQOT3hoqNC5xSbM+mi2Md/nKExhFzbWOj+ RzXVODAjQKE4Uza4YpfODQ== Received: from ala-exchng02.corp.ad.wrs.com (ala-exchng02.wrs.com [128.224.246.37]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vuyv2-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 31 Mar 2026 16:07:09 +0000 (GMT) Received: from ala-exchng01.corp.ad.wrs.com (10.11.224.121) by ALA-EXCHNG02.corp.ad.wrs.com (10.11.224.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.61; Tue, 31 Mar 2026 09:07:05 -0700 Received: from ala-lpggp3.wrs.com (10.11.232.110) by ala-exchng01.corp.ad.wrs.com (10.11.224.121) with Microsoft SMTP Server id 15.1.2507.61 via Frontend Transport; Tue, 31 Mar 2026 09:07:06 -0700 From: Rob Woolley To: CC: Subject: [PATCH v2 13/13] bb: Move codegen.py inside module Date: Tue, 31 Mar 2026 09:07:03 -0700 Message-ID: <20260331160703.3137930-14-rob.woolley@windriver.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260331160703.3137930-1-rob.woolley@windriver.com> References: <20260331160703.3137930-1-rob.woolley@windriver.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cbf12d cx=c_pps a=Lg6ja3A245NiLSnFpY5YKQ==:117 a=Lg6ja3A245NiLSnFpY5YKQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=t7CeM3EgAAAA:8 a=s_keFEVr-WujLWSdrMAA:9 a=zZCYzV9kfG8A:10 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: tukVcSXg54sPcoZfHAJk0c40mXWySR7X X-Proofpoint-GUID: tukVcSXg54sPcoZfHAJk0c40mXWySR7X X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDE1NCBTYWx0ZWRfXx+wZoGPnF0jv gsMo9Z+vnf+HNlsbnPE7uojHK/w5QfHieRD7LCPSgdf1WDvNwAlhHuXWGIhW+AI5PGDi97XPC5O H3X768FeXEWEt31A2h/nSRNUCBLfh+y3+PC/biwKFjKs6TUuwLANAEygihs+nky+pJjFpm2Fm14 UONCG8bafdqQQa8Xg46YnDiamz/a8SwCq/vm75qM+8nJ3zAiVyvPwvCObRRf4Bjd2kOJOGcL2v4 iqKaEFeMgDzKIULgo8ymQNBbAGLLef38XO+VviO4vAW3vy9tykADNWsoV65vlQzbFDQVmwNcXS2 I1Ho2IL6ZgKAwerYElthh26dVyUqpEZ62cXrCcUq9DgZ+EB+FjGK6lAr3esCX9YBimd8caHXuhR N9otOSg+tsm2lb88eka7xAefejMVB4ovgvPsTozF1uqjxOMxUVj23IdaPgkUFvgIqeQOvuuIVSG pP7TU8KbD921+pR++ig== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_03,2026-03-31_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310154 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 16:07:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/19312 Codegen is used exclusively by bb.codeparser.PythonParser. Move it inside the bb module to avoid exposing it externally when installing bb as a package. Signed-off-by: Rob Woolley --- lib/{ => bb}/codegen.py | 0 lib/bb/codeparser.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename lib/{ => bb}/codegen.py (100%) diff --git a/lib/codegen.py b/lib/bb/codegen.py similarity index 100% rename from lib/codegen.py rename to lib/bb/codegen.py diff --git a/lib/bb/codeparser.py b/lib/bb/codeparser.py index 4f70cf7fe..76e4eea2e 100644 --- a/lib/bb/codeparser.py +++ b/lib/bb/codeparser.py @@ -25,9 +25,9 @@ recipe caches don't trigger "Taskhash mismatch" errors. import ast import sys -import codegen import logging import inspect +import bb.codegen import bb.pysh as pysh import bb.utils, bb.data import hashlib