From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Thu, 13 Feb 2025 22:42:27 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-pj1-f59.google.com (mail-pj1-f59.google.com [209.85.216.59]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 51DLgPwr031242 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 13 Feb 2025 22:42:26 +0100 Received: by mail-pj1-f59.google.com with SMTP id 98e67ed59e1d1-2fa228b4151sf2866792a91.1 for ; Thu, 13 Feb 2025 13:42:26 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1739482939; cv=pass; d=google.com; s=arc-20240605; b=FY1aFmuEH15WgB/nJjurCVRJ+Mgpgh1ewLKTkYmavk8HyJvOwwt1kmXhyMLWBEedKB OnGoy6AiteWV5qmoyGm4u5HMDntrLgWHy/cZ4j2P7QVjLD0s4+2tARRrRZDh9asOhq1s XG+snhkhtIYfsetvKMShRArJJh33usHrk1KiVLMFQNtHY4j2kZxRWoyd3VB/GnpKc+wm p8myqJrOybdZLOA50R9AejUrBAuZ1ofsUqOvWyo8rW9pF1D7BWxDAmdnVdFVjOqNdOmv MAqxUbm2hAC8mU1Elo1qoWsWyIhb0askxQmoQBh57EVmi7pc7HyAb7FxNWIl16sK0BvK GbKg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:feedback-id:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=uQmE74xtO5qN07yAdqw2iTmW7503KNxUE4I3cejgVPI=; fh=wgeXtyp+35QVhOuXOUDS44yID8mCfx797LC3EcywQtI=; b=iVTVnNpTGUeWW9JIKfNDLHeULdibPMWweyEab9tsEwa/buaVtpokjuRX3pC27DCxav pX+9G4J7yW2NBNq55vgW0YY54m8ScYOVdHMX8V5pRVCSSKEVfK/ML+U4sQNrU9tPG9+5 VGJGm0Zfc8JKIoh541A2K4Wsy34Q/5d9p7b4qyrJzEpe6ib2+fHugqz4HFN9NlkZLKgL pHBSd8wIB6U2/hJUZeFdjWk2W7qjfHu7UGNK2aYmmNkGRx9RQeSlzsbn88uExLn2XeWn gEuUN7xquKbvvuUxD5sRdj5Wb92muCTHYIds+FDY5MQfpDvnbYQ4ht41JONly2MeRwyV B2aA==; darn=ilbers.de ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=Qh4vR2mt; spf=pass (google.com: domain of fm-1325773-2025021321421519d55a6503a474787e-stzvef@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) smtp.mailfrom=fm-1325773-2025021321421519d55a6503a474787e-STzVEF@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1739482939; x=1740087739; darn=ilbers.de; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=uQmE74xtO5qN07yAdqw2iTmW7503KNxUE4I3cejgVPI=; b=Y2YI433VjhtXyqqivWPGlPxWbcM5Ph7Lm4IEZ2d2PPSCf9fKw/o6ePSVMTLCWCPtZH cK8MJzLFOoRai7qcfBm9rzjIAEN3wuAUYEoRtoBDno37izpgkLUcYZhwOocTM9CeO9Xt ShmXgxLHRQl/fCpjcQVJFsDe0+u9f/yXXG2Qpd+M/L205BAInxXzcu2Q1QLnwIqpMUmX Z58ATB22z+LH3XcIJ2uzUAL7cVTIXOVsfyyeid2am8ylamR9U+PG6V+VSqyA66TslhG3 AU4Q2JnF4/RMDKZ/iy9glIK3hARVrGplhoQZPrdv8h7KAxQPC7cIs3VNGSC2eSiEjxpe wN+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739482939; x=1740087739; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:message-id:date:subject:cc:to:from:x-beenthere :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uQmE74xtO5qN07yAdqw2iTmW7503KNxUE4I3cejgVPI=; b=FkSnN3p6q1BwebTM88tJtVZkdL721vgh+gyA2/OS4E9rItVCZL8MBwQQ4WF9B43+re gHlwcPzCHLsx78figjYGsaSR3RLRWYrm3RqMF3aH6Zfr3/tYyDfW9YNWfNzDwaObveq/ mXgCECtgROUh/fbe2YCLo0kc3mgCLFY1UqxTBHX+k5K0tcCyn2CLFElhgudXZ58is3j7 HfFtrp7he5VH1r9OlDuSL0cLuBdtEEYeS0f7mY5t1ACSMLn2OjD8sAejUgwRt7PYBMVA raIT7BAs/yCuNLe68DGSEiwk5E+axXI2JFHtfqug/lc9bd4TzGq5EJotRSaKUJ6p/spo Vhfw== X-Forwarded-Encrypted: i=2; AJvYcCXCCLavic/mtXy7Qsg+s0Rc+ZEhsd+s72hZMx5SZlq/IDRnaU88+uRv10qohmhBNf/4P9mn@ilbers.de X-Gm-Message-State: AOJu0YzyOpfJHdkaTQRWrQf+wrCZrGA6kPKET9MkWTDvJmPQKpqNJzAE tXpn3Nimn4YvtjNtd0v5GPdVOSz5MUA3O0s3uo9JMywKO2U5nGe8 X-Google-Smtp-Source: AGHT+IG4rI7wVyItuOyWmUJYNZuAtl8gykdjC+oVwEb0b/mVT4GzIBxXcCNHyw/c0SsRAZ8GtglRuw== X-Received: by 2002:a17:90a:eb04:b0:2fc:2a9c:21de with SMTP id 98e67ed59e1d1-2fc2a9c21e4mr1544492a91.35.1739482939041; Thu, 13 Feb 2025 13:42:19 -0800 (PST) X-BeenThere: isar-users@googlegroups.com; h=Adn5yVGvoPvth2JQhKGHkWALejBGaGuYQjTlsMib3wUtETo9cw== Received: by 2002:a17:90a:ec02:b0:2ee:8220:1966 with SMTP id 98e67ed59e1d1-2fc0d57e4d3ls787199a91.0.-pod-prod-09-us; Thu, 13 Feb 2025 13:42:18 -0800 (PST) X-Received: by 2002:a17:90b:520d:b0:2f9:c144:9d13 with SMTP id 98e67ed59e1d1-2fbf5c57faamr13936719a91.24.1739482937709; Thu, 13 Feb 2025 13:42:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739482937; cv=none; d=google.com; s=arc-20240605; b=T8rogO6QMZ1l8L43LmfxfHCqju+WQnOBZPr7/+6n/X0JQwNpK1UzeTgGp3sePzwODr TbD6VSUen2ojnYm8frCeaFtsAgTdcQ33zG9IueQ9z2MS/+TnAAgM0C4OGVl1eHPS8gap Uv4M3xm8i+sB7ohUCu+fBEEzdNPG4LydG3vFxvsV/bBaEJRdn7cYkm9TZkLVNnPRK3Wu 6876dZqEMnzLR8rr88CkC7mFu+99yfM8ZmvzlpHXwzRnY8Qw6xsKsX9OeznKVAz7igfh 5RoH8r3OnQeXaenK4SlI4cpRk7r3XUdRXET5fqr63vCbWHUkoUthKB6jljbynw5AV5op oxAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:content-transfer-encoding:mime-version:message-id:date :subject:cc:to:from:dkim-signature; bh=bUfcTd9bPX4/Nlx+G8mKsnrwqG/sGWnaNdM2lpfe5Mc=; fh=3bh9z2BWAzGAc1byRhMi0K+arMZmX5BQHE0sOxINdyU=; b=DG5NsvWAd0gcxblsKHKkDs8yCOG2xxks2k8UdAqL/EZgl4qD6QimFM16ZqUv5qScHq dSMzMJsdoDa1Ny/uS4xovsWP5tASuTiK7xk8y0ZIhIJj+4br1nfKt28fhMLiDauGFSxk LhXmGecyBWMGz467T9983+BJdTGHPXs/YK9N58Tkyd1jUH/TGsycbZmGPh0C3c8wSAez 6jjlxgDce/L3tCuT96+5rfmr6gwJ7nUXueBvtAoC2tJnfgfH/3Q1G4vAuNaKU1daD78w kz3SPTcrNbBMSXS0Bpq6nG+Nu8OhwYiJnbrCkq5IDX8w3rEq2K6IMGvae/QYdbHFHe8b MXtA==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=Qh4vR2mt; spf=pass (google.com: domain of fm-1325773-2025021321421519d55a6503a474787e-stzvef@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) smtp.mailfrom=fm-1325773-2025021321421519d55a6503a474787e-STzVEF@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-64-227.siemens.flowmailer.net (mta-64-227.siemens.flowmailer.net. [185.136.64.227]) by gmr-mx.google.com with ESMTPS id 98e67ed59e1d1-2faa5cee208si468355a91.1.2025.02.13.13.42.17 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Feb 2025 13:42:17 -0800 (PST) Received-SPF: pass (google.com: domain of fm-1325773-2025021321421519d55a6503a474787e-stzvef@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) client-ip=185.136.64.227; Received: by mta-64-227.siemens.flowmailer.net with ESMTPSA id 2025021321421519d55a6503a474787e for ; Thu, 13 Feb 2025 22:42:15 +0100 From: "chris.larson via isar-users" To: isar-users@googlegroups.com Cc: Christopher Larson Subject: [PATCHv4 1/3] lists.bbclass: add class Date: Thu, 13 Feb 2025 14:41:55 -0700 Message-ID: <20250213214200.296-1-chris.larson@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1325773:519-21489:flowmailer X-Original-Sender: chris.larson@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=Qh4vR2mt; spf=pass (google.com: domain of fm-1325773-2025021321421519d55a6503a474787e-stzvef@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) smtp.mailfrom=fm-1325773-2025021321421519d55a6503a474787e-STzVEF@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: chris.larson@siemens.com Reply-To: chris.larson@siemens.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: isar-users@googlegroups.com X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, RCVD_IN_RP_CERTIFIED,RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-TUID: VXhzVS2xxsQ6 From: Christopher Larson This class provides functions to improve the functionality of bitbake list variables. - Add the ability to remove items from a list variable without using :remove. - Add the ability for a list item to imply the addition of other list items. Usage requires either adding the variable name to LIST_VARIABLES, or manually adding a :remove and a :prepend to each fully supported list variable. To remove items from a configured list, simply append the item to be removed to the variable with a '-' or '~' prefix. For example, to remove 'alpha' from a configured variable, append '-alpha' to it. To support implied list items, create a mapping of items to be appended to the variable when a specific item is present. For example, to append 'beta' to ROOTFS_FEATURES when 'alpha' is present, configure ROOTFS_FEATURES as such, then set IMPLIED_ROOTFS_FEATURES[alpha] = "beta". Signed-off-by: Christopher Larson --- meta/classes/lists.bbclass | 105 +++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 meta/classes/lists.bbclass diff --git a/meta/classes/lists.bbclass b/meta/classes/lists.bbclass new file mode 100644 index 00000000..db8f5837 --- /dev/null +++ b/meta/classes/lists.bbclass @@ -0,0 +1,105 @@ +# Functions to improve the functionality of bitbake list variables. +# +# - Add the ability to remove items from a list variable without using :remove. +# - Add the ability for a list item to imply the addition of other list items. +# + +# Usage requires either adding the variable name to LIST_VARIABLES, or manually +# adding a :remove and a :prepend to each fully supported list variable. +# +# To remove items from a configured list, simply append the item to be removed +# to the variable with a '-' or '~' prefix. For example, to remove 'alpha' from +# ROOTFS_FEATURES, add '-alpha' to ROOTFS_FEATURES. +# +# To support implied list items, create a mapping of items to be appended to +# the variable when a specific item is present. For example, to append 'beta' +# to ROOTFS_FEATURES when 'alpha' is present, configure ROOTFS_FEATURES as such, +# then set IMPLIED_ROOTFS_FEATURES[alpha] = "beta". +# +# Boilerplate example: +# +# # Either this: +# LIST_VARIABLES += "ROOTFS_FEATURES" +# +# # Or this: +# ROOTFS_FEATURES:remove = "${@remove_prefixed_items('ROOTFS_FEATURES', d)}" +# ROOTFS_FEATURES:prepend = "${@add_implied_items('ROOTFS_FEATURES', 'IMPLIED_ROOTFS_FEATURES', d)} " +# +# Usage example: +# +# # ROOTFS_FEATURES will be "beta alpha" if the following configuration is used: +# IMPLIED_ROOTFS_FEATURES[alpha] = "beta" +# ROOTFS_FEATURES += "alpha" +# +# # ROOTFS_FEATURES will be "first" if the following configuration is used: +# ROOTFS_FEATURES = "first second" +# ROOTFS_FEATURES += "-second" + +python enable_list_variables() { + """Enable list variable functionality.""" + for variable in d.getVar("LIST_VARIABLES").split(): + d.setVar(variable + ':remove', ' ${@remove_prefixed_items("%s", d)}' % variable) + d.setVar(variable + ':prepend', '${@add_implied_items("%s", "IMPLIED_%s", d)} ' % (variable, variable)) +} +enable_list_variables[eventmask] = "bb.event.ConfigParsed" +addhandler enable_list_variables + +def remove_prefixed_items(var, d): + """Return the items to be removed from var with :remove. + + This function is intended to be used in a :remove handler to remove + items from a variable. It will interpret items prefixed with a '-' + or '~' as items to be removed. + """ + # Use a flag to avoid infinite recursion. + if d.getVarFlag(var, 'remove_prefixed_items_internal') == '1': + return '' + + from collections import Counter + + d.setVarFlag(var, 'remove_prefixed_items_internal', '1') + try: + value = d.getVar(var) + counter = Counter() + for v in value.split(): + if v.startswith('-') or v.startswith('~'): + counter[v[1:]] -= 1 + counter[v] -= 1 + else: + counter[v] += 1 + return ' '.join(v for v, c in counter.items() if c < 1) + finally: + d.delVarFlag(var, 'remove_prefixed_items_internal') + + +def add_implied_items(var, implied_var, d): + """Return the items to be appended due to the presence of other items in var. + + This function is intended to be used in a :append handler to append + items from a variable. It will rely on the supplied mapping of implied items + to append the corresponding items. + """ + # Use a flag to avoid infinite recursion. + if d.getVarFlag(var, 'add_implied_items_internal') == '1': + return '' + + def implied_items(item, implied_mapping, d, seen=None): + """Return the implied items for a given item.""" + if seen is None: + seen = set() + if item in seen: + return '' + seen.add(item) + implied = implied_mapping.get(item, '').split() + return ' '.join(implied + [implied_items(f, implied_mapping, d, seen) for f in implied]) + + d.setVarFlag(var, 'add_implied_items_internal', '1') + try: + value = d.getVar(var) + implied_mapping = d.getVarFlags(implied_var) + if implied_mapping is None: + return '' + + return ' '.join(implied_items(f, implied_mapping, d) for f in value.split()) + finally: + d.delVarFlag(var, 'add_implied_items_internal') -- 2.47.1 -- You received this message because you are subscribed to the Google Groups "isar-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/isar-users/20250213214200.296-1-chris.larson%40siemens.com.