diff mbox series

utils/checkpackagelib: CommentsMenusPackagesOrder: fix 'menuconfig' handling

Message ID 20190714124400.29431-1-arnout@mind.be
State Changes Requested
Headers show
Series utils/checkpackagelib: CommentsMenusPackagesOrder: fix 'menuconfig' handling | expand

Commit Message

Arnout Vandecappelle July 14, 2019, 12:44 p.m. UTC
The CommentsMenusPackagesOrder check builds the 'state' to track the
depth of menus and conditions. However, a menuconfig doesn't create a
menu by itself - it is always followed by a condition that implies the
menu. As a result, when unwinding the 'state', the level will be wrong.

Fix this by checking for menu followed by a space, so it no longer
matches menuconfig.

Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/251214899

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Cc: Jerzy Grzegorek <jerzy.m.grzegorek@gmail.com>
---
 utils/checkpackagelib/lib_config.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Yann E. MORIN July 14, 2019, 1:15 p.m. UTC | #1
Arnout, All,

On 2019-07-14 14:44 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:
> The CommentsMenusPackagesOrder check builds the 'state' to track the
> depth of menus and conditions. However, a menuconfig doesn't create a
> menu by itself - it is always followed by a condition that implies the
> menu. As a result, when unwinding the 'state', the level will be wrong.
> 
> Fix this by checking for menu followed by a space, so it no longer
> matches menuconfig.
> 
> Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/251214899

No, it does not fix it totally. It only fixes the python traceback.

The Kodi issues is till present.

Hint: the Kodi package is the only one that indents the "source" lines
with a TAB.

Regards,
Yann E. MORIN.

> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
> Cc: Jerzy Grzegorek <jerzy.m.grzegorek@gmail.com>
> ---
>  utils/checkpackagelib/lib_config.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/utils/checkpackagelib/lib_config.py b/utils/checkpackagelib/lib_config.py
> index f0edb9993d..94faf1b0fc 100644
> --- a/utils/checkpackagelib/lib_config.py
> +++ b/utils/checkpackagelib/lib_config.py
> @@ -73,7 +73,7 @@ class CommentsMenusPackagesOrder(_CheckFunction):
>  
>      def check_line(self, lineno, text):
>          if text.startswith("comment") or text.startswith("if") or \
> -           text.startswith("menu"):
> +           text.startswith("menu "):
>  
>              if text.startswith("comment"):
>                  if not self.state.endswith("-comment"):
> -- 
> 2.21.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Yann E. MORIN July 14, 2019, 1:23 p.m. UTC | #2
Arnout, Jerzy, All,

(sorry, I sent the previous one too quickly)

On 2019-07-14 15:15 +0200, Yann E. MORIN spake thusly:
> On 2019-07-14 14:44 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:
[--SNIP--]
> > Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/251214899
> No, it does not fix it totally. It only fixes the python traceback.
> The Kodi issues is till present.
> Hint: the Kodi package is the only one that indents the "source" lines
> with a TAB.

If one changes Kodi to not indent the source lines, then the issue
disappears. Of course, this is not the correct solution, but...

If one changes another package to also idnent the source lines with a
TAB, then the error happens there too (for example, fftw):

    package/fftw/Config.in:18: Packages in: if BR2_PACKAGE_FFTW,
                               are not alphabetically ordered;
                               correct order: '-', '_', digits, capitals, lowercase;
                               first incorrect package: ftw/fftw-d

OK, so, weird. The package included is in fact fftw/fftw-double and only
part of the bname is reported.

But if one also looks more closely at the Kodi issue, packages names are
also incorrectly reported:

    package/kodi/Config.in:303: Packages in: menu "Audio decoder addons",
    [--SNIP--]
                                first incorrect package: kodi-audiodecoder

And in fact, there is one thing I don;t understand in utils/checkpackagelib/lib_config.py,
line 106:

    new_package = text[17: -(len(self.filename)-5):]

Why are we using the current filename to strip away parts of the new
package filename?

Hope that helps.

