Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Angelo Compagnucci <angelo.compagnucci@gmail.com>
To: buildroot@buildroot.org
Cc: "Joseph Kogut" <joseph.kogut@gmail.com>,
	"Marcus Folkesson" <marcus.folkesson@gmail.com>,
	"Leo Yu-Chi Liang" <ycliang@andestech.com>,
	"Romain Naour" <romain.naour@gmail.com>,
	"Antoine Tenart" <atenart@kernel.org>,
	"José Luis Salvador Rufo" <salvador.joseluis@gmail.com>,
	"Ricardo Martincoski" <ricardo.martincoski@datacom.com.br>,
	"Fabrice Fontaine" <fontaine.fabrice@gmail.com>,
	"Maxim Kochetkov" <fido_max@inbox.ru>,
	"Francois Perrad" <francois.perrad.86@gmail.com>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	"James Knight" <james.d.knight@live.com>,
	"Giulio Benetti" <giulio.benetti@benettiengineering.com>,
	"Bernd Kuhls" <bernd@kuhls.net>,
	"Ricardo Martincoski" <ricardo.martincoski@gmail.com>
Subject: [Buildroot] [PATCH v4 02/15] utils/check-package: support inline flags
Date: Sat,  7 Nov 2026 17:34:01 +0100	[thread overview]
Message-ID: <20261107163414.560896-3-angelo.compagnucci@gmail.com> (raw)
In-Reply-To: <20261107163414.560896-1-angelo.compagnucci@gmail.com>

From: Ricardo Martincoski <ricardo.martincoski@gmail.com>

Currently source files analysed by check-package can use a special
comment to hint the script to completely ignore a CheckFunction for the
next line of the source file:

    # check-package Indent

Extend that functionality to also support flags that will trigger
special behaviour.
For instance, by adding the line to a Config.in file:

    # check-package Indent_ignore-menu-indent-below

makes the CheckFunction named Indent to set a flag named
ignore-menu-indent-below and use it until the end of the source file
under test.

One example of use for this new special comment is Indent() from
lib_config.py, that currently keeps a list of 4 intree Config.in files
that have a special but legitimate indentation rule.
Instead of keeping the list inside the code, now a special comment can
be used in each of these 4 Config.in files.

A great side effect of this new type of special comment is that it can
also be used in source files from br2-external trees.

Concept reused from James Knight's work in [1] and [2].
[1] http://patchwork.ozlabs.org/project/buildroot/patch/SN4P221MB0682AE13FB1ACA5A755024F1A0689@SN4P221MB0682.NAMP221.PROD.OUTLOOK.COM/
[2] http://patchwork.ozlabs.org/project/buildroot/patch/SN4P221MB06823B0F7326D27ECD5E0FAEA0689@SN4P221MB0682.NAMP221.PROD.OUTLOOK.COM/

Cc: James Knight <james.d.knight@live.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Ricardo Martincoski <ricardo.martincoski@gmail.com>
---
Changes v3 -> v4:
  - none (rebased on current master).

 utils/checkpackagelib/base.py      | 20 ++++++--
 utils/checkpackagelib/test_base.py | 82 ++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+), 3 deletions(-)

diff --git a/utils/checkpackagelib/base.py b/utils/checkpackagelib/base.py
index 4636eca3a6..a3aff9e3d8 100644
--- a/utils/checkpackagelib/base.py
+++ b/utils/checkpackagelib/base.py
@@ -4,14 +4,28 @@ import os
 
 
 class _CheckFunction(object):
+    flags = []
+
     def __init__(self, filename, url_to_manual):
         self.filename = filename
         self.url_to_manual = url_to_manual
-        self.disable = re.compile(r"^\s*# check-package .*\b{}\b".format(self.__class__.__name__))
+        if self.flags:
+            flags_pattern = '|_' + '|_'.join(self.flags)
+        else:
+            flags_pattern = ''
+        self.disable = re.compile(r"^\s*# check-package .*\b{}({})\b".format(self.__class__.__name__, flags_pattern))
+        self.enabled_flags = {f: False for f in self.flags}
 
     def check_disabled(self, line_before):
-        if self.disable.search(line_before):
-            return True
+        found = self.disable.findall(line_before)
+        if found:
+            # catch flags to be used by CheckFunction for a source file, for all lines below
+            flags_found = [f[1:] for f in found if (f != '' and f[0] == '_')]
+            for f in flags_found:
+                self.enabled_flags[f] = True
+
+            ignore_this_line = '' in found
+            return ignore_this_line
         return False
 
     def before(self):
diff --git a/utils/checkpackagelib/test_base.py b/utils/checkpackagelib/test_base.py
index ef266d542c..bbe9285466 100644
--- a/utils/checkpackagelib/test_base.py
+++ b/utils/checkpackagelib/test_base.py
@@ -47,3 +47,85 @@ def test_IgnoreNextLine(testname, filename, string, expected):
 
     warnings = util.check_file(CheckFunctionUnderTest, filename, string)
     assert warnings == expected
