X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/08bc50f0808241c1381348bdf54fc72f6fdd6525..dcfcfb5617aabba7a029bb5a778e506c8455a10c:/scripts/metadata.pl diff --git a/scripts/metadata.pl b/scripts/metadata.pl index e8a7c1b4a..695abf7b3 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -4,6 +4,8 @@ my %preconfig; my %package; my %srcpackage; my %category; +my %subdir; +my %board; sub get_multiline { my $prefix = shift; @@ -17,22 +19,29 @@ sub get_multiline { return $str; } +sub confstr($) { + my $conf = shift; + $conf =~ tr#/\.\-/#___#; + return $conf; +} + sub parse_target_metadata() { my ($target, @target, $profile); while (<>) { chomp; - /^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do { - my $conf = uc $3.'_'.$2; - $conf =~ tr/\.-/__/; + /^Target:\s*(.+)\s*$/ and do { $target = { id => $1, - conf => $conf, - board => $2, - kernel => $3, + conf => confstr($1), profiles => [] }; push @target, $target; }; + /^Target-Board:\s*(.+)\s*$/ and do { + $target->{board} = $1; + $target->{boardconf} = confstr($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; @@ -81,6 +90,7 @@ sub parse_package_metadata() { $subdir = $2; $src = $3; $subdir =~ s/^package\///; + $subdir{$src} = $subdir; $srcpackage{$src} = []; undef $pkg; }; @@ -135,6 +145,53 @@ sub parse_package_metadata() { return %category; } +sub gen_kconfig_overrides() { + my %config; + my %kconfig; + my $package; + my $pkginfo = shift @ARGV; + my $cfgfile = shift @ARGV; + + # parameter 2: build system config + open FILE, "<$cfgfile" or return; + while () { + /^(CONFIG_.+?)=(.+)$/ and $config{$1} = 1; + } + close FILE; + + # parameter 1: package metadata + open FILE, "<$pkginfo" or return; + while () { + /^Package:\s*(.+?)\s*$/ and $package = $1; + /^Kernel-Config:\s*(.+?)\s*$/ and do { + my @config = split /\s+/, $1; + foreach my $config (@config) { + my $val = 'm'; + my $override; + if ($config =~ /^(.+?)=(.+)$/) { + $config = $1; + $override = 1; + $val = $2; + } + if ($config{"CONFIG_PACKAGE_$package"} and ($config ne 'n')) { + $kconfig{$config} = $val; + } elsif (!$override) { + $kconfig{$config} or $kconfig{$config} = 'n'; + } + } + }; + }; + close FILE; + + foreach my $kconfig (sort keys %kconfig) { + if ($kconfig{$kconfig} eq 'n') { + print "# $kconfig is not set\n"; + } else { + print "$kconfig=$kconfig{$kconfig}\n"; + } + } +} + sub merge_package_lists($$) { my $list1 = shift; my $list2 = shift; @@ -150,47 +207,6 @@ sub merge_package_lists($$) { return sort(@l); } -sub gen_target_mk() { - my @target = parse_target_metadata(); - - @target = sort { - $a->{id} cmp $b->{id} - } @target; - - foreach my $target (@target) { - my ($profiles_def, $profiles_eval); - my $conf = uc $target->{kernel}.'_'.$target->{board}; - $conf =~ tr/\.-/__/; - - foreach my $profile (@{$target->{profiles}}) { - $profiles_def .= " - define Profile/$conf\_$profile->{id} - ID:=$profile->{id} - NAME:=$profile->{name} - PACKAGES:=".join(" ", merge_package_lists($target->{packages}, $profile->{packages}))."\n"; - $profile->{kconfig} and $profiles_def .= " KCONFIG:=1\n"; - $profiles_def .= " endef"; - $profiles_eval .= " -\$(eval \$(call AddProfile,$conf\_$profile->{id}))" - } - print " -ifeq (\$(CONFIG_LINUX_$conf),y) - define Target - KERNEL:=$target->{kernel} - BOARD:=$target->{board} - BOARDNAME:=$target->{name} - LINUX_VERSION:=$target->{version} - LINUX_RELEASE:=$target->{release} - LINUX_KARCH:=$target->{karch} - DEFAULT_PACKAGES:=".join(" ", @{$target->{packages}})." - endef$profiles_def -endif$profiles_eval - -" - } - print "\$(eval \$(call Target))\n"; -} - sub target_config_features(@) { my $ret; @@ -198,12 +214,11 @@ sub target_config_features(@) { /broken/ and $ret .= "\tdepends BROKEN\n"; /pci/ and $ret .= "\tselect PCI_SUPPORT\n"; /usb/ and $ret .= "\tselect USB_SUPPORT\n"; - /atm/ and $ret .= "\tselect ATM_SUPPORT\n"; /pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n"; - /video/ and $ret .= "\tselect VIDEO_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"; } return $ret; } @@ -220,7 +235,7 @@ sub gen_target_config() { print <{conf} + print <{conf} bool "$target->{name}" select $target->{arch} select LINUX_$kernel -$features$help - EOF + if ($target->{id} ne $target->{board}) { + print "\tselect TARGET_".$target->{boardconf}."\n"; + } + print "$features$help\n\n" } print <{board}."\" if TARGET_".$target->{conf}."\n"; + } -endchoice + # add hidden target config options + foreach my $target (@target) { + next if $board{$target->{board}}; + if ($target->{id} ne $target->{board}) { + print "\nconfig TARGET_".$target->{boardconf}."\n\tbool\n"; + $board{$target->{board}} = 1; + } + } + print <{conf}_$profile->{id} +config TARGET_$target->{conf}_$profile->{id} bool "$profile->{name}" - depends LINUX_$target->{conf} + depends TARGET_$target->{conf} $profile->{config} EOF $profile->{kconfig} and print "\tselect PROFILE_KCONFIG\n"; @@ -508,7 +490,7 @@ sub gen_package_mk() { } if ($config) { print "package-$config += $pkg->{subdir}$pkg->{src}\n"; - $pkg->{prereq} and print "prereq-$config += $pkg->{src}\n"; + $pkg->{prereq} and print "prereq-$config += $pkg->{subdir}$pkg->{src}\n"; } my $hasdeps = 0; @@ -518,24 +500,22 @@ sub gen_package_mk() { $dep =~ s/\+//; my $idx; my $pkg_dep = $package{$dep}; - $pkg_dep or $pkg_dep = $srcpackage{$dep}->[0]; - next unless defined $pkg_dep; next if defined $pkg_dep->{vdepends}; if (defined $pkg_dep->{src}) { ($pkg->{src} ne $pkg_dep->{src}) and $idx = $pkg_dep->{subdir}.$pkg_dep->{src}; - } elsif (defined($pkg_dep) && !defined($ENV{SDK})) { - $idx = $dep; + } elsif (defined($srcpackage{$dep})) { + $idx = $subdir{$dep}.$dep; } undef $idx if $idx =~ /^(kernel)|(base-files)$/; if ($idx) { next if $dep{$pkg->{src}."->".$idx}; - $depline .= " $idx\-compile"; + $depline .= " \$(curdir)/$idx/compile"; $dep{$pkg->{src}."->".$idx} = 1; } } if ($depline) { - $line .= $pkg->{subdir}."$pkg->{src}-compile: $depline\n"; + $line .= "\$(curdir)/".$pkg->{subdir}."$pkg->{src}/compile += $depline\n"; } } @@ -558,7 +538,7 @@ $cmds \\ ) > \$@ ifneq (\$(UCI_PRECONFIG)\$(CONFIG_UCI_PRECONFIG),) - preconfig: \$(TARGET_DIR)/etc/uci-defaults/$preconfig + package/preconfig: \$(TARGET_DIR)/etc/uci-defaults/$preconfig endif EOF } @@ -568,17 +548,18 @@ EOF sub parse_command() { my $cmd = shift @ARGV; for ($cmd) { - /^target_mk$/ and return gen_target_mk(); /^target_config$/ and return gen_target_config(); /^package_mk$/ and return gen_package_mk(); /^package_config$/ and return gen_package_config(); + /^kconfig/ and return gen_kconfig_overrides(); } print <