summaryrefslogtreecommitdiffstats
path: root/perl_checker.src/info.mli
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2003-02-18 10:45:33 +0000
committerPascal Rigaux <pixel@mandriva.com>2003-02-18 10:45:33 +0000
commit959912cb126dbbbfa7a7d7a9fc7a258de50ecf0b (patch)
tree9664daf2ff00de0630a63c3d9d08bc64a79b6853 /perl_checker.src/info.mli
parent87e82d0c7bf4585bfe1e2bf7ea19c2289c042233 (diff)
downloadperl_checker-959912cb126dbbbfa7a7d7a9fc7a258de50ecf0b.tar
perl_checker-959912cb126dbbbfa7a7d7a9fc7a258de50ecf0b.tar.gz
perl_checker-959912cb126dbbbfa7a7d7a9fc7a258de50ecf0b.tar.bz2
perl_checker-959912cb126dbbbfa7a7d7a9fc7a258de50ecf0b.tar.xz
perl_checker-959912cb126dbbbfa7a7d7a9fc7a258de50ecf0b.zip
"$!" is NOT better written without the double quotes
Diffstat (limited to 'perl_checker.src/info.mli')
0 files changed, 0 insertions, 0 deletions
a id='n25' href='#n25'>25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
#!/usr/bin/perl

use lib "..";
use common;
use modules;

my $all = $ARGV[0] eq '-a';

my %modules = map {
    chomp;
    my @l = split "\t";
    my $mod = $l[-2];
    $mod =~ s/"(.*)"/$1/;
    if_(!/^\s*#/ && $mod !~ /:/ && $mod ne 'unknown', $mod => $l[-1])
} map { cat_("/usr/share/ldetect-lst/$_") } 'pcitable', 'usbtable';

my %l;
my $kernel = $all ? '/lib/modules' : '../../kernel';
foreach (`find $kernel -name "*.o" -o -name "*.o.gz"`) {
    s|.*/lib/modules/.*?/||;
    s|kernel/drivers/||;
    m|(.*)/(.*)\.o(\.gz)?$|;
    $l{$2} = $1;
}

foreach (keys %modules) {
    my $ktype = $l{$_};
    my $dtype = $modules::drivers{$_};
    if (!$ktype && !$dtype) {
	print "unused module $_ (descr $modules{$_}) (not in modules.pm nor in the kernel)\n";
    } elsif (!$dtype) {
	$missing{$_} = $ktype;
    } elsif (!$ktype) {
	$unused{$_} = $dtype->{type} 
	  if !member($dtype->{type}, 'sound');
    }
}

foreach (sort keys %missing) {
    print "missing $_ in modules.pm (type $missing{$_}, descr $modules{$_})\n";
}
foreach (sort keys %unused) {
    print "unused module $_ (type $unused{$_}) (not in the kernel)\n";
}

__END__
my %m = %l;
my (%missing, %missing2);
while (my ($k, $v) = each %pci_probing::pcitable::ids) {
    next if $v->[1] =~ /^(unknown$|ignore$|Card:|Server:|Bad:)/;

    $l{$v->[1]} or $missing{$v->[1]} = 1;
    $modules::drivers{$v->[1]} or push @{$missing2{$v->[1]}}, $v->[0];
    delete $m{$v->[1]};
}
print "W: unused entry in modules.pm $_\n" 
  foreach grep { !$l{$_} && !$missing{$_} #- will be reported below
	     } keys %modules::drivers;

print qq|W: missing entry in modules.pm for $l{$_} "$_"\n| foreach grep { !$modules::drivers{$_} } keys %l;

my %known; @known{qw(net scsi misc)} = ();
if ($ARGV[0] eq "-v") {
    print "W: has no pci entry: $_ \n" foreach grep { exists $known{$m{$_}} } keys %m;
}

print "E: missing module $_\n" 
  foreach grep { $modules::drivers{$_}{type} ne "sound" #- don't care about sound modules
	     } keys %missing;

foreach (keys %missing2) {
    print qq|E: missing entry in modules.pm for $l{$_} "$_"|;
    print qq| => "|, join("<>", @{$missing2{$_}}), '"';
    print "\n";
}

#exit;

my %devices_c = (
  net => "checkEthernetDev, DRIVER_NET, DRIVER_MINOR_ETHERNET",
  scsi => "checkSCSIDev, DRIVER_SCSI, DRIVER_MINOR_NONE",
  disk => "checkSCSIDev, DRIVER_SCSI, DRIVER_MINOR_NONE",
  pcmcia => "NULL, DRIVER_PCMCIA, DRIVER_MINOR_NONE",
  paride => "NULL, DRIVER_PARIDE, DRIVER_MINOR_NONE",
  cdrom => "NULL, DRIVER_CDROM, DRIVER_MINOR_NONE",
);
my $devices_c = join "|", keys %devices_c;

my %drivers = %modules::drivers;
$drivers{$_}{type} =~ /$devices_c/ or delete $drivers{$_} foreach keys %drivers;
foreach (cat_("../../install/devices.c")) {
    if (/static struct driver drivers/ .. /^};/) {
	/\s*{\s*"[^"]*"\s*,\s*"(.*)"/ or next;