X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/59f2b191722f54423808e1baf70ebc22d26abff0..7102aaa3a3dffb3fc767f4d1552395b6cddb5000:/scripts/metadata.pl diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 50d636a67..ce8092497 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -380,14 +380,14 @@ sub mconf_depends($$) { $depend = join("||", map { "PACKAGE_".$_ } @$vdep); } else { $flags =~ /\+/ and do { - next if $only_dep; - $m = "select"; - # Menuconfig will not treat 'select FOO' as a real dependency # thus if FOO depends on other config options, these dependencies # will not be checked. To fix this, we simply emit all of FOO's # depends here as well. $package{$depend} and mconf_depends($package{$depend}->{depends}, 1, $dep); + + $m = "select"; + next if $only_dep; }; $flags =~ /@/ or $depend = "PACKAGE_$depend"; } @@ -472,7 +472,7 @@ sub print_package_config_category($) { sub gen_package_config() { parse_package_metadata($ARGV[0]) or exit 1; - print "menuconfig UCI_PRECONFIG\n\tbool \"Image configuration\"\n"; + print "menuconfig UCI_PRECONFIG\n\tbool \"Image configuration\"\n" if %preconfig; foreach my $preconfig (keys %preconfig) { foreach my $cfg (keys %{$preconfig{$preconfig}}) { my $conf = $preconfig{$preconfig}->{$cfg}->{id}; @@ -502,10 +502,9 @@ sub gen_package_mk() { foreach my $name (sort {uc($a) cmp uc($b)} keys %package) { my $config; my $pkg = $package{$name}; + my @srcdeps; next if defined $pkg->{vdepends}; - next if $done{$pkg->{src}}; - $done{$pkg->{src}} = 1; if ($ENV{SDK}) { $conf{$pkg->{src}} or do { @@ -520,11 +519,21 @@ sub gen_package_mk() { $pkg->{prereq} and print "prereq-$config += $pkg->{subdir}$pkg->{src}\n"; } + next if $done{$pkg->{src}}; + $done{$pkg->{src}} = 1; + + foreach my $spkg (@{$srcpackage{$pkg->{src}}}) { + foreach my $dep (@{$spkg->{depends}}, @{$spkg->{builddepends}}) { + $dep =~ /@/ or do { + $dep =~ s/\+//g; + push @srcdeps, $dep; + }; + } + } + my $hasdeps = 0; my $depline = ""; - foreach my $deps (@{$pkg->{depends}}, @{$pkg->{builddepends}}) { - next if $deps =~ /@/; - $deps =~ s/\+//; + foreach my $deps (@srcdeps) { my $idx; my $pkg_dep = $package{$deps}; my @deps; @@ -544,10 +553,12 @@ sub gen_package_mk() { } undef $idx if $idx =~ /^(kernel)|(base-files)$/; if ($idx) { - next if $dep{$pkg->{src}."->".$idx}; next if $pkg->{src} eq $pkg_dep->{src}; + next if $dep{$pkg->{src}."->".$idx}; + next if $dep{$pkg->{src}."->($dep)".$idx}; if ($pkg_dep->{vdepends}) { $depline .= " \$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)"; + $dep{$pkg->{src}."->($dep)".$idx} = 1; } else { $depline .= " \$(curdir)/$idx/compile"; $dep{$pkg->{src}."->".$idx} = 1;