metadata: ensure one dependency provider to be y if a package is y metadata-fix-provides-built-in
authorJo-Philipp Wich <jo@mein.io>
Sat, 15 Jun 2019 11:17:04 +0000 (13:17 +0200)
committerJonas Gorski <jonas.gorski@gmail.com>
Sat, 15 Jun 2019 11:27:29 +0000 (13:27 +0200)
When there are multiple packages providing a meta-package, it is
possible to to create a config where a package is selected as =y, but
all of its dependency providers are just selected as =m. This is due to
the selection statement being just

  config PACKAGE_foo
    SELECT PACKAGE_bar if !PACKAGE_baz

which is already fulfilled by PACKAGE_bar=m. Fix this by properly
comparing the selection states:

  config PACKAGE_foo
    SELECT PACKAGE_bar if PACKAGE_baz<PACKAGE_foo

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
[jonas.gorski@gmail.com: remove negation for better readability]
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
scripts/package-metadata.pl

index 76b09a56ebfedbeb3634880ff505a5220c7acd4d..eeb2c83a9b0fc8e896110f2402a23fe93153f822 100755 (executable)
@@ -191,9 +191,9 @@ sub mconf_depends {
                                $depend = shift @vdeps;
 
                                if (@vdeps > 1) {
-                                       $condition = ($condition ? "$condition && " : '') . '!('.join("||", map { "PACKAGE_".$_ } @vdeps).')';
+                                       $condition = ($condition ? "$condition && " : '') . ''.join("&&", map { "PACKAGE_$_<PACKAGE_$pkgname" } @vdeps);
                                } elsif (@vdeps > 0) {
-                                       $condition = ($condition ? "$condition && " : '') . '!PACKAGE_'.$vdeps[0];
+                                       $condition = ($condition ? "$condition && " : '') . "PACKAGE_${vdeps[0]}<PACKAGE_$pkgname";
                                }
                        }