Regards,
Yann E. MORIN.
Arnout Vandecappelle July 14, 2019, 6:50 p.m. UTC | #3
On 14/07/2019 15:23, Yann E. MORIN wrote:
> Arnout, Jerzy, All,
> 
> (sorry, I sent the previous one too quickly)
> 
> On 2019-07-14 15:15 +0200, Yann E. MORIN spake thusly:
>> On 2019-07-14 14:44 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:
> [--SNIP--]
>>> Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/251214899
>> No, it does not fix it totally. It only fixes the python traceback.
>> The Kodi issues is till present.
>> Hint: the Kodi package is the only one that indents the "source" lines
>> with a TAB.
> 
> If one changes Kodi to not indent the source lines, then the issue
> disappears. Of course, this is not the correct solution, but...

 Yes, because the test only looks at source lines which are indented, which is
wrong too. It should be a regex.

> 
> If one changes another package to also idnent the source lines with a
> TAB, then the error happens there too (for example, fftw):
> 
>     package/fftw/Config.in:18: Packages in: if BR2_PACKAGE_FFTW,
>                                are not alphabetically ordered;
>                                correct order: '-', '_', digits, capitals, lowercase;
>                                first incorrect package: ftw/fftw-d
> 
> OK, so, weird. The package included is in fact fftw/fftw-double and only
> part of the bname is reported.
> 
> But if one also looks more closely at the Kodi issue, packages names are
> also incorrectly reported:
> 
>     package/kodi/Config.in:303: Packages in: menu "Audio decoder addons",
>     [--SNIP--]
>                                 first incorrect package: kodi-audiodecoder
> 
> And in fact, there is one thing I don;t understand in utils/checkpackagelib/lib_config.py,
> line 106:
> 
>     new_package = text[17: -(len(self.filename)-5):]
> 
> Why are we using the current filename to strip away parts of the new
> package filename?

 That is indeed the problem. I didn't look too hard at that line (because I
already looked to much at all the rest :-). The len(self.filename)-5 works for
package/Config.in because that exactly strips off the /Config.in part of the
line. But that's a horrible hack, of course...

 I'll look at correcting it shortly.

 Regards,
 Arnout
Arnout Vandecappelle July 14, 2019, 8:24 p.m. UTC | #4
On 14/07/2019 20:50, Arnout Vandecappelle wrote:
> 
> 
> On 14/07/2019 15:23, Yann E. MORIN wrote:
>> Arnout, Jerzy, All,
>>
>> (sorry, I sent the previous one too quickly)
>>
>> On 2019-07-14 15:15 +0200, Yann E. MORIN spake thusly:
>>> On 2019-07-14 14:44 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:
>> [--SNIP--]
>>>> Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/251214899
>>> No, it does not fix it totally. It only fixes the python traceback.
>>> The Kodi issues is till present.
>>> Hint: the Kodi package is the only one that indents the "source" lines
>>> with a TAB.
>>
>> If one changes Kodi to not indent the source lines, then the issue
>> disappears. Of course, this is not the correct solution, but...
> 
>  Yes, because the test only looks at source lines which are indented, which is
> wrong too. It should be a regex.

 So, I changed this into a regex...

> 
>>
>> If one changes another package to also idnent the source lines with a
>> TAB, then the error happens there too (for example, fftw):
>>
>>     package/fftw/Config.in:18: Packages in: if BR2_PACKAGE_FFTW,
>>                                are not alphabetically ordered;
>>                                correct order: '-', '_', digits, capitals, lowercase;
>>                                first incorrect package: ftw/fftw-d
>>
>> OK, so, weird. The package included is in fact fftw/fftw-double and only
>> part of the bname is reported.
>>
>> But if one also looks more closely at the Kodi issue, packages names are
>> also incorrectly reported:
>>
>>     package/kodi/Config.in:303: Packages in: menu "Audio decoder addons",
>>     [--SNIP--]
>>                                 first incorrect package: kodi-audiodecoder
>>
>> And in fact, there is one thing I don;t understand in utils/checkpackagelib/lib_config.py,
>> line 106:
>>
>>     new_package = text[17: -(len(self.filename)-5):]
>>
>> Why are we using the current filename to strip away parts of the new
>> package filename?
> 
>  That is indeed the problem. I didn't look too hard at that line (because I
> already looked to much at all the rest :-). The len(self.filename)-5 works for
> package/Config.in because that exactly strips off the /Config.in part of the
> line. But that's a horrible hack, of course...

 ... and used the same regex to get the package name.

 It now seems to work correctly. However, it turns up 10 "errors":

