X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=scripts%2Fmetadata.pl;h=f3d04dba2dd7e0d433bedc3ee4e8eda03557124d;hp=e0fb32fc1189608fadf8209fd54d64ef35dd5b25;hb=50f9d27da8266c9c9e612574a73684758aae5507;hpb=ceaa4bbe3c321003122bd277be4b7f609f33f8a3 diff --git a/scripts/metadata.pl b/scripts/metadata.pl index e0fb32fc11..f3d04dba2d 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -45,17 +45,19 @@ sub parse_target_metadata() { $target->{parent} = $target{$1}; } }; - /^Target-Kernel:\s*(\d+\.\d+)\s*$/ and $target->{kernel} = $1; /^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1; /^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1; /^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1; + /^Target-Arch-Packages:\s*(.+)\s*$/ and $target->{arch_packages} = $1; /^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ]; /^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; + /^Default-Subtarget:\s*(.+)\s*$/ and $target->{def_subtarget} = $1; /^Default-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ]; /^Target-Profile:\s*(.+)\s*$/ and do { $profile = { @@ -73,7 +75,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', @@ -114,6 +119,7 @@ sub gen_kconfig_overrides() { $val = $2; } if ($config{"CONFIG_PACKAGE_$package"} and ($config ne 'n')) { + next if $kconfig{$config} eq 'y'; $kconfig{$config} = $val; } elsif (!$override) { $kconfig{$config} or $kconfig{$config} = 'n'; @@ -151,24 +157,34 @@ sub target_config_features(@) { my $ret; while ($_ = shift @_) { - /broken/ and $ret .= "\tdepends BROKEN\n"; + /arm_v(\w+)/ and $ret .= "\tselect arm_v$1\n"; + /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"; /usb/ and $ret .= "\tselect USB_SUPPORT\n"; + /usbgadget/ and $ret .= "\tselect USB_GADGET_SUPPORT\n"; /pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n"; + /rtc/ and $ret .= "\tselect RTC_SUPPORT\n"; /squashfs/ and $ret .= "\tselect USES_SQUASHFS\n"; - /jffs2/ and $ret .= "\tselect USES_JFFS2\n"; - /ext2/ and $ret .= "\tselect USES_EXT2\n"; - /tgz/ and $ret .= "\tselect USES_TGZ\n"; + /jffs2$/ and $ret .= "\tselect USES_JFFS2\n"; + /jffs2_nand/ and $ret .= "\tselect USES_JFFS2_NAND\n"; + /ext4/ and $ret .= "\tselect USES_EXT4\n"; + /targz/ and $ret .= "\tselect USES_TARGZ\n"; /cpiogz/ and $ret .= "\tselect USES_CPIOGZ\n"; /ubifs/ and $ret .= "\tselect USES_UBIFS\n"; /fpu/ and $ret .= "\tselect HAS_FPU\n"; + /spe_fpu/ and $ret .= "\tselect HAS_SPE_FPU\n"; /ramdisk/ and $ret .= "\tselect USES_INITRAMFS\n"; /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; } @@ -186,7 +202,11 @@ sub target_name($) { sub kver($) { my $v = shift; $v =~ tr/\./_/; - $v =~ /(\d+_\d+_\d+)(_\d+)?/ and $v = $1; + if (substr($v,0,2) eq "2_") { + $v =~ /(\d+_\d+_\d+)(_\d+)?/ and $v = $1; + } else { + $v =~ /(\d+_\d+)(_\d+)?/ and $v = $1; + } return $v; } @@ -194,9 +214,7 @@ sub print_target($) { my $target = shift; my $features = target_config_features(@{$target->{features}}); my $help = $target->{desc}; - my $kernel = $target->{kernel}; my $confstr; - $kernel =~ tr/./_/; chomp $features; $features .= "\n"; @@ -212,7 +230,6 @@ sub print_target($) { $confstr = <{conf} bool "$target->{name}" - select LINUX_$kernel select LINUX_$v EOF } @@ -223,17 +240,20 @@ config TARGET_$target->{conf} EOF } if ($target->{subtarget}) { - $confstr .= "\tdepends TARGET_$target->{boardconf}\n"; + $confstr .= "\tdepends on TARGET_$target->{boardconf}\n"; } if (@{$target->{subtargets}} > 0) { $confstr .= "\tselect HAS_SUBTARGETS\n"; + grep { /broken/ } @{$target->{features}} and $confstr .= "\tdepends on BROKEN\n"; + } else { + $confstr .= $features; } if ($target->{arch} =~ /\w/) { $confstr .= "\tselect $target->{arch}\n"; } foreach my $dep (@{$target->{depends}}) { - my $mode = "depends"; + my $mode = "depends on"; my $flags; my $name; @@ -246,7 +266,6 @@ EOF $flags =~ /\+/ and $mode = "select"; $flags =~ /@/ and $confstr .= "\t$mode $name\n"; } - $confstr .= $features; $confstr .= "$help\n\n"; print $confstr; } @@ -263,7 +282,7 @@ sub gen_target_config() { print <{def_subtarget}; + print <{conf}_$target->{def_subtarget} if TARGET_$target->{conf} +EOF + } + print <{conf}_$profile->{id} bool "$profile->{name}" - depends TARGET_$target->{conf} + depends on TARGET_$target->{conf} $profile->{config} EOF $profile->{kconfig} and print "\tselect PROFILE_KCONFIG\n"; @@ -334,6 +361,15 @@ EOF $target->{subtarget} or print "\t\tdefault \"".$target->{board}."\" if TARGET_".$target->{conf}."\n"; } print <{subtargets}} > 0; + print "\t\tdefault \"".($target->{arch_packages} || $target->{board})."\" if TARGET_".$target->{conf}."\n"; + } + print <{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) { @@ -413,11 +459,12 @@ sub mconf_depends { my $parent_condition = shift; $dep or $dep = {}; $seen or $seen = {}; + my @t_depends; $depends or return; my @depends = @$depends; foreach my $depend (@depends) { - my $m = "depends"; + my $m = "depends on"; my $flags = ""; $depend =~ s/^([@\+]+)// and $flags = $1; my $vdep; @@ -425,6 +472,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") { @@ -445,7 +493,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; @@ -453,14 +501,20 @@ sub mconf_depends { $flags =~ /@/ or $depend = "PACKAGE_$depend"; if ($condition) { if ($m =~ /select/) { + 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"; @@ -468,6 +522,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; @@ -512,15 +578,24 @@ sub print_package_config_category($) { if ($c > 0) { $title .= ("." x $c). " ". $pkg->{title}; } + $title = "\"$title\""; print "\t"; $pkg->{menu} and print "menu"; print "config PACKAGE_".$pkg->{name}."\n"; - print "\t\t".($pkg->{tristate} ? 'tristate' : 'bool')." \"$title\"\n"; + $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"; @@ -572,7 +647,7 @@ sub gen_package_config() { print <{$cfg}->{label}" if IMAGEOPT - depends PACKAGE_$preconfig + depends on PACKAGE_$preconfig default "$preconfig{$preconfig}->{$cfg}->{default}" EOF @@ -584,7 +659,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; } } @@ -617,18 +692,14 @@ 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}}) 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" } $pkg->{prereq} and print "prereq-$config += $pkg->{subdir}$pkg->{src}\n"; @@ -666,22 +737,23 @@ sub gen_package_mk() { $dep = $1; $suffix = $2; } - my $pkg_dep = $package{$dep}; - next unless $pkg_dep; my $idx = ""; - if (defined $pkg_dep->{src}) { + my $pkg_dep = $package{$dep}; + if (defined($pkg_dep) && defined($pkg_dep->{src})) { $idx = $pkg_dep->{subdir}.$pkg_dep->{src}; } elsif (defined($srcpackage{$dep})) { $idx = $subdir{$dep}.$dep; + } else { + next; } my $depstr = "\$(curdir)/$idx$suffix/compile"; my $depline = get_conditional_dep($condition, $depstr); if ($depline) { - $deplines{$dep} = $depline; + $deplines{$depline}++; } } - my $depline = join(" ", values %deplines); + my $depline = join(" ", sort keys %deplines); if ($depline) { $line .= "\$(curdir)/".$pkg->{subdir}."$pkg->{src}/$type/compile += $depline\n"; } @@ -720,12 +792,13 @@ sub gen_package_mk() { } elsif (defined($srcpackage{$dep})) { $idx = $subdir{$dep}.$dep; } - $idx .= $suffix; - undef $idx if $idx =~ /^(kernel)|(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{$pkg->{src}."->".$idx}; + next if $dep{$condition.":".$pkg->{src}."->".$idx}; next if $dep{$pkg->{src}."->($dep)".$idx} and $pkg_dep->{vdepends}; my $depstr; @@ -738,12 +811,12 @@ sub gen_package_mk() { } $depline = get_conditional_dep($condition, $depstr); if ($depline) { - $deplines{$idx.$dep} = $depline; + $deplines{$depline}++; } } } } - my $depline = join(" ", values %deplines); + my $depline = join(" ", sort keys %deplines); if ($depline) { $line .= "\$(curdir)/".$pkg->{subdir}."$pkg->{src}/compile += $depline\n"; } @@ -762,6 +835,7 @@ sub gen_package_mk() { next unless $cmds; print <{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 parse_command() { my $cmd = shift @ARGV; for ($cmd) { @@ -793,6 +901,9 @@ 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); } print <