From 56e7d20666934352074ddf5db48acf8627829278 Mon Sep 17 00:00:00 2001 From: Ricardo Martincoski Date: Mon, 15 Nov 2021 20:53:36 -0300 Subject: [PATCH] utils/checkpackagelib/lib_mk.py: fix check for overridden variable Currently this .mk snippet results in unexpected behavior from check-package: |VAR_1 = VALUE1 |ifeq (condition) |VAR_1 := $(VAR_1), VALUE2 |endif Fix commit "163f160a8e utils/{check-package, checkpackagelib}: consistently use raw strings for re.compile" that ended up doing this: - CONCATENATING = re.compile("^([A-Z0-9_]+)\s*(\+|:|)=\s*\$\(\\1\)") + CONCATENATING = re.compile(r"^([A-Z0-9_]+)\s*(\+|:|)=\s*\$\(\\1\)") But raw strings do not expect escaping when referencing \1 and the pattern ends up searching for a raw '\\1' instead of an occurrence of the first pattern inside parenthesis. |$ python3 |Python 3.8.10 (default, Sep 28 2021, 16:10:42) |[GCC 9.3.0] on linux |Type "help", "copyright", "credits" or "license" for more information. |>>> import re |>>> p1 = re.compile('(foo)bar\\1') |>>> p2 = re.compile(r'(foo)bar\\1') |>>> p3 = re.compile(r'(foo)bar\1') |>>> s1 = 'foobarfoo' |>>> s2 = 'foobar\\1' |>>> print(p1.search(s1)) | |>>> print(p2.search(s1)) |None |>>> print(p3.search(s1)) | |>>> print(p1.search(s2)) |None |>>> print(p2.search(s2)) | |>>> print(p3.search(s2)) |None |>>> So use '\1' instead of '\\1' in the raw string. Signed-off-by: Ricardo Martincoski Cc: Thomas Petazzoni Cc: Titouan Christophe Signed-off-by: Arnout Vandecappelle (Essensium/Mind) (cherry picked from commit 5bbedea9c2317bfb04d1efd5fb157e725e86c2fb) Signed-off-by: Peter Korsgaard --- utils/checkpackagelib/lib_mk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/checkpackagelib/lib_mk.py b/utils/checkpackagelib/lib_mk.py index 0278354434..572fe75990 100644 --- a/utils/checkpackagelib/lib_mk.py +++ b/utils/checkpackagelib/lib_mk.py @@ -77,7 +77,7 @@ class Indent(_CheckFunction): class OverriddenVariable(_CheckFunction): - CONCATENATING = re.compile(r"^([A-Z0-9_]+)\s*(\+|:|)=\s*\$\(\\1\)") + CONCATENATING = re.compile(r"^([A-Z0-9_]+)\s*(\+|:|)=\s*\$\(\1\)") END_CONDITIONAL = re.compile(r"^\s*({})".format("|".join(end_conditional))) OVERRIDING_ASSIGNMENTS = [':=', "="] START_CONDITIONAL = re.compile(r"^\s*({})".format("|".join(start_conditional)))