X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=scripts%2Fmetadata.pl;h=ea437f526866a43062b2dc62e568b70a5f3414e4;hb=a050750f3579b61c9c0f16a00fb7566f930f4a7a;hp=17040d9e365a8808411be3b3dc613c188c633c64;hpb=ba69e8b98934a8f85fa8a4ebd697c21da879dfce;p=openwrt.git diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 17040d9e36..ea437f5268 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -12,6 +12,47 @@ sub confstr($) { return $conf; } +sub version_to_num($) { + my $str = shift; + my $num = 0; + + if (defined($str) && $str =~ /^\d+(?:\.\d+)+$/) + { + my @n = (split(/\./, $str), 0, 0, 0, 0); + $num = ($n[0] << 24) | ($n[1] << 16) | ($n[2] << 8) | $n[3]; + } + + return $num; +} + +sub version_filter_list(@) { + my $cmpver = version_to_num(shift @_); + my @items; + + foreach my $item (@_) + { + if ($item =~ s/@(lt|le|gt|ge|eq|ne)(\d+(?:\.\d+)+)\b//) + { + my $op = $1; + my $symver = version_to_num($2); + + if ($symver > 0 && $cmpver > 0) + { + next unless (($op eq 'lt' && $cmpver < $symver) || + ($op eq 'le' && $cmpver <= $symver) || + ($op eq 'gt' && $cmpver > $symver) || + ($op eq 'ge' && $cmpver >= $symver) || + ($op eq 'eq' && $cmpver == $symver) || + ($op eq 'ne' && $cmpver != $symver)); + } + } + + push @items, $item; + } + + return @items; +} + sub parse_target_metadata() { my $file = shift @ARGV; my ($target, @target, $profile); @@ -53,6 +94,7 @@ sub parse_target_metadata() { /^Target-Depends:\s*(.+)\s*$/ and $target->{depends} = [ split(/\s+/, $1) ]; /^Target-Description:/ and $target->{desc} = get_multiline(*FILE); /^Target-Optimization:\s*(.+)\s*$/ and $target->{cflags} = $1; + /^CPU-Type:\s*(.+)\s*$/ and $target->{cputype} = $1; /^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1; /^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1; /^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1; @@ -74,7 +116,10 @@ sub parse_target_metadata() { } close FILE; foreach my $target (@target) { - next if @{$target->{subtargets}} > 0; + if (@{$target->{subtargets}} > 0) { + $target->{profiles} = []; + next; + } @{$target->{profiles}} > 0 or $target->{profiles} = [ { id => 'Default', @@ -92,6 +137,7 @@ sub gen_kconfig_overrides() { my $package; my $pkginfo = shift @ARGV; my $cfgfile = shift @ARGV; + my $patchver = shift @ARGV; # parameter 2: build system config open FILE, "<$cfgfile" or return; @@ -106,7 +152,7 @@ sub gen_kconfig_overrides() { /^Package:\s*(.+?)\s*$/ and $package = $1; /^Kernel-Config:\s*(.+?)\s*$/ and do { my @config = split /\s+/, $1; - foreach my $config (@config) { + foreach my $config (version_filter_list($patchver, @config)) { my $val = 'm'; my $override; if ($config =~ /^(.+?)=(.+)$/) { @@ -157,6 +203,7 @@ sub target_config_features(@) { /broken/ and $ret .= "\tdepends on BROKEN\n"; /audio/ and $ret .= "\tselect AUDIO_SUPPORT\n"; /display/ and $ret .= "\tselect DISPLAY_SUPPORT\n"; + /dt/ and $ret .= "\tselect USES_DEVICETREE\n"; /gpio/ and $ret .= "\tselect GPIO_SUPPORT\n"; /pci/ and $ret .= "\tselect PCI_SUPPORT\n"; /pcie/ and $ret .= "\tselect PCIE_SUPPORT\n"; @@ -177,6 +224,9 @@ sub target_config_features(@) { /powerpc64/ and $ret .= "\tselect powerpc64\n"; /nommu/ and $ret .= "\tselect NOMMU\n"; /mips16/ and $ret .= "\tselect HAS_MIPS16\n"; + /rfkill/ and $ret .= "\tselect RFKILL_SUPPORT\n"; + /low_mem/ and $ret .= "\tselect LOW_MEMORY_FOOTPRINT\n"; + /nand/ and $ret .= "\tselect NAND_SUPPORT\n"; } return $ret; } @@ -371,6 +421,16 @@ EOF print "\tdefault \"".$target->{cflags}."\" if TARGET_".$target->{conf}."\n"; } print "\tdefault \"-Os -pipe -funit-at-a-time\"\n"; + print <{subtargets}} > 0; + print "\tdefault \"".$target->{cputype}."\" if TARGET_".$target->{conf}."\n"; + } + print "\tdefault \"\"\n"; my %kver; foreach my $target (@target) { @@ -441,6 +501,7 @@ sub mconf_depends { my $parent_condition = shift; $dep or $dep = {}; $seen or $seen = {}; + my @t_depends; $depends or return; my @depends = @$depends; @@ -453,6 +514,7 @@ sub mconf_depends { next if $condition eq $depend; next if $seen->{"$parent_condition:$depend"}; + next if $seen->{":$depend"}; $seen->{"$parent_condition:$depend"} = 1; if ($depend =~ /^(.+):(.+)$/) { if ($1 ne "PACKAGE_$pkgname") { @@ -473,7 +535,7 @@ 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($pkgname, $package{$depend}->{depends}, 1, $dep, $seen, $condition); + $package{$depend} and push @t_depends, [ $package{$depend}->{depends}, $condition ]; $m = "select"; next if $only_dep; @@ -484,12 +546,17 @@ sub mconf_depends { next if $depend eq $condition; $depend = "$depend if $condition"; } else { - $depend = "!($condition) || $depend"; + $depend = "!($condition) || $depend" unless $dep->{$condition} eq 'select'; } } } $dep->{$depend} =~ /select/ or $dep->{$depend} = $m; } + + foreach my $tdep (@t_depends) { + mconf_depends($pkgname, $tdep->[0], 1, $dep, $seen, $tdep->[1]); + } + foreach my $depend (keys %$dep) { my $m = $dep->{$depend}; $res .= "\t\t$m $depend\n"; @@ -497,6 +564,18 @@ sub mconf_depends { return $res; } +sub mconf_conflicts { + my $pkgname = shift; + my $depends = shift; + my $res = ""; + + foreach my $depend (@$depends) { + next unless $package{$depend}; + $res .= "\t\tdepends on m || (PACKAGE_$depend != y)\n"; + } + return $res; +} + sub print_package_config_category($) { my $cat = shift; my %menus; @@ -548,11 +627,17 @@ sub print_package_config_category($) { $pkg->{hidden} and $title = ""; print "\t\t".($pkg->{tristate} ? 'tristate' : 'bool')." $title\n"; print "\t\tdefault y if DEFAULT_".$pkg->{name}."\n"; - foreach my $default (split /\s*,\s*/, $pkg->{default}) { - print "\t\tdefault $default\n"; + unless ($pkg->{hidden}) { + $pkg->{default} ||= "m if ALL"; + } + if ($pkg->{default}) { + foreach my $default (split /\s*,\s*/, $pkg->{default}) { + print "\t\tdefault $default\n"; + } } print mconf_depends($pkg->{name}, $pkg->{depends}, 0); print mconf_depends($pkg->{name}, $pkg->{mdepends}, 0); + print mconf_conflicts($pkg->{name}, $pkg->{conflicts}); print "\t\thelp\n"; print $pkg->{description}; print "\n"; @@ -616,7 +701,7 @@ EOF } print_package_features(); print_package_config_category 'Base system'; - foreach my $cat (keys %category) { + foreach my $cat (sort {uc($a) cmp uc($b)} keys %category) { print_package_config_category $cat; } } @@ -649,19 +734,12 @@ sub gen_package_mk() { next if defined $pkg->{vdepends}; - if ($ENV{SDK}) { - $conf{$pkg->{src}} or do { - $config = 'm'; - $conf{$pkg->{src}} = 1; - }; - } else { - $config = "\$(CONFIG_PACKAGE_$name)" - } + $config = "\$(CONFIG_PACKAGE_$name)"; if ($config) { $pkg->{buildonly} and $config = ""; print "package-$config += $pkg->{subdir}$pkg->{src}\n"; if ($pkg->{variant}) { - if (!defined($done{$pkg->{src}})) { + 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" @@ -756,9 +834,10 @@ sub gen_package_mk() { } elsif (defined($srcpackage{$dep})) { $idx = $subdir{$dep}.$dep; } - $idx .= $suffix; - undef $idx if $idx =~ /^(kernel\/linux)|(base-files)$/; + undef $idx if $idx eq 'base-files'; if ($idx) { + $idx .= $suffix; + my $depline; next if $pkg->{src} eq $pkg_dep->{src}.$suffix; next if $dep{$condition.":".$pkg->{src}."->".$idx}; @@ -824,6 +903,44 @@ sub gen_package_source() { } } +sub gen_package_feeds() { + parse_package_metadata($ARGV[0]) or exit 1; + foreach my $name (sort {uc($a) cmp uc($b)} keys %package) { + my $pkg = $package{$name}; + if ($pkg->{name} && $pkg->{feed}) { + print "Package/$name/feed = $pkg->{feed}\n"; + } + } +} + +sub gen_package_license($) { + my $level = shift; + parse_package_metadata($ARGV[0]) or exit 1; + foreach my $name (sort {uc($a) cmp uc($b)} keys %package) { + my $pkg = $package{$name}; + if ($pkg->{name}) { + if ($pkg->{license}) { + print "$pkg->{name}: "; + print "$pkg->{license}\n"; + if ($pkg->{licensefiles} && $level == 0) { + print "\tFiles: $pkg->{licensefiles}\n"; + } + } else { + if ($level == 1) { + print "$pkg->{name}: Missing license! "; + print "Please fix $pkg->{makefile}\n"; + } + } + } + } +} + +sub gen_version_filtered_list() { + foreach my $item (version_filter_list(@ARGV)) { + print "$item\n"; + } +} + sub parse_command() { my $cmd = shift @ARGV; for ($cmd) { @@ -832,14 +949,22 @@ sub parse_command() { /^package_config$/ and return gen_package_config(); /^kconfig/ and return gen_kconfig_overrides(); /^package_source$/ and return gen_package_source(); + /^package_feeds$/ and return gen_package_feeds(); + /^package_license$/ and return gen_package_license(0); + /^package_licensefull$/ and return gen_package_license(1); + /^version_filter$/ and return gen_version_filtered_list(); } print <