summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2007-07-18 11:31:01 +0000
committerFelix Fietkau <nbd@openwrt.org>2007-07-18 11:31:01 +0000
commit8e4255397198574a9cd1354e194cb65bdd2051c0 (patch)
treebe8d0a838c6289a68035c8cd154d1ef44cb857bf /scripts
parent00d88f9ffc1484eb8a0761b03c3171ab47d4adbb (diff)
downloadmaster-31e0f0ae-8e4255397198574a9cd1354e194cb65bdd2051c0.tar.gz
master-31e0f0ae-8e4255397198574a9cd1354e194cb65bdd2051c0.tar.bz2
master-31e0f0ae-8e4255397198574a9cd1354e194cb65bdd2051c0.zip
dynamically enable/disable kernel config options for kmod packages based on build system config
SVN-Revision: 8026
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/config.pl10
-rwxr-xr-xscripts/metadata.pl41
2 files changed, 48 insertions, 3 deletions
diff --git a/scripts/config.pl b/scripts/config.pl
index 2f4a968ea7..53b8f11025 100755
--- a/scripts/config.pl
+++ b/scripts/config.pl
@@ -49,15 +49,17 @@ sub config_and($$) {
}
-sub config_add($$) {
+sub config_add($$$) {
my $cfg1 = shift;
my $cfg2 = shift;
+ my $mod_plus = shift;
my %config;
for ($cfg1, $cfg2) {
my %cfg = %$_;
foreach my $config (keys %cfg) {
+ next if $mod_plus and $config{$config} and $config{$config} eq "y";
$config{$config} = $cfg{$config};
}
}
@@ -123,7 +125,11 @@ sub parse_expr($) {
} elsif ($arg =~ /^\+/) {
my $arg1 = parse_expr($pos);
my $arg2 = parse_expr($pos);
- return config_add($arg1, $arg2);
+ return config_add($arg1, $arg2, 0);
+ } elsif ($arg =~ /^m\+/) {
+ my $arg1 = parse_expr($pos);
+ my $arg2 = parse_expr($pos);
+ return config_add($arg1, $arg2, 1);
} elsif ($arg eq '>') {
my $arg1 = parse_expr($pos);
my $arg2 = parse_expr($pos);
diff --git a/scripts/metadata.pl b/scripts/metadata.pl
index 46f66446a8..a665361daa 100755
--- a/scripts/metadata.pl
+++ b/scripts/metadata.pl
@@ -137,6 +137,42 @@ sub parse_package_metadata() {
return %category;
}
+sub gen_kconfig_overrides() {
+ my %config;
+ my $package;
+ my $pkginfo = shift @ARGV;
+ my $cfgfile = shift @ARGV;
+
+ # parameter 2: build system config
+ open FILE, "<$cfgfile" or return;
+ while (<FILE>) {
+ /^(CONFIG_.+?)=(.+)$/ and $config{$1} = 1;
+ }
+ close FILE;
+
+ # parameter 1: package metadata
+ open FILE, "<$pkginfo" or return;
+ while (<FILE>) {
+ /^Package:\s*(.+?)\s*$/ and $package = $1;
+ /^Kernel-Config:\s*(.+?)\s*$/ and do {
+ my @config = split /\s+/, $1;
+ foreach my $config (@config) {
+ my $val = 'm';
+ if ($config =~ /^(.+?)=(.+)$/) {
+ $config = $1;
+ $val = $2;
+ }
+ if ($config{"CONFIG_PACKAGE_$package"} and ($config ne 'n')) {
+ print "$config=$val\n";
+ } else {
+ print "# $config is not set\n";
+ }
+ }
+ };
+ };
+ close FILE;
+}
+
sub merge_package_lists($$) {
my $list1 = shift;
my $list2 = shift;
@@ -572,13 +608,16 @@ sub parse_command() {
/^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 <<EOF
Available Commands:
$0 target_mk [file] Target metadata in makefile format
$0 target_config [file] Target metadata in Kconfig format
- $0 package_mk [file] Package metadata in makefile format
+ $0 package_mk [file] Package metadata in makefile format
$0 package_config [file] Package metadata in Kconfig format
+ $0 kconfig [file] [config] Kernel config overrides
+
EOF
}