mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-24 05:11:46 +02:00
add experimental support for a new menuconfig submenu "Package features".
allows selection between multiple packages providing the same feature, which affects dependencies of other packages. will be used e.g. for choosing between DirectFB and X.org for libraries like GTK2 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18056 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
97abaa960a
commit
5b6977f54e
@ -22,7 +22,7 @@ define Config
|
||||
preconfig_$$(1) += $(1)
|
||||
endef
|
||||
|
||||
define Dumpinfo
|
||||
define Dumpinfo/Package
|
||||
$(info Package: $(1)
|
||||
$(if $(MENU),Menu: $(MENU)
|
||||
)$(if $(SUBMENU),Submenu: $(SUBMENU)
|
||||
@ -51,5 +51,31 @@ $(Package/$(1)/config)
|
||||
@@
|
||||
)$(foreach pc,$(preconfig_$(1)),
|
||||
$(Preconfig/$(pc))))
|
||||
endef
|
||||
endef
|
||||
|
||||
define Feature/Default
|
||||
TARGET_NAME:=
|
||||
TARGET_TITLE:=
|
||||
PRIORITY:=
|
||||
NAME:=
|
||||
endef
|
||||
|
||||
define Feature
|
||||
$(eval $(Feature/Default))
|
||||
$(eval $(Feature/$(1)))
|
||||
$(if $(DUMP),$(call Dumpinfo/Feature,$(1)))
|
||||
endef
|
||||
|
||||
define Dumpinfo/Feature
|
||||
$(info Feature: $(TARGET_NAME)_$(1)
|
||||
Target-Name: $(TARGET_NAME)
|
||||
Target-Title: $(TARGET_TITLE)
|
||||
Feature-Name: $(NAME)
|
||||
$(if $(PRIORITY),Feature-Priority: $(PRIORITY)
|
||||
)Feature-Description:
|
||||
$(Feature/$(1)/description)
|
||||
@@
|
||||
)
|
||||
endef
|
||||
|
||||
endif
|
||||
|
@ -176,7 +176,7 @@ endif
|
||||
$(call shexport,Package/$(1)/config)
|
||||
|
||||
$(if $(DUMP), \
|
||||
$(Dumpinfo), \
|
||||
$(Dumpinfo/Package), \
|
||||
$(foreach target, \
|
||||
$(if $(Package/$(1)/targets),$(Package/$(1)/targets), \
|
||||
$(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg $(if $(CONFIG_DEBUG_DIR),debug)) \
|
||||
|
@ -533,6 +533,30 @@ sub print_package_config_category($) {
|
||||
undef $category{$cat};
|
||||
}
|
||||
|
||||
sub print_package_features() {
|
||||
keys %features > 0 or return;
|
||||
print "menu \"Package features\"\n";
|
||||
foreach my $n (keys %features) {
|
||||
my @features = sort { $b->{priority} <=> $a->{priority} or $a->{title} cmp $b->{title} } @{$features{$n}};
|
||||
print <<EOF;
|
||||
choice
|
||||
prompt "$features[0]->{target_title}"
|
||||
default FEATURE_$features[0]->{name}
|
||||
EOF
|
||||
|
||||
foreach my $feature (@features) {
|
||||
print <<EOF;
|
||||
config FEATURE_$feature->{name}
|
||||
bool "$feature->{title}"
|
||||
help
|
||||
$feature->{description}
|
||||
EOF
|
||||
}
|
||||
print "endchoice\n"
|
||||
}
|
||||
print "endmenu\n\n";
|
||||
}
|
||||
|
||||
sub gen_package_config() {
|
||||
parse_package_metadata($ARGV[0]) or exit 1;
|
||||
print "menuconfig UCI_PRECONFIG\n\tbool \"Image configuration\"\n" if %preconfig;
|
||||
@ -549,6 +573,7 @@ sub gen_package_config() {
|
||||
EOF
|
||||
}
|
||||
}
|
||||
print_package_features();
|
||||
print_package_config_category 'Base system';
|
||||
foreach my $cat (keys %category) {
|
||||
print_package_config_category $cat;
|
||||
|
@ -2,13 +2,14 @@ package metadata;
|
||||
use base 'Exporter';
|
||||
use strict;
|
||||
use warnings;
|
||||
our @EXPORT = qw(%package %srcpackage %category %subdir %preconfig clear_packages parse_package_metadata get_multiline);
|
||||
our @EXPORT = qw(%package %srcpackage %category %subdir %preconfig %features clear_packages parse_package_metadata get_multiline);
|
||||
|
||||
our %package;
|
||||
our %preconfig;
|
||||
our %srcpackage;
|
||||
our %category;
|
||||
our %subdir;
|
||||
our %features;
|
||||
|
||||
sub get_multiline {
|
||||
my $fh = shift;
|
||||
@ -28,11 +29,13 @@ sub clear_packages() {
|
||||
%package = ();
|
||||
%srcpackage = ();
|
||||
%category = ();
|
||||
%features = ();
|
||||
}
|
||||
|
||||
sub parse_package_metadata($) {
|
||||
my $file = shift;
|
||||
my $pkg;
|
||||
my $feature;
|
||||
my $makefile;
|
||||
my $preconfig;
|
||||
my $subdir;
|
||||
@ -55,6 +58,7 @@ sub parse_package_metadata($) {
|
||||
};
|
||||
next unless $src;
|
||||
/^Package:\s*(.+?)\s*$/ and do {
|
||||
undef $feature;
|
||||
$pkg = {};
|
||||
$pkg->{src} = $src;
|
||||
$pkg->{makefile} = $makefile;
|
||||
@ -69,6 +73,24 @@ sub parse_package_metadata($) {
|
||||
$package{$1} = $pkg;
|
||||
push @{$srcpackage{$src}}, $pkg;
|
||||
};
|
||||
/^Feature:\s*(.+?)\s*$/ and do {
|
||||
undef $pkg;
|
||||
$feature = {};
|
||||
$feature->{name} = $1;
|
||||
$feature->{priority} = 0;
|
||||
};
|
||||
$feature and do {
|
||||
/^Target-Name:\s*(.+?)\s*$/ and do {
|
||||
$features{$1} or $features{$1} = [];
|
||||
push @{$features{$1}}, $feature;
|
||||
};
|
||||
/^Target-Title:\s*(.+?)\s*$/ and $feature->{target_title} = $1;
|
||||
/^Feature-Priority:\s*(\d+)\s*$/ and $feature->{priority} = $1;
|
||||
/^Feature-Name:\s*(.+?)\s*$/ and $feature->{title} = $1;
|
||||
/^Feature-Description:/ and $feature->{description} = get_multiline(\*FILE, "\t\t\t");
|
||||
next;
|
||||
};
|
||||
next unless $pkg;
|
||||
/^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
|
||||
/^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
|
||||
/^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1;
|
||||
|
Loading…
Reference in New Issue
Block a user