while ($_ = shift @_) {
/broken/ and $ret .= "\tdepends BROKEN\n";
+ /display/ and $ret .= "\tselect DISPLAY_SUPPORT\n";
+ /gpio/ and $ret .= "\tselect GPIO_SUPPORT\n";
/pci/ and $ret .= "\tselect PCI_SUPPORT\n";
/usb/ and $ret .= "\tselect USB_SUPPORT\n";
/pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n";
/jffs2/ and $ret .= "\tselect USES_JFFS2\n";
/ext2/ and $ret .= "\tselect USES_EXT2\n";
/tgz/ and $ret .= "\tselect USES_TGZ\n";
+ /cpiogz/ and $ret .= "\tselect USES_CPIOGZ\n";
+ /fpu/ and $ret .= "\tselect HAS_FPU\n";
}
return $ret;
}
}
}
+sub kver($) {
+ my $v = shift;
+ $v =~ tr/\./_/;
+ $v =~ /(\d+_\d+_\d+)(_\d+)?/ and $v = $1;
+ return $v;
+}
+
sub print_target($) {
my $target = shift;
my $features = target_config_features(@{$target->{features}});
undef $help;
}
+ my $v = kver($target->{version});
$confstr = <<EOF;
config TARGET_$target->{conf}
bool "$target->{name}"
select LINUX_$kernel
+ select LINUX_$v
EOF
if ($target->{subtarget}) {
$confstr .= "\tdepends TARGET_$target->{boardconf}\n";
$target->{subtarget} or print "\t\tdefault \"".$target->{board}."\" if TARGET_".$target->{conf}."\n";
}
+ my %kver;
+ foreach my $target (@target) {
+ my $v = kver($target->{version});
+ next if $kver{$v};
+ $kver{$v} = 1;
+ print <<EOF;
+config LINUX_$v
+ bool
+EOF
+ }
}
my %dep_check;
$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
} else {
$flags =~ /\+/ and do {
- next if $only_dep;
- $m = "select";
-
# Menuconfig will not treat 'select FOO' as a real dependency
# 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($package{$depend}->{depends}, 1, $dep);
+
+ $m = "select";
+ next if $only_dep;
};
$flags =~ /@/ or $depend = "PACKAGE_$depend";
}
sub gen_package_mk() {
my %conf;
my %dep;
+ my %done;
my $line;
parse_package_metadata($ARGV[0]) or exit 1;
foreach my $name (sort {uc($a) cmp uc($b)} keys %package) {
my $config;
my $pkg = $package{$name};
+ my @srcdeps;
next if defined $pkg->{vdepends};
+
if ($ENV{SDK}) {
$conf{$pkg->{src}} or do {
$config = 'm';
$pkg->{prereq} and print "prereq-$config += $pkg->{subdir}$pkg->{src}\n";
}
+ next if $done{$pkg->{src}};
+ $done{$pkg->{src}} = 1;
+
+ foreach my $spkg (@{$srcpackage{$pkg->{src}}}) {
+ foreach my $dep (@{$spkg->{depends}}, @{$spkg->{builddepends}}) {
+ $dep =~ /@/ or do {
+ $dep =~ s/\+//g;
+ push @srcdeps, $dep;
+ };
+ }
+ }
+
my $hasdeps = 0;
my $depline = "";
- foreach my $dep (@{$pkg->{depends}}, @{$pkg->{builddepends}}) {
- next if $dep =~ /@/;
- $dep =~ s/\+//;
+ foreach my $deps (@srcdeps) {
my $idx;
- my $pkg_dep = $package{$dep};
- next if defined $pkg_dep->{vdepends};
+ my $pkg_dep = $package{$deps};
+ my @deps;
- if (defined $pkg_dep->{src}) {
- ($pkg->{src} ne $pkg_dep->{src}) and $idx = $pkg_dep->{subdir}.$pkg_dep->{src};
- } elsif (defined($srcpackage{$dep})) {
- $idx = $subdir{$dep}.$dep;
+ if ($pkg_dep->{vdepends}) {
+ @deps = @{$pkg_dep->{vdepends}};
+ } else {
+ @deps = ($deps);
}
- undef $idx if $idx =~ /^(kernel)|(base-files)$/;
- if ($idx) {
- next if $dep{$pkg->{src}."->".$idx};
- $depline .= " \$(curdir)/$idx/compile";
- $dep{$pkg->{src}."->".$idx} = 1;
+
+ foreach my $dep (@deps) {
+ $pkg_dep = $package{$deps};
+ if (defined $pkg_dep->{src}) {
+ ($pkg->{src} ne $pkg_dep->{src}) and $idx = $pkg_dep->{subdir}.$pkg_dep->{src};
+ } elsif (defined($srcpackage{$dep})) {
+ $idx = $subdir{$dep}.$dep;
+ }
+ undef $idx if $idx =~ /^(kernel)|(base-files)$/;
+ if ($idx) {
+ next if $pkg->{src} eq $pkg_dep->{src};
+ next if $dep{$pkg->{src}."->".$idx};
+ next if $dep{$pkg->{src}."->($dep)".$idx};
+ if ($pkg_dep->{vdepends}) {
+ $depline .= " \$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)";
+ $dep{$pkg->{src}."->($dep)".$idx} = 1;
+ } else {
+ $depline .= " \$(curdir)/$idx/compile";
+ $dep{$pkg->{src}."->".$idx} = 1;
+ }
+ }
}
}
if ($depline) {