[Buildroot] [PATCH] utils/checkpackagelib/lib_mk.py: fix check for overridden variable

Arnout Vandecappelle arnout at mind.be
Fri Dec 10 19:09:41 UTC 2021



On 16/11/2021 00:53, Ricardo Martincoski wrote:
> 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))
> |<re.Match object; span=(0, 9), match='foobarfoo'>
> |>>> print(p2.search(s1))
> |None
> |>>> print(p3.search(s1))
> |<re.Match object; span=(0, 9), match='foobarfoo'>
> |>>> print(p1.search(s2))
> |None
> |>>> print(p2.search(s2))
> |<re.Match object; span=(0, 8), match='foobar\\1'>
> |>>> print(p3.search(s2))
> |None
> |>>>
> 
> So use '\1' instead of '\\1' in the raw string.
> 
> Signed-off-by: Ricardo Martincoski <ricardo.martincoski at gmail.com>
> Cc: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> Cc: Titouan Christophe <titouan.christophe at railnova.eu>

  Wow, great explanation!

  Applied to master, thanks.

  Regards,
  Arnout


> ---
> Caught this regression using unit tests.
> Before:
> https://gitlab.com/RicardoMartincoski/check-package/-/jobs/1785343039
> After:
> https://gitlab.com/RicardoMartincoski/check-package/-/jobs/1785364353
> ---
>   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)))
> 



More information about the buildroot mailing list