diff options
author | Felix Fietkau <nbd@openwrt.org> | 2007-07-18 11:31:01 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2007-07-18 11:31:01 +0000 |
commit | 8e4255397198574a9cd1354e194cb65bdd2051c0 (patch) | |
tree | be8d0a838c6289a68035c8cd154d1ef44cb857bf /scripts | |
parent | 00d88f9ffc1484eb8a0761b03c3171ab47d4adbb (diff) | |
download | mtk-20170518-8e4255397198574a9cd1354e194cb65bdd2051c0.zip mtk-20170518-8e4255397198574a9cd1354e194cb65bdd2051c0.tar.gz mtk-20170518-8e4255397198574a9cd1354e194cb65bdd2051c0.tar.bz2 |
dynamically enable/disable kernel config options for kmod packages based on build system config
SVN-Revision: 8026
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/config.pl | 10 | ||||
-rwxr-xr-x | scripts/metadata.pl | 41 |
2 files changed, 48 insertions, 3 deletions
diff --git a/scripts/config.pl b/scripts/config.pl index 2f4a968..53b8f11 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 46f6644..a665361 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 } |