+
+
+SpecialCheckForThisFile = [
+    ('without special comment',
+     'any',
+     'content to test\n'
+     '# commented content to test\n'
+     'content to test\n'
+     'content to test\n'
+     'content to test\n',
+     [1, 2, 3, 4, 5]),  # set of line numbers for all lines not ignored while testing
+    ('ignore next line (CheckFunction with flags)',
+     'any',
+     'content to test\n'
+     '# check-package CheckFunctionUnderTest\n'
+     'content to ignore\n'
+     'content to test\n'
+     'content to test\n',
+     [1, 2, 4, 5]),
+    ('comment to ignore one CheckFunction does not affect another one (CheckFunction with flags)',
+     'any',
+     'content to test\n'
+     '# check-package AnotherCheckFunction\n'
+     'content to test\n'
+     'content to test\n'
+     'content to test\n',
+     [1, 2, 3, 4, 5]),
+    ('ignore 2 CheckFunctions for next line (CheckFunction with flags)',
+     'any',
+     '# check-package CheckFunctionUnderTest, AnotherCheckFunction\n'
+     'content to ignore\n'
+     '# check-package AnotherCheckFunction, CheckFunctionUnderTest\n'
+     'content to ignore\n'
+     'content to test\n',
+     [1, 3, 5]),
+    ('one flag',
+     'any',
+     'content to test using default code\n'
+     '# check-package CheckFunctionUnderTest_flag-2\n'
+     'content to test using flag-2\n'
+     'content to test using flag-2\n',
+     [1, 2, [3, [-2]], [4, [-2]]]),
+    ('flag and ignore next line in the same file',
+     'any',
+     'content to test using default code\n'
+     '# check-package CheckFunctionUnderTest\n'
+     'content to ignore\n'
+     '# check-package CheckFunctionUnderTest_flag-2\n'
+     'content to test using flag-2\n'
+     '# check-package CheckFunctionUnderTest\n'
+     'content to ignore\n'
+     'content to test using flag-2\n',
+     [1, 2, 4, [5, [-2]], [6, [-2]], [8, [-2]]]),
+    ('2 flags',
+     'any',
+     'content to test using default code\n'
+     '# check-package CheckFunctionUnderTest_flag-2\n'
+     'content to test using flag-2\n'
+     '# check-package CheckFunctionUnderTest_flag-1\n'
+     'content to test using flag-1 and flag-2\n'
+     'content to test using flag-1 and flag-2\n',
+     [1, 2, [3, [-2]], [4, [-2]], [5, [-1, -2]], [6, [-1, -2]]]),
+    ]
+
+
+@pytest.mark.parametrize('testname,filename,string,expected', SpecialCheckForThisFile)
+def test_SpecialCheckForThisFile(testname, filename, string, expected):
+    class CheckFunctionUnderTest(m._CheckFunction):
+        flags = ['flag-1', 'flag-2']
+
+        def check_line(self, lineno, text):
+            flags = []
+            if self.enabled_flags['flag-1']:
+                flags.append(-1)
+            if self.enabled_flags['flag-2']:
+                flags.append(-2)
+            if flags:
+                return [lineno, flags]
+            return lineno
+
+    warnings = util.check_file(CheckFunctionUnderTest, filename, string)
+    assert warnings == expected
-- 
2.53.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  parent reply	other threads:[~2026-11-07 16:34 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-03 16:35 [Buildroot] [next v3 0/3] check-package: support inline flags v3 Ricardo Martincoski
2023-09-03 16:35 ` [Buildroot] [next v3 1/3] utils/check-package: factor-out check_disabled() Ricardo Martincoski
2023-09-03 16:35 ` [Buildroot] [next v3 2/3] utils/check-package: support inline flags Ricardo Martincoski
2023-09-03 16:35 ` [Buildroot] [next v3 3/3] utils/check-package: remove hard-coded list from lib_config:Indent Ricardo Martincoski
2026-11-07 16:33 ` [Buildroot] [PATCH v4 00/15] check-package: warn about symbols not recognized by a package infra, support inline flags Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 01/15] utils/check-package: factor-out check_disabled() Angelo Compagnucci
2026-11-07 16:34   ` Angelo Compagnucci [this message]
2026-11-07 16:34   ` [Buildroot] [PATCH v4 03/15] utils/check-package: remove hard-coded list from lib_config:Indent Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 04/15] package/andes-spi-burn: fix the license files variable Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 05/15] package/fbv: drop the unused configure options Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 06/15] package/usbip: fix the configure options variable Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 07/15] package/postgresql: drop the unused install-world options Angelo Compagnucci
2026-11-09  7:13     ` Maxim Kochetkov via buildroot
2026-11-07 16:34   ` [Buildroot] [PATCH v4 08/15] package/libselinux: drop the unused make environment Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 09/15] package/zfs: drop the unused module subdirectories Angelo Compagnucci
2026-11-10 12:52     ` José Luis Salvador Rufo
2026-11-07 16:34   ` [Buildroot] [PATCH v4 10/15] package/mesa3d: drop the unused host Vulkan drivers Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 11/15] package/nxp-mwifiex: drop the unused make options Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 12/15] package/libglib2/libglib2-bootstrap: drop unused variables Angelo Compagnucci
2026-11-11 22:46     ` Fiona Klute via buildroot
2026-11-07 16:34   ` [Buildroot] [PATCH v4 13/15] package/linux-pam: fix linking with the NLS and atomic libraries Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 14/15] utils/check-package: warn about symbols not recognized by a package infra Angelo Compagnucci
2026-11-07 16:34   ` [Buildroot] [PATCH v4 15/15] utils/check-package: warn about disabled install Angelo Compagnucci

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261107163414.560896-3-angelo.compagnucci@gmail.com \
    --to=angelo.compagnucci@gmail.com \
    --cc=atenart@kernel.org \
    --cc=bernd@kuhls.net \
    --cc=buildroot@buildroot.org \
    --cc=fido_max@inbox.ru \
    --cc=fontaine.fabrice@gmail.com \
    --cc=francois.perrad.86@gmail.com \
    --cc=giulio.benetti@benettiengineering.com \
    --cc=james.d.knight@live.com \
    --cc=joseph.kogut@gmail.com \
    --cc=marcus.folkesson@gmail.com \
    --cc=ricardo.martincoski@datacom.com.br \
    --cc=ricardo.martincoski@gmail.com \
    --cc=romain.naour@gmail.com \
    --cc=salvador.joseluis@gmail.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=ycliang@andestech.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox