When emitting .packagedeps, build separate srcpkg/variants lists for build
variants in <*> and <m> states - this is needed to restrict opkg package
installation to only <*> variants in a later change.

Right now the package install code considers the entire variants list
which will include both <*> and <m> selected packages, ultimatively leading
to file clashes upon opkg install when multiple conflicting candidates are
passed to the opkg command line.

This issue happens for example if package "ip" is set to <m> and package
"ip-full" to <*> -  the install command will eventually fail with:

     * check_conflicts_for: The following packages conflict with ip:
     * check_conflicts_for:     ip-full *
     * opkg_install_cmd: Cannot install package ip.

For backwards compatibility with subdir.mk continue to emit */variants
lists as unions of the previous */variants-y and */variants-m lists.

Signed-off-by: Jo-Philipp Wich <j...@mein.io>
---
 scripts/package-metadata.pl | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl
index 0e42414..9b6dced 100755
--- a/scripts/package-metadata.pl
+++ b/scripts/package-metadata.pl
@@ -401,6 +401,7 @@ sub gen_package_mk() {
        my %dep;
        my %done;
        my $line;
+       my @variants;
 
        parse_package_metadata($ARGV[0]) or exit 1;
        foreach my $name (sort {uc($a) cmp uc($b)} keys %package) {
@@ -418,7 +419,8 @@ sub gen_package_mk() {
                                if (!defined($done{$pkg->{src}}) or 
$pkg->{variant_default}) {
                                        print 
"\$(curdir)/$pkg->{subdir}$pkg->{src}/default-variant := $pkg->{variant}\n";
                                }
-                               print 
"\$(curdir)/$pkg->{subdir}$pkg->{src}/variants += \$(if 
$config,$pkg->{variant})\n"
+                               print 
"\$(curdir)/$pkg->{subdir}$pkg->{src}/variants-$config += $pkg->{variant}\n";
+                               push @variants, "$pkg->{subdir}$pkg->{src}";
                        }
                        $pkg->{prereq} and print "prereq-$config += 
$pkg->{subdir}$pkg->{src}\n";
                }
@@ -540,6 +542,10 @@ sub gen_package_mk() {
                }
        }
 
+       foreach my $srcpkg (@variants) {
+               print "\$(curdir)/$srcpkg/variants := 
\$(\$(curdir)/$srcpkg/variants-y) \$(\$(curdir)/$srcpkg/variants-m)\n";
+       }
+
        if ($line ne "") {
                print "\n$line";
        }
-- 
2.1.4


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to