X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/31800c29b03fe4268985b9761b4ccdabfad7a041..06eb974a9e7fdcb467868dc15337e44ccca4262a:/scripts/metadata.pl diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 9c10f9554..fa3055620 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; @@ -362,12 +368,14 @@ sub package_depends($$) { return $ret; } -sub mconf_depends($$) { +sub mconf_depends { + my $pkgname = shift; my $depends = shift; my $only_dep = shift; my $res; my $dep = shift; my $seen = shift; + my $parent_condition = shift; $dep or $dep = {}; $seen or $seen = {}; @@ -377,14 +385,21 @@ sub mconf_depends($$) { my $m = "depends"; $depend =~ s/^([@\+]+)//; my $flags = $1; - my $condition; my $vdep; + my $condition; if ($depend =~ /^(.+):(.+)$/) { - $condition = $1; + if ($1 ne "PACKAGE_$pkgname") { + if ($parent_condition) { + $condition = "$parent_condition && $1"; + } else { + $condition = $1; + } + } $depend = $2; } next if $seen->{$depend}; + next if $package{$depend} and $package{$depend}->{buildonly}; $seen->{$depend} = 1; if ($vdep = $package{$depend}->{vdepends}) { $depend = join("||", map { "PACKAGE_".$_ } @$vdep); @@ -394,13 +409,19 @@ 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, $seen); + $package{$depend} and mconf_depends($pkgname, $package{$depend}->{depends}, 1, $dep, $seen, $condition); $m = "select"; next if $only_dep; }; $flags =~ /@/ or $depend = "PACKAGE_$depend"; - $condition and $depend = "$depend if $condition"; + if ($condition) { + if ($m =~ /select/) { + $depend = "$depend if $condition"; + } else { + $depend = "!($condition) || $depend"; + } + } } $dep->{$depend} =~ /select/ or $dep->{$depend} = $m; } @@ -423,6 +444,7 @@ sub print_package_config_category($) { foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) { foreach my $pkg (@{$spkg{$spkg}}) { + next if $pkg->{buildonly}; my $menu = $pkg->{submenu}; if ($menu) { $menu_dep{$menu} or $menu_dep{$menu} = $pkg->{submenudep}; @@ -431,8 +453,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 { @@ -464,7 +484,7 @@ sub print_package_config_category($) { foreach my $default (split /\s*,\s*/, $pkg->{default}) { print "\t\tdefault $default\n"; } - print mconf_depends($pkg->{depends}, 0); + print mconf_depends($pkg->{name}, $pkg->{depends}, 0); print "\t\thelp\n"; print $pkg->{description}; print "\n"; @@ -526,6 +546,7 @@ sub gen_package_mk() { $config = "\$(CONFIG_PACKAGE_$name)" } if ($config) { + $pkg->{buildonly} and $config = ""; print "package-$config += $pkg->{subdir}$pkg->{src}\n"; $pkg->{prereq} and print "prereq-$config += $pkg->{subdir}$pkg->{src}\n"; } @@ -543,7 +564,7 @@ sub gen_package_mk() { } my $hasdeps = 0; - my $depline = ""; + my %deplines; foreach my $deps (@srcdeps) { my $idx; my $condition; @@ -571,9 +592,10 @@ sub gen_package_mk() { } undef $idx if $idx =~ /^(kernel)|(base-files)$/; if ($idx) { + my $depline; next if $pkg->{src} eq $pkg_dep->{src}; next if $dep{$pkg->{src}."->".$idx}; - next if $dep{$pkg->{src}."->($dep)".$idx}; + next if $dep{$pkg->{src}."->($dep)".$idx} and $pkg_dep->{vdepends}; my $depstr; if ($pkg_dep->{vdepends}) { @@ -584,13 +606,21 @@ 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"; + $depline = $depstr; + } + if ($depline) { + $deplines{$idx.$dep} = $depline; } } } } + my $depline = join(" ", values %deplines); if ($depline) { $line .= "\$(curdir)/".$pkg->{subdir}."$pkg->{src}/compile += $depline\n"; } @@ -633,7 +663,7 @@ sub parse_command() { print <