boot/Config.in:7: Packages in: menu "Bootloaders",
                  are not alphabetically ordered;
                  correct order: '-', '_', digits, capitals, lowercase;
                  first incorrect package: arm-trusted-firmware
package/fftw/Config.in:18: Packages in: if BR2_PACKAGE_FFTW,
                           are not alphabetically ordered;
                           correct order: '-', '_', digits, capitals, lowercase;
                           first incorrect package: fftw-double
package/gstreamer/Config.in:7: Packages in: if BR2_PACKAGE_GSTREAMER,
                               are not alphabetically ordered;
                               correct order: '-', '_', digits, capitals, lowercase;
                               first incorrect package: gst-plugins-bad
package/gstreamer1/Config.in:6: Packages in: if BR2_PACKAGE_GSTREAMER1,
                                are not alphabetically ordered;
                                correct order: '-', '_', digits, capitals,
lowercase;
                                first incorrect package: gst1-plugins-base
package/opengl/Config.in:2: Packages in: ,
                            are not alphabetically ordered;
                            correct order: '-', '_', digits, capitals, lowercase;
                            first incorrect package: libegl
package/qt5/Config.in:84: Packages in: comment "Latest Qt version needs
host/toolchain w/ gcc >= 4.8",
                          are not alphabetically ordered;
                          correct order: '-', '_', digits, capitals, lowercase;
                          first incorrect package: qt5webengine
package/freescale-imx/Config.in:96: Packages in: if BR2_PACKAGE_FREESCALE_IMX,
                                    are not alphabetically ordered;
                                    correct order: '-', '_', digits, capitals,
lowercase;
                                    first incorrect package: firmware-imx
toolchain/toolchain-buildroot/Config.in:109: Packages in: comment "glibc on MIPS
w/ NAN2008 needs a toolchain w/ headers >= 4.5",
                                             are not alphabetically ordered;
                                             correct order: '-', '_', digits,
capitals, lowercase;
                                             first incorrect package: glibc
toolchain/toolchain-external/Config.in:17: Packages in: comment "glibc
toolchains only available with shared lib support",
                                           are not alphabetically ordered;
                                           correct order: '-', '_', digits,
capitals, lowercase;
                                           first incorrect package:
toolchain-external-codesourcery-aarch64
toolchain/Config.in:70: Packages in: menu "Toolchain",
                        are not alphabetically ordered;
                        correct order: '-', '_', digits, capitals, lowercase;
                        first incorrect package: gdb


 I haven't looked at the details yet, but I think most of them are bogus. So,
maybe we should just do it for package/Config.in and package/Config.in.host.
However, some of them *are* relevant: external toolchains, bootloaders, maybe
qt5... Note however that for those the "comment" handling is not correct (in
package/Config.in, comments are generally used to indicate submenus, but in
other Config.in files this is not the case).

 Ideas?

 Regards,
 Arnout
Yann E. MORIN July 14, 2019, 8:47 p.m. UTC | #5
Arnout, All,

On 2019-07-14 22:24 +0200, Arnout Vandecappelle spake thusly:
> On 14/07/2019 20:50, Arnout Vandecappelle wrote:
> >> On 2019-07-14 15:15 +0200, Yann E. MORIN spake thusly:
[--SNIP--]
> >> And in fact, there is one thing I don;t understand in utils/checkpackagelib/lib_config.py,
> >> line 106:
> >>     new_package = text[17: -(len(self.filename)-5):]
> >> Why are we using the current filename to strip away parts of the new
> >> package filename?
> >  That is indeed the problem. I didn't look too hard at that line (because I
> > already looked to much at all the rest :-). The len(self.filename)-5 works for
> > package/Config.in because that exactly strips off the /Config.in part of the
> > line. But that's a horrible hack, of course...
>  ... and used the same regex to get the package name.
> 
>  It now seems to work correctly. However, it turns up 10 "errors":
> 
> boot/Config.in:7: Packages in: menu "Bootloaders",
>                   are not alphabetically ordered;
>                   correct order: '-', '_', digits, capitals, lowercase;
>                   first incorrect package: arm-trusted-firmware

Good catch.

> package/fftw/Config.in:18: Packages in: if BR2_PACKAGE_FFTW,
>                            are not alphabetically ordered;
>                            correct order: '-', '_', digits, capitals, lowercase;
>                            first incorrect package: fftw-double

