summaryrefslogtreecommitdiff
path: root/menuselect
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir@cohens.org.il>2009-06-05 22:40:56 +0300
committerTzafrir Cohen <tzafrir@cohens.org.il>2009-06-05 22:40:56 +0300
commit1a238d7110152349c453e39c036c22b46bd7e068 (patch)
tree862265ea71fc88bb9f2f3243539a5fb1f4bebf5e /menuselect
parentdbb60e03f34af3f00331badc85ffbd81a70c10e7 (diff)
explin fail reason in modinfo
* -m (--modinfo) now shows the dependencies (and which of those are unsatisfied). * With the new option -v (--verose) it also gives a better reason and a multi-line list of dependencies. * Patchy fix to reading dependencies from the dump file: were read as string rather than array.
Diffstat (limited to 'menuselect')
-rwxr-xr-xmenuselect/menuselect68
1 files changed, 63 insertions, 5 deletions
diff --git a/menuselect/menuselect b/menuselect/menuselect
index 935b0b3..de2dee8 100755
--- a/menuselect/menuselect
+++ b/menuselect/menuselect
@@ -551,6 +551,11 @@ sub read_dump() {
my ($var, $value) = split /: /, $_, 2;
$item{$var} = $value;
}
+ # FIXME: dependencies are a list. This should not be a
+ # special case.
+ if (exists $item{Depend}) {
+ $item{Depend} = [split /\s*,\s*/,$item{Depend}];
+ }
$items{$item{Key}} = \%item;
}
close DUMP_FILE;
@@ -558,7 +563,30 @@ sub read_dump() {
return \%items;
}
+# Explain why a module (read from the dump file) was not enabled.
+# (We assume here that $item->{Avail} is 0)
+sub fail_reason($) {
+ my $item = shift;
+ if ($item->{Type} eq 'lib') {
+ return " Not found: system library";
+ } elsif ($item->{Type} eq 'XML') {
+ if ($item->{Defaultenabled} !~ /^y/) {
+ return "Not enabled";
+ } else {
+ return "Missing dependencies";
+ }
+ } elsif ($item->{Type} eq 'module') {
+ if (exists ($item->{Defaultenabled}) &&
+ $item->{Defaultenabled} =~ /^n/) {
+ return "Disabled";
+ } else {
+ return "Missing dependencies";
+ }
+ }
+}
+
sub print_module_status {
+ my $flag_verbose = shift;
my $items = read_dump();
my %items_matched = ();
@@ -574,10 +602,36 @@ sub print_module_status {
foreach my $item_name (@items_list) {
my $item = $items->{$item_name};
- printf "%s %-8s %-30s\n",
- (($item->{Avail})? 'Y':'n'),
- $item->{Type},
- $item->{Key};
+ if ($flag_verbose) {
+ printf "%s %-8s %-30s\n",
+ (($item->{Avail})? 'Y':'n'),
+ $item->{Type},
+ $item->{Key};
+ if (!$item->{Avail}) {
+ my $reason = fail_reason($item);
+ print " $reason\n";
+ }
+ foreach (@{$item->{Depend}}) {
+ my $depmod = $items->{$_};
+ printf(" * %-12s ",$_);
+ print (($depmod->{Avail})? '': "un");
+ print "available\n";
+ }
+ } else {
+ printf "%s %-8s %-30s",
+ (($item->{Avail})? 'Y':'n'),
+ $item->{Type},
+ $item->{Key};
+ foreach (@{$item->{Depend}}) {
+ my $depmod = $items->{$_};
+ if ($depmod->{Avail}) {
+ print "$_ ";
+ } else {
+ printf "[%s] ", $_;
+ }
+ }
+ print "\n";
+ }
}
}
@@ -587,6 +641,7 @@ sub usage() {
print "Usage:\n";
print "$0 # menuselect processing\n";
print "$0 -m|--modinfo|--moduls-info PATTERN # Status of modules\n";
+ print "$0 -v|--verbose # verbose (modinfo)\n";
print "$0 -c|--check-deps # Check for dependencies\n";
print "\n";
print "PATTERN is a partial perl regex. Use '-m .' to list all.\n";
@@ -594,10 +649,13 @@ sub usage() {
my @module_status = ();
+my $flag_verbose = 0;
+
my $action = '';
my $rc = GetOptions(
'modinfo|modules-info|m=s' => \@module_status,
+ 'verbose|v' => \$flag_verbose,
'check-deps|c:s' => sub { $action = 'check_dependencies'},
'help|h' => sub { usage(); exit 0 },
);
@@ -611,7 +669,7 @@ if (@module_status) {
}
if ($action eq 'module_status') {
- print_module_status(@module_status);
+ print_module_status($flag_verbose, @module_status);
exit 0;
} elsif ( $action eq 'check_dependencies') {
check_dependencies();