merge the scripts dealing with package/target metadata to remove some redundant code
SVN-Revision: 6088
This commit is contained in:
parent
0e3a29c270
commit
06e88a80c7
6 changed files with 438 additions and 485 deletions
4
Makefile
4
Makefile
|
@ -82,10 +82,10 @@ tmpinfo-clean: FORCE
|
||||||
@-rm -rf tmp/.pkginfo tmp/.targetinfo
|
@-rm -rf tmp/.pkginfo tmp/.targetinfo
|
||||||
|
|
||||||
tmp/.config.in: tmp/.pkginfo
|
tmp/.config.in: tmp/.pkginfo
|
||||||
@./scripts/gen_package_config.pl < $< > $@ || rm -f $@
|
@./scripts/metadata.pl package_config < $< > $@ || rm -f $@
|
||||||
|
|
||||||
tmp/.config-target.in: tmp/.targetinfo
|
tmp/.config-target.in: tmp/.targetinfo
|
||||||
@./scripts/gen_target_config.pl < $< > $@ || rm -f $@
|
@./scripts/metadata.pl target_config < $< > $@ || rm -f $@
|
||||||
|
|
||||||
.config: ./scripts/config/conf tmp/.config.in tmp/.config-target.in
|
.config: ./scripts/config/conf tmp/.config.in tmp/.config-target.in
|
||||||
@[ -f .config ] || $(NO_TRACE_MAKE) menuconfig
|
@[ -f .config ] || $(NO_TRACE_MAKE) menuconfig
|
||||||
|
|
|
@ -12,6 +12,6 @@ $(TMP_DIR)/.target.mk: $(TOPDIR)/.target.mk
|
||||||
$(CP) $< $@
|
$(CP) $< $@
|
||||||
else
|
else
|
||||||
$(TMP_DIR)/.target.mk: $(TMP_DIR)/.targetinfo
|
$(TMP_DIR)/.target.mk: $(TMP_DIR)/.targetinfo
|
||||||
$(SCRIPT_DIR)/gen_target_mk.pl < $(TMP_DIR)/.targetinfo > $@
|
$(SCRIPT_DIR)/metadata.pl target_mk < $(TMP_DIR)/.targetinfo > $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -1,194 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
# Copyright (C) 2006 OpenWrt.org
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
my $src;
|
|
||||||
my $makefile;
|
|
||||||
my $pkg;
|
|
||||||
my %package;
|
|
||||||
my %category;
|
|
||||||
|
|
||||||
|
|
||||||
sub find_dep($$) {
|
|
||||||
my $pkg = shift;
|
|
||||||
my $name = shift;
|
|
||||||
my $deps = ($pkg->{vdepends} or $pkg->{depends});
|
|
||||||
|
|
||||||
return 0 unless defined $deps;
|
|
||||||
foreach my $dep (@{$deps}) {
|
|
||||||
return 1 if $dep eq $name;
|
|
||||||
return 1 if ($package{$dep} and (find_dep($package{$dep},$name) == 1));
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub depends($$) {
|
|
||||||
my $a = shift;
|
|
||||||
my $b = shift;
|
|
||||||
my $ret;
|
|
||||||
|
|
||||||
return 0 if ($a->{submenu} ne $b->{submenu});
|
|
||||||
if (find_dep($a, $b->{name}) == 1) {
|
|
||||||
$ret = 1;
|
|
||||||
} elsif (find_dep($b, $a->{name}) == 1) {
|
|
||||||
$ret = -1;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
# print STDERR "depends($a->{name}, $b->{name}) == $ret\n";
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub print_category($) {
|
|
||||||
my $cat = shift;
|
|
||||||
my %menus;
|
|
||||||
my %menu_dep;
|
|
||||||
|
|
||||||
return unless $category{$cat};
|
|
||||||
|
|
||||||
print "menu \"$cat\"\n\n";
|
|
||||||
my %spkg = %{$category{$cat}};
|
|
||||||
|
|
||||||
foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) {
|
|
||||||
foreach my $pkg (@{$spkg{$spkg}}) {
|
|
||||||
my $menu = $pkg->{submenu};
|
|
||||||
if ($menu) {
|
|
||||||
$menu_dep{$menu} or $menu_dep{$menu} = $pkg->{submenudep};
|
|
||||||
} else {
|
|
||||||
$menu = 'undef';
|
|
||||||
}
|
|
||||||
$menus{$menu} or $menus{$menu} = [];
|
|
||||||
push @{$menus{$menu}}, $pkg;
|
|
||||||
print "\tconfig DEFAULT_".$pkg->{name}."\n";
|
|
||||||
print "\t\tbool\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
my @menus = sort {
|
|
||||||
($a eq 'undef' ? 1 : 0) or
|
|
||||||
($b eq 'undef' ? -1 : 0) or
|
|
||||||
($a cmp $b)
|
|
||||||
} keys %menus;
|
|
||||||
|
|
||||||
foreach my $menu (@menus) {
|
|
||||||
my @pkgs = sort {
|
|
||||||
depends($a, $b) or
|
|
||||||
($a->{name} cmp $b->{name})
|
|
||||||
} @{$menus{$menu}};
|
|
||||||
if ($menu ne 'undef') {
|
|
||||||
$menu_dep{$menu} and print "if $menu_dep{$menu}\n";
|
|
||||||
print "menu \"$menu\"\n";
|
|
||||||
}
|
|
||||||
foreach my $pkg (@pkgs) {
|
|
||||||
my $title = $pkg->{name};
|
|
||||||
my $c = (72 - length($pkg->{name}) - length($pkg->{title}));
|
|
||||||
if ($c > 0) {
|
|
||||||
$title .= ("." x $c). " ". $pkg->{title};
|
|
||||||
}
|
|
||||||
print "\t";
|
|
||||||
$pkg->{menu} and print "menu";
|
|
||||||
print "config PACKAGE_".$pkg->{name}."\n";
|
|
||||||
print "\t\ttristate \"$title\"\n";
|
|
||||||
print "\t\tdefault y if DEFAULT_".$pkg->{name}."\n";
|
|
||||||
foreach my $default (split /\s*,\s*/, $pkg->{default}) {
|
|
||||||
print "\t\tdefault $default\n";
|
|
||||||
}
|
|
||||||
foreach my $depend (@{$pkg->{depends}}) {
|
|
||||||
my $m = "depends";
|
|
||||||
$depend =~ s/^([@\+]+)//;
|
|
||||||
my $flags = $1;
|
|
||||||
my $vdep;
|
|
||||||
|
|
||||||
if ($vdep = $package{$depend}->{vdepends}) {
|
|
||||||
$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
|
|
||||||
} else {
|
|
||||||
$flags =~ /@/ or $depend = "PACKAGE_$depend";
|
|
||||||
$flags =~ /\+/ and $m = "select";
|
|
||||||
}
|
|
||||||
print "\t\t$m $depend\n";
|
|
||||||
}
|
|
||||||
print "\t\thelp\n";
|
|
||||||
print $pkg->{description};
|
|
||||||
print "\n";
|
|
||||||
|
|
||||||
$pkg->{config} and print $pkg->{config}."\n";
|
|
||||||
}
|
|
||||||
if ($menu ne 'undef') {
|
|
||||||
print "endmenu\n";
|
|
||||||
$menu_dep{$menu} and print "endif\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "endmenu\n\n";
|
|
||||||
|
|
||||||
undef $category{$cat};
|
|
||||||
}
|
|
||||||
|
|
||||||
my $line;
|
|
||||||
while ($line = <>) {
|
|
||||||
chomp $line;
|
|
||||||
$line =~ /^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do {
|
|
||||||
$makefile = $1;
|
|
||||||
$src = $2;
|
|
||||||
undef $pkg;
|
|
||||||
};
|
|
||||||
$line =~ /^Package: \s*(.+)\s*$/ and do {
|
|
||||||
$pkg = {};
|
|
||||||
$pkg->{src} = $src;
|
|
||||||
$pkg->{makefile} = $makefile;
|
|
||||||
$pkg->{name} = $1;
|
|
||||||
$pkg->{default} = "m if ALL";
|
|
||||||
$package{$1} = $pkg;
|
|
||||||
};
|
|
||||||
$line =~ /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
|
|
||||||
$line =~ /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
|
|
||||||
$line =~ /^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1;
|
|
||||||
$line =~ /^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1;
|
|
||||||
$line =~ /^Submenu-Depends: \s*(.+)\s*$/ and $pkg->{submenudep} = $1;
|
|
||||||
$line =~ /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
|
|
||||||
$line =~ /^Provides: \s*(.+)\s*$/ and do {
|
|
||||||
my @vpkg = split /\s+/, $1;
|
|
||||||
foreach my $vpkg (@vpkg) {
|
|
||||||
$package{$vpkg} or $package{$vpkg} = { vdepends => [] };
|
|
||||||
push @{$package{$vpkg}->{vdepends}}, $pkg->{name};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
$line =~ /^Depends: \s*(.+)\s*$/ and do {
|
|
||||||
my @dep = split /\s+/, $1;
|
|
||||||
$pkg->{depends} = \@dep;
|
|
||||||
};
|
|
||||||
$line =~ /^Category: \s*(.+)\s*$/ and do {
|
|
||||||
$pkg->{category} = $1;
|
|
||||||
defined $category{$1} or $category{$1} = {};
|
|
||||||
defined $category{$1}->{$src} or $category{$1}->{$src} = [];
|
|
||||||
push @{$category{$1}->{$src}}, $pkg;
|
|
||||||
};
|
|
||||||
$line =~ /^Description: \s*(.*)\s*$/ and do {
|
|
||||||
my $desc = "\t\t$1\n\n";
|
|
||||||
my $line;
|
|
||||||
while ($line = <>) {
|
|
||||||
last if $line =~ /^@@/;
|
|
||||||
$desc .= "\t\t$line";
|
|
||||||
}
|
|
||||||
$pkg->{description} = $desc;
|
|
||||||
};
|
|
||||||
$line =~ /^Config: \s*(.*)\s*$/ and do {
|
|
||||||
my $conf = "$1\n";
|
|
||||||
my $line;
|
|
||||||
while ($line = <>) {
|
|
||||||
last if $line =~ /^@@/;
|
|
||||||
$conf .= "$line";
|
|
||||||
}
|
|
||||||
$pkg->{config} = $conf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print_category 'Base system';
|
|
||||||
foreach my $cat (keys %category) {
|
|
||||||
print_category $cat;
|
|
||||||
}
|
|
|
@ -1,200 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
# Copyright (C) 2006 OpenWrt.org
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
my @target;
|
|
||||||
my $target;
|
|
||||||
my $profiles;
|
|
||||||
my $profile;
|
|
||||||
|
|
||||||
sub features(@) {
|
|
||||||
my $ret;
|
|
||||||
|
|
||||||
while ($_ = shift @_) {
|
|
||||||
/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";
|
|
||||||
/squashfs/ and $ret .= "\tselect USES_SQUASHFS\n";
|
|
||||||
/jffs2/ and $ret .= "\tselect USES_JFFS2\n";
|
|
||||||
/ext2/ and $ret .= "\tselect USES_EXT2\n";
|
|
||||||
}
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (<>) {
|
|
||||||
chomp;
|
|
||||||
/^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do {
|
|
||||||
my $conf = uc $3.'_'.$2;
|
|
||||||
$conf =~ tr/\.-/__/;
|
|
||||||
$target = {
|
|
||||||
id => $1,
|
|
||||||
conf => $conf,
|
|
||||||
board => $2,
|
|
||||||
kernel => $3
|
|
||||||
};
|
|
||||||
$target->{kernel} =~ tr/\./_/;
|
|
||||||
push @target, $target;
|
|
||||||
};
|
|
||||||
/^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-Features:\s*(.+)\s*$/ and do {
|
|
||||||
my $f = [];
|
|
||||||
$target->{features} = $f;
|
|
||||||
@$f = split /\s+/, $1;
|
|
||||||
};
|
|
||||||
/^Target-Description:/ and do {
|
|
||||||
my $desc;
|
|
||||||
while (<>) {
|
|
||||||
last if /^@@/;
|
|
||||||
$desc .= $_;
|
|
||||||
}
|
|
||||||
$target->{desc} = $desc;
|
|
||||||
};
|
|
||||||
/^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-Packages:\s*(.+)\s*$/ and do {
|
|
||||||
my @pkgs = split /\s+/, $1;
|
|
||||||
$target->{defaultpkgs} = \@pkgs;
|
|
||||||
};
|
|
||||||
/^Target-Profile:\s*(.+)\s*$/ and do {
|
|
||||||
$profiles = $target->{profiles} or $target->{profiles} = $profiles = [];
|
|
||||||
$profile = {
|
|
||||||
id => $1
|
|
||||||
};
|
|
||||||
push @$profiles, $profile;
|
|
||||||
};
|
|
||||||
/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
|
|
||||||
/^Target-Profile-Packages:\s*(.+)\s*$/ and do {
|
|
||||||
my @pkgs = split /\s+/, $1;
|
|
||||||
$profile->{pkgs} = \@pkgs;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@target = sort {
|
|
||||||
$a->{name} cmp $b->{name}
|
|
||||||
} @target;
|
|
||||||
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
choice
|
|
||||||
prompt "Target System"
|
|
||||||
default LINUX_2_4_BRCM
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
foreach $target (@target) {
|
|
||||||
my $features = features(@{$target->{features}});
|
|
||||||
my $help = $target->{desc};
|
|
||||||
chomp $features;
|
|
||||||
$features .= "\n";
|
|
||||||
if ($help =~ /\w+/) {
|
|
||||||
$help =~ s/^\s*/\t /mg;
|
|
||||||
$help = "\thelp\n$help";
|
|
||||||
} else {
|
|
||||||
undef $help;
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF
|
|
||||||
config LINUX_$target->{conf}
|
|
||||||
bool "$target->{name}"
|
|
||||||
select $target->{arch}
|
|
||||||
select LINUX_$target->{kernel}
|
|
||||||
$features$help
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
if DEVEL
|
|
||||||
|
|
||||||
config LINUX_2_6_ARM
|
|
||||||
bool "UNSUPPORTED little-endian arm platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select arm
|
|
||||||
|
|
||||||
config LINUX_2_6_CRIS
|
|
||||||
bool "UNSUPPORTED cris platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select cris
|
|
||||||
|
|
||||||
config LINUX_2_6_M68K
|
|
||||||
bool "UNSUPPORTED m68k platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select m68k
|
|
||||||
|
|
||||||
config LINUX_2_6_SH3
|
|
||||||
bool "UNSUPPORTED little-endian sh3 platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select sh3
|
|
||||||
|
|
||||||
config LINUX_2_6_SH3EB
|
|
||||||
bool "UNSUPPORTED big-endian sh3 platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select sh3eb
|
|
||||||
|
|
||||||
config LINUX_2_6_SH4
|
|
||||||
bool "UNSUPPORTED little-endian sh4 platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select sh4
|
|
||||||
|
|
||||||
config LINUX_2_6_SH4EB
|
|
||||||
bool "UNSUPPORTED big-endian sh4 platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select sh4eb
|
|
||||||
|
|
||||||
config LINUX_2_6_SPARC
|
|
||||||
bool "UNSUPPORTED sparc platform"
|
|
||||||
depends BROKEN
|
|
||||||
select LINUX_2_6
|
|
||||||
select sparc
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
endchoice
|
|
||||||
|
|
||||||
choice
|
|
||||||
prompt "Target Profile"
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
foreach $target (@target) {
|
|
||||||
my $profiles;
|
|
||||||
|
|
||||||
$profiles = $target->{profiles} or $profiles = [
|
|
||||||
{
|
|
||||||
id => 'Default',
|
|
||||||
name => 'Default',
|
|
||||||
pkgs => []
|
|
||||||
}
|
|
||||||
];
|
|
||||||
foreach my $profile (@$profiles) {
|
|
||||||
print <<EOF;
|
|
||||||
config LINUX_$target->{conf}_$profile->{id}
|
|
||||||
bool "$profile->{name}"
|
|
||||||
depends LINUX_$target->{conf}
|
|
||||||
EOF
|
|
||||||
foreach my $pkg (@{$target->{defaultpkgs}}, @{$profile->{pkgs}}) {
|
|
||||||
print "\tselect DEFAULT_$pkg\n";
|
|
||||||
}
|
|
||||||
print "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print "endchoice\n";
|
|
|
@ -1,88 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
# Copyright (C) 2006 OpenWrt.org
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
my @target;
|
|
||||||
my $target;
|
|
||||||
my $profile;
|
|
||||||
|
|
||||||
while (<>) {
|
|
||||||
chomp;
|
|
||||||
/^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do {
|
|
||||||
$target = {
|
|
||||||
id => $1,
|
|
||||||
board => $2,
|
|
||||||
kernel => $3,
|
|
||||||
profiles => []
|
|
||||||
};
|
|
||||||
push @target, $target;
|
|
||||||
};
|
|
||||||
/^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-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ];
|
|
||||||
/^Target-Description:/ and do {
|
|
||||||
my $desc;
|
|
||||||
while (<>) {
|
|
||||||
last if /^@@/;
|
|
||||||
$desc .= $_;
|
|
||||||
}
|
|
||||||
$target->{desc} = $desc;
|
|
||||||
};
|
|
||||||
/^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-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ];
|
|
||||||
/^Target-Profile:\s*(.+)\s*$/ and do {
|
|
||||||
$profile = {
|
|
||||||
id => $1,
|
|
||||||
name => $1,
|
|
||||||
packages => []
|
|
||||||
};
|
|
||||||
push @{$target->{profiles}}, $profile;
|
|
||||||
};
|
|
||||||
/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
|
|
||||||
/^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ];
|
|
||||||
}
|
|
||||||
|
|
||||||
@target = sort {
|
|
||||||
$a->{id} cmp $b->{id}
|
|
||||||
} @target;
|
|
||||||
|
|
||||||
foreach $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(" ", @{$profile->{packages}})."
|
|
||||||
endef";
|
|
||||||
$profiles_eval .= "
|
|
||||||
\$(eval \$(call Profile,$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";
|
|
435
scripts/metadata.pl
Executable file
435
scripts/metadata.pl
Executable file
|
@ -0,0 +1,435 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
my %package;
|
||||||
|
my %category;
|
||||||
|
|
||||||
|
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 = {
|
||||||
|
id => $1,
|
||||||
|
conf => $conf,
|
||||||
|
board => $2,
|
||||||
|
kernel => $3,
|
||||||
|
profiles => []
|
||||||
|
};
|
||||||
|
push @target, $target;
|
||||||
|
};
|
||||||
|
/^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-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ];
|
||||||
|
/^Target-Description:/ and do {
|
||||||
|
my $desc;
|
||||||
|
while (<>) {
|
||||||
|
last if /^@@/;
|
||||||
|
$desc .= $_;
|
||||||
|
}
|
||||||
|
$target->{desc} = $desc;
|
||||||
|
};
|
||||||
|
/^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-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ];
|
||||||
|
/^Target-Profile:\s*(.+)\s*$/ and do {
|
||||||
|
$profile = {
|
||||||
|
id => $1,
|
||||||
|
name => $1,
|
||||||
|
packages => []
|
||||||
|
};
|
||||||
|
push @{$target->{profiles}}, $profile;
|
||||||
|
};
|
||||||
|
/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
|
||||||
|
/^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ];
|
||||||
|
}
|
||||||
|
return @target;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parse_package_metadata() {
|
||||||
|
my $pkg;
|
||||||
|
my $makefile;
|
||||||
|
my $src;
|
||||||
|
while (<>) {
|
||||||
|
chomp;
|
||||||
|
/^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do {
|
||||||
|
$makefile = $1;
|
||||||
|
$src = $2;
|
||||||
|
undef $pkg;
|
||||||
|
};
|
||||||
|
/^Package: \s*(.+)\s*$/ and do {
|
||||||
|
$pkg = {};
|
||||||
|
$pkg->{src} = $src;
|
||||||
|
$pkg->{makefile} = $makefile;
|
||||||
|
$pkg->{name} = $1;
|
||||||
|
$pkg->{default} = "m if ALL";
|
||||||
|
$package{$1} = $pkg;
|
||||||
|
};
|
||||||
|
/^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
|
||||||
|
/^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
|
||||||
|
/^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1;
|
||||||
|
/^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1;
|
||||||
|
/^Submenu-Depends: \s*(.+)\s*$/ and $pkg->{submenudep} = $1;
|
||||||
|
/^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
|
||||||
|
/^Provides: \s*(.+)\s*$/ and do {
|
||||||
|
my @vpkg = split /\s+/, $1;
|
||||||
|
foreach my $vpkg (@vpkg) {
|
||||||
|
$package{$vpkg} or $package{$vpkg} = { vdepends => [] };
|
||||||
|
push @{$package{$vpkg}->{vdepends}}, $pkg->{name};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/^Depends: \s*(.+)\s*$/ and do {
|
||||||
|
my @dep = split /\s+/, $1;
|
||||||
|
$pkg->{depends} = \@dep;
|
||||||
|
};
|
||||||
|
/^Category: \s*(.+)\s*$/ and do {
|
||||||
|
$pkg->{category} = $1;
|
||||||
|
defined $category{$1} or $category{$1} = {};
|
||||||
|
defined $category{$1}->{$src} or $category{$1}->{$src} = [];
|
||||||
|
push @{$category{$1}->{$src}}, $pkg;
|
||||||
|
};
|
||||||
|
/^Description: \s*(.*)\s*$/ and do {
|
||||||
|
my $desc = "\t\t$1\n\n";
|
||||||
|
my $line;
|
||||||
|
while ($line = <>) {
|
||||||
|
last if $line =~ /^@@/;
|
||||||
|
$desc .= "\t\t$line";
|
||||||
|
}
|
||||||
|
$pkg->{description} = $desc;
|
||||||
|
};
|
||||||
|
/^Config: \s*(.*)\s*$/ and do {
|
||||||
|
my $conf = "$1\n";
|
||||||
|
my $line;
|
||||||
|
while ($line = <>) {
|
||||||
|
last if $line =~ /^@@/;
|
||||||
|
$conf .= "$line";
|
||||||
|
}
|
||||||
|
$pkg->{config} = $conf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return %category;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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(" ", @{$profile->{packages}})."
|
||||||
|
endef";
|
||||||
|
$profiles_eval .= "
|
||||||
|
\$(eval \$(call Profile,$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;
|
||||||
|
|
||||||
|
while ($_ = shift @_) {
|
||||||
|
/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";
|
||||||
|
/squashfs/ and $ret .= "\tselect USES_SQUASHFS\n";
|
||||||
|
/jffs2/ and $ret .= "\tselect USES_JFFS2\n";
|
||||||
|
/ext2/ and $ret .= "\tselect USES_EXT2\n";
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub gen_target_config() {
|
||||||
|
my @target = parse_target_metadata();
|
||||||
|
|
||||||
|
@target = sort {
|
||||||
|
$a->{name} cmp $b->{name}
|
||||||
|
} @target;
|
||||||
|
|
||||||
|
|
||||||
|
print <<EOF;
|
||||||
|
choice
|
||||||
|
prompt "Target System"
|
||||||
|
default LINUX_2_4_BRCM
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
foreach my $target (@target) {
|
||||||
|
my $features = target_config_features(@{$target->{features}});
|
||||||
|
my $help = $target->{desc};
|
||||||
|
my $kernel = $target->{kernel};
|
||||||
|
$kernel =~ tr/./_/;
|
||||||
|
|
||||||
|
chomp $features;
|
||||||
|
$features .= "\n";
|
||||||
|
if ($help =~ /\w+/) {
|
||||||
|
$help =~ s/^\s*/\t /mg;
|
||||||
|
$help = "\thelp\n$help";
|
||||||
|
} else {
|
||||||
|
undef $help;
|
||||||
|
}
|
||||||
|
|
||||||
|
print <<EOF
|
||||||
|
config LINUX_$target->{conf}
|
||||||
|
bool "$target->{name}"
|
||||||
|
select $target->{arch}
|
||||||
|
select LINUX_$kernel
|
||||||
|
$features$help
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
print <<EOF;
|
||||||
|
if DEVEL
|
||||||
|
|
||||||
|
config LINUX_2_6_ARM
|
||||||
|
bool "UNSUPPORTED little-endian arm platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select arm
|
||||||
|
|
||||||
|
config LINUX_2_6_CRIS
|
||||||
|
bool "UNSUPPORTED cris platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select cris
|
||||||
|
|
||||||
|
config LINUX_2_6_M68K
|
||||||
|
bool "UNSUPPORTED m68k platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select m68k
|
||||||
|
|
||||||
|
config LINUX_2_6_SH3
|
||||||
|
bool "UNSUPPORTED little-endian sh3 platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select sh3
|
||||||
|
|
||||||
|
config LINUX_2_6_SH3EB
|
||||||
|
bool "UNSUPPORTED big-endian sh3 platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select sh3eb
|
||||||
|
|
||||||
|
config LINUX_2_6_SH4
|
||||||
|
bool "UNSUPPORTED little-endian sh4 platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select sh4
|
||||||
|
|
||||||
|
config LINUX_2_6_SH4EB
|
||||||
|
bool "UNSUPPORTED big-endian sh4 platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select sh4eb
|
||||||
|
|
||||||
|
config LINUX_2_6_SPARC
|
||||||
|
bool "UNSUPPORTED sparc platform"
|
||||||
|
depends BROKEN
|
||||||
|
select LINUX_2_6
|
||||||
|
select sparc
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Target Profile"
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
foreach my $target (@target) {
|
||||||
|
my $profiles = $target->{profiles};
|
||||||
|
|
||||||
|
@$profiles > 0 or $profiles = [
|
||||||
|
{
|
||||||
|
id => 'Default',
|
||||||
|
name => 'Default',
|
||||||
|
packages => []
|
||||||
|
}
|
||||||
|
];
|
||||||
|
foreach my $profile (@$profiles) {
|
||||||
|
print <<EOF;
|
||||||
|
config LINUX_$target->{conf}_$profile->{id}
|
||||||
|
bool "$profile->{name}"
|
||||||
|
depends LINUX_$target->{conf}
|
||||||
|
EOF
|
||||||
|
foreach my $pkg (@{$target->{packages}}, @{$profile->{packages}}) {
|
||||||
|
print "\tselect DEFAULT_$pkg\n";
|
||||||
|
}
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print "endchoice\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub find_package_dep($$) {
|
||||||
|
my $pkg = shift;
|
||||||
|
my $name = shift;
|
||||||
|
my $deps = ($pkg->{vdepends} or $pkg->{depends});
|
||||||
|
|
||||||
|
return 0 unless defined $deps;
|
||||||
|
foreach my $dep (@{$deps}) {
|
||||||
|
return 1 if $dep eq $name;
|
||||||
|
return 1 if ($package{$dep} and (find_package_dep($package{$dep},$name) == 1));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub package_depends($$) {
|
||||||
|
my $a = shift;
|
||||||
|
my $b = shift;
|
||||||
|
my $ret;
|
||||||
|
|
||||||
|
return 0 if ($a->{submenu} ne $b->{submenu});
|
||||||
|
if (find_package_dep($a, $b->{name}) == 1) {
|
||||||
|
$ret = 1;
|
||||||
|
} elsif (find_package_dep($b, $a->{name}) == 1) {
|
||||||
|
$ret = -1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_package_config_category($) {
|
||||||
|
my $cat = shift;
|
||||||
|
my %menus;
|
||||||
|
my %menu_dep;
|
||||||
|
|
||||||
|
return unless $category{$cat};
|
||||||
|
|
||||||
|
print "menu \"$cat\"\n\n";
|
||||||
|
my %spkg = %{$category{$cat}};
|
||||||
|
|
||||||
|
foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) {
|
||||||
|
foreach my $pkg (@{$spkg{$spkg}}) {
|
||||||
|
my $menu = $pkg->{submenu};
|
||||||
|
if ($menu) {
|
||||||
|
$menu_dep{$menu} or $menu_dep{$menu} = $pkg->{submenudep};
|
||||||
|
} else {
|
||||||
|
$menu = 'undef';
|
||||||
|
}
|
||||||
|
$menus{$menu} or $menus{$menu} = [];
|
||||||
|
push @{$menus{$menu}}, $pkg;
|
||||||
|
print "\tconfig DEFAULT_".$pkg->{name}."\n";
|
||||||
|
print "\t\tbool\n\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my @menus = sort {
|
||||||
|
($a eq 'undef' ? 1 : 0) or
|
||||||
|
($b eq 'undef' ? -1 : 0) or
|
||||||
|
($a cmp $b)
|
||||||
|
} keys %menus;
|
||||||
|
|
||||||
|
foreach my $menu (@menus) {
|
||||||
|
my @pkgs = sort {
|
||||||
|
package_depends($a, $b) or
|
||||||
|
($a->{name} cmp $b->{name})
|
||||||
|
} @{$menus{$menu}};
|
||||||
|
if ($menu ne 'undef') {
|
||||||
|
$menu_dep{$menu} and print "if $menu_dep{$menu}\n";
|
||||||
|
print "menu \"$menu\"\n";
|
||||||
|
}
|
||||||
|
foreach my $pkg (@pkgs) {
|
||||||
|
my $title = $pkg->{name};
|
||||||
|
my $c = (72 - length($pkg->{name}) - length($pkg->{title}));
|
||||||
|
if ($c > 0) {
|
||||||
|
$title .= ("." x $c). " ". $pkg->{title};
|
||||||
|
}
|
||||||
|
print "\t";
|
||||||
|
$pkg->{menu} and print "menu";
|
||||||
|
print "config PACKAGE_".$pkg->{name}."\n";
|
||||||
|
print "\t\ttristate \"$title\"\n";
|
||||||
|
print "\t\tdefault y if DEFAULT_".$pkg->{name}."\n";
|
||||||
|
foreach my $default (split /\s*,\s*/, $pkg->{default}) {
|
||||||
|
print "\t\tdefault $default\n";
|
||||||
|
}
|
||||||
|
foreach my $depend (@{$pkg->{depends}}) {
|
||||||
|
my $m = "depends";
|
||||||
|
$depend =~ s/^([@\+]+)//;
|
||||||
|
my $flags = $1;
|
||||||
|
my $vdep;
|
||||||
|
|
||||||
|
if ($vdep = $package{$depend}->{vdepends}) {
|
||||||
|
$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
|
||||||
|
} else {
|
||||||
|
$flags =~ /@/ or $depend = "PACKAGE_$depend";
|
||||||
|
$flags =~ /\+/ and $m = "select";
|
||||||
|
}
|
||||||
|
print "\t\t$m $depend\n";
|
||||||
|
}
|
||||||
|
print "\t\thelp\n";
|
||||||
|
print $pkg->{description};
|
||||||
|
print "\n";
|
||||||
|
|
||||||
|
$pkg->{config} and print $pkg->{config}."\n";
|
||||||
|
}
|
||||||
|
if ($menu ne 'undef') {
|
||||||
|
print "endmenu\n";
|
||||||
|
$menu_dep{$menu} and print "endif\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "endmenu\n\n";
|
||||||
|
|
||||||
|
undef $category{$cat};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub gen_package_config() {
|
||||||
|
parse_package_metadata();
|
||||||
|
print_package_config_category 'Base system';
|
||||||
|
foreach my $cat (keys %category) {
|
||||||
|
print_package_config_category $cat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parse_command() {
|
||||||
|
my $cmd = shift @ARGV;
|
||||||
|
for ($cmd) {
|
||||||
|
/^target_mk$/ and return gen_target_mk();
|
||||||
|
/^target_config$/ and return gen_target_config();
|
||||||
|
/^package_config$/ and return gen_package_config();
|
||||||
|
}
|
||||||
|
print <<EOF
|
||||||
|
Available Commands:
|
||||||
|
$0 target_mk [file] Target metadata in makefile format
|
||||||
|
$0 target_config [file] Target metadata in Kconfig format
|
||||||
|
$0 package_config [file] Package metadata in Kconfig format
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_command();
|
Loading…
Reference in a new issue