Unfortunately, this is where we readh the limitation: we do want the
list to be ordered not by name, but by the precision. And indeed, the
current ordering makes more sense for fftw than an alphabetical one
would.

> package/gstreamer/Config.in:7: Packages in: if BR2_PACKAGE_GSTREAMER,
>                                are not alphabetically ordered;
>                                correct order: '-', '_', digits, capitals, lowercase;
>                                first incorrect package: gst-plugins-bad

Ditto, the current ordering is correct.

> package/gstreamer1/Config.in:6: Packages in: if BR2_PACKAGE_GSTREAMER1,
>                                 are not alphabetically ordered;
>                                 correct order: '-', '_', digits, capitals,
> lowercase;
>                                 first incorrect package: gst1-plugins-base

Ditto.

> package/opengl/Config.in:2: Packages in: ,
>                             are not alphabetically ordered;
>                             correct order: '-', '_', digits, capitals, lowercase;
>                             first incorrect package: libegl

This is more questionable, because the current ordering make sense, but
the packages are all vrtual and have no prompt. So it would not be too
bad for users, only hackers.

> package/qt5/Config.in:84: Packages in: comment "Latest Qt version needs
> host/toolchain w/ gcc >= 4.8",
>                           are not alphabetically ordered;
>                           correct order: '-', '_', digits, capitals, lowercase;
>                           first incorrect package: qt5webengine

Here I am not so sure. I'd like to ensure that the "core" packages come
first, and that we were not forced to choose the alphabetical order. But
it so happens that their names naturally fits the bill (more or less).

As for the web monsters, yes, they should be alphabetically sorted.

> package/freescale-imx/Config.in:96: Packages in: if BR2_PACKAGE_FREESCALE_IMX,
>                                     are not alphabetically ordered;
>                                     correct order: '-', '_', digits, capitals,
> lowercase;
>                                     first incorrect package: firmware-imx

Here, even if we were to move imx-sc-firmware (the one really not
ordered), we'd still have to put it after more "low-level" packages. And
there are also imx-gpu-g2d and imx-gpu-viv that may cause false
positives.

> toolchain/toolchain-buildroot/Config.in:109: Packages in: comment "glibc on MIPS
> w/ NAN2008 needs a toolchain w/ headers >= 4.5",
>                                              are not alphabetically ordered;
>                                              correct order: '-', '_', digits,
> capitals, lowercase;
>                                              first incorrect package: glibc
> toolchain/toolchain-external/Config.in:17: Packages in: comment "glibc
> toolchains only available with shared lib support",
>                                            are not alphabetically ordered;
>                                            correct order: '-', '_', digits,
> capitals, lowercase;
>                                            first incorrect package:
> toolchain-external-codesourcery-aarch64
> toolchain/Config.in:70: Packages in: menu "Toolchain",
>                         are not alphabetically ordered;
>                         correct order: '-', '_', digits, capitals, lowercase;
>                         first incorrect package: gdb

Toolchain is always a little bit special, isn't it? :-)

>  I haven't looked at the details yet, but I think most of them are bogus.

There are two that are correct (ATF, and qt5webengin). The others we
want to ignore.

> So,
> maybe we should just do it for package/Config.in and package/Config.in.host.
> However, some of them *are* relevant: external toolchains, bootloaders, maybe
> qt5... Note however that for those the "comment" handling is not correct (in
> package/Config.in, comments are generally used to indicate submenus, but in
> other Config.in files this is not the case).
> 
>  Ideas?

I like the flake8 notation:
    # noqa: NO_ORDER

Regards,
Yann E. MORIN.

>  Regards,
>  Arnout
diff mbox series

Patch

diff --git a/utils/checkpackagelib/lib_config.py b/utils/checkpackagelib/lib_config.py
index f0edb9993d..94faf1b0fc 100644
--- a/utils/checkpackagelib/lib_config.py
+++ b/utils/checkpackagelib/lib_config.py
@@ -73,7 +73,7 @@  class CommentsMenusPackagesOrder(_CheckFunction):
 
     def check_line(self, lineno, text):
         if text.startswith("comment") or text.startswith("if") or \
-           text.startswith("menu"):
+           text.startswith("menu "):
 
             if text.startswith("comment"):
                 if not self.state.endswith("-comment"):