};
/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
/^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ];
+ /^Target-Profile-Description:/ and do {
+ my $desc;
+ while (<>) {
+ last if /^@@/;
+ $desc .= $_;
+ }
+ $profile->{desc} = $desc;
+ };
+ /^Target-Profile-Kconfig:/ and $profile->{kconfig} = 1;
+ }
+ foreach my $target (@target) {
+ @{$target->{profiles}} > 0 or $target->{profiles} = [
+ {
+ id => 'Default',
+ name => 'Default',
+ packages => []
+ }
+ ];
}
return @target;
}
define Profile/$conf\_$profile->{id}
ID:=$profile->{id}
NAME:=$profile->{name}
- PACKAGES:=".join(" ", @{$profile->{packages}})."
- endef";
- $profiles_eval .= "
-\$(eval \$(call Profile,$conf\_$profile->{id}))"
+ PACKAGES:=".join(" ", @{$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)
/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";
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
+ $profile->{kconfig} and print "\tselect PROFILE_KCONFIG\n";
+ my %pkgs;
foreach my $pkg (@{$target->{packages}}, @{$profile->{packages}}) {
- print "\tselect DEFAULT_$pkg\n";
+ $pkgs{$pkg} = 1;
+ }
+ foreach my $pkg (keys %pkgs) {
+ print "\tselect DEFAULT_$pkg\n" unless ($pkg =~ /^-/ or $pkgs{"-$pkg"});
}
print "\n";
}
return $ret;
}
+sub mconf_depends($$) {
+ my $depends = shift;
+ my $only_dep = shift;
+ my $res;
+
+ $depends or return;
+ my @depends = @$depends;
+ foreach my $depend (@depends) {
+ my $m = "depends";
+ $depend =~ s/^([@\+]+)//;
+ my $flags = $1;
+ my $vdep;
+
+ if ($vdep = $package{$depend}->{vdepends}) {
+ $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 $res .= mconf_depends($package{$depend}->{depends}, 1);
+ };
+ $flags =~ /@/ or $depend = "PACKAGE_$depend";
+ }
+ $res .= "\t\t$m $depend\n";
+ }
+ return $res;
+}
+
sub print_package_config_category($) {
my $cat = shift;
my %menus;
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 mconf_depends($pkg->{depends}, 0);
print "\t\thelp\n";
print $pkg->{description};
print "\n";