X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/7e8f0bc28dcf77eb881b9455332da32027f2b228..b546bd19deab1d2f92880ea67908a9d7abb5c3ed:/scripts/metadata.pl?ds=sidebyside diff --git a/scripts/metadata.pl b/scripts/metadata.pl index e05cc92c4..dc6eada12 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -237,6 +237,7 @@ EOF sub gen_target_config() { my @target = parse_target_metadata(); + my %defaults; my @target_sort = sort { target_name($a) cmp target_name($b); @@ -290,6 +291,7 @@ EOF my @pkglist = merge_package_lists($target->{packages}, $profile->{packages}); foreach my $pkg (@pkglist) { print "\tselect DEFAULT_$pkg\n"; + $defaults{$pkg} = 1; } print "\n"; } @@ -319,6 +321,10 @@ config LINUX_$v bool EOF } + foreach my $def (sort keys %defaults) { + print "\tconfig DEFAULT_".$def."\n"; + print "\t\tbool\n\n"; + } } my %dep_check; @@ -367,7 +373,10 @@ sub mconf_depends($$) { my $only_dep = shift; my $res; my $dep = shift; + my $seen = shift; + my $condition = shift; $dep or $dep = {}; + $seen or $seen = {}; $depends or return; my @depends = @$depends; @@ -375,13 +384,14 @@ sub mconf_depends($$) { my $m = "depends"; $depend =~ s/^([@\+]+)//; my $flags = $1; - my $condition; my $vdep; if ($depend =~ /^(.+):(.+)$/) { - $condition = $1; + $condition and $condition = "$condition && $1" or $condition = $1; $depend = $2; } + next if $seen->{$depend}; + $seen->{$depend} = 1; if ($vdep = $package{$depend}->{vdepends}) { $depend = join("||", map { "PACKAGE_".$_ } @$vdep); } else { @@ -390,13 +400,13 @@ sub mconf_depends($$) { # 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); + $package{$depend} and mconf_depends($package{$depend}->{depends}, 1, $dep, $seen, $condition); $m = "select"; next if $only_dep; }; $flags =~ /@/ or $depend = "PACKAGE_$depend"; - $condition and $depend = "$depend if $condition"; + $condition and ($m =~ /select/ and $depend = "$depend if $condition" or $depend = "!($condition) || $depend"); } $dep->{$depend} =~ /select/ or $dep->{$depend} = $m; } @@ -427,8 +437,6 @@ sub print_package_config_category($) { } $menus{$menu} or $menus{$menu} = []; push @{$menus{$menu}}, $pkg; - print "\tconfig DEFAULT_".$pkg->{name}."\n"; - print "\t\tbool\n\n"; } } my @menus = sort { @@ -580,7 +588,11 @@ sub gen_package_mk() { $dep{$pkg->{src}."->".$idx} = 1; } if ($condition) { - $depline .= " \$(if \$(CONFIG_$condition),$depstr)"; + if ($condition =~ /^!(.+)/) { + $depline .= " \$(if \$(CONFIG_$1),,$depstr)"; + } else { + $depline .= " \$(if \$(CONFIG_$condition),$depstr)"; + } } else { $depline .= " $depstr"; } @@ -629,7 +641,7 @@ sub parse_command() { print <