X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/19682a7752733bc6a45026d69c27575b9b7755fd..7b321c6ac491736f8f372a8ae5f59f05e9de2185:/scripts/metadata.pl diff --git a/scripts/metadata.pl b/scripts/metadata.pl index aa66e5309..41e6e9cd5 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -45,10 +45,10 @@ 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); @@ -56,6 +56,7 @@ sub parse_target_metadata() { /^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 = { @@ -152,19 +153,22 @@ sub target_config_features(@) { while ($_ = shift @_) { /broken/ and $ret .= "\tdepends BROKEN\n"; + /audio/ and $ret .= "\tselect AUDIO_SUPPORT\n"; /display/ and $ret .= "\tselect DISPLAY_SUPPORT\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"; /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"; + /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"; @@ -185,7 +189,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; } @@ -193,9 +201,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"; @@ -211,7 +217,6 @@ sub print_target($) { $confstr = <{conf} bool "$target->{name}" - select LINUX_$kernel select LINUX_$v EOF } @@ -226,6 +231,8 @@ EOF } if (@{$target->{subtargets}} > 0) { $confstr .= "\tselect HAS_SUBTARGETS\n"; + } else { + $confstr .= $features; } if ($target->{arch} =~ /\w/) { @@ -245,7 +252,6 @@ EOF $flags =~ /\+/ and $mode = "select"; $flags =~ /@/ and $confstr .= "\t$mode $name\n"; } - $confstr .= $features; $confstr .= "$help\n\n"; print $confstr; } @@ -262,7 +268,7 @@ sub gen_target_config() { print <{def_subtarget}; + print <{conf}_$target->{def_subtarget} if TARGET_$target->{conf} +EOF + } + print <{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 <{"$parent_condition:$depend"}; + $seen->{"$parent_condition:$depend"} = 1; if ($depend =~ /^(.+):(.+)$/) { if ($1 ne "PACKAGE_$pkgname") { if ($condition) { @@ -432,9 +458,7 @@ sub mconf_depends { } $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); } else { @@ -451,6 +475,7 @@ 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"; @@ -510,15 +535,18 @@ 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"; } print mconf_depends($pkg->{name}, $pkg->{depends}, 0); + print mconf_depends($pkg->{name}, $pkg->{mdepends}, 0); print "\t\thelp\n"; print $pkg->{description}; print "\n"; @@ -562,20 +590,24 @@ EOF sub gen_package_config() { parse_package_metadata($ARGV[0]) or exit 1; - print "menuconfig UCI_PRECONFIG\n\tbool \"Image configuration\"\n" if %preconfig; + print "menuconfig IMAGEOPT\n\tbool \"Image configuration\"\n\tdefault n\n"; foreach my $preconfig (keys %preconfig) { foreach my $cfg (keys %{$preconfig{$preconfig}}) { my $conf = $preconfig{$preconfig}->{$cfg}->{id}; $conf =~ tr/\.-/__/; print <{$cfg}->{label}" if UCI_PRECONFIG + string "$preconfig{$preconfig}->{$cfg}->{label}" if IMAGEOPT depends PACKAGE_$preconfig default "$preconfig{$preconfig}->{$cfg}->{default}" EOF } } + print "source \"package/*/image-config.in\"\n"; + if (scalar glob "package/feeds/*/*/image-config.in") { + print "source \"package/feeds/*/*/image-config.in\"\n"; + } print_package_features(); print_package_config_category 'Base system'; foreach my $cat (keys %category) { @@ -623,6 +655,9 @@ sub gen_package_mk() { $pkg->{buildonly} and $config = ""; print "package-$config += $pkg->{subdir}$pkg->{src}\n"; if ($pkg->{variant}) { + if (!defined($done{$pkg->{src}})) { + 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"; @@ -660,22 +695,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"; } @@ -719,7 +755,7 @@ sub gen_package_mk() { if ($idx) { 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; @@ -732,12 +768,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"; } @@ -756,14 +792,17 @@ sub gen_package_mk() { next unless $cmds; print < \$@ -ifneq (\$(UCI_PRECONFIG)\$(CONFIG_UCI_PRECONFIG),) +ifneq (\$(IMAGEOPT)\$(CONFIG_IMAGEOPT),) package/preconfig: \$(TARGET_DIR)/etc/uci-defaults/$preconfig endif +endif + EOF } }