#!/usr/bin/perl -T # # $Id: modhash.pl,v 1.1.1.1 2004/08/31 13:33:28 thomasez Exp $ use strict; use vars qw($moduleroot $kernelversion); require ("./modpick.conf"); my ($m, $p) = &readModulesDep(); print "PATHS:\n\n"; &printPaths($m, $p); sub readModulesDep { my ($modules, $paths); my ($depfile) = $moduleroot . "/" . $kernelversion . "/modules.dep"; open (DEP, "$depfile" ) or die "No modules.dep.\n"; my ($last_module); while () { chomp; next unless (/kernel/); my ($line) = /\w+\/kernel\/(.*)/; if ($line =~ /\:/) { $last_module = undef; my ($modline, $dep) = split (/\:/, $line); my (@path) = split (/\//, $modline); my ($module, $lastp, $lastp1, $lastp2, $lastp3); foreach my $p (@path) { # # We have a module; # ($module) = $1 if ( $p =~ /(.*\.o)/ ); if ($module) { # Gawd this is ugly. push @{$paths->{$lastp}->{'modules'}}, $module unless ($lastp1); push @{$paths->{$lastp}->{$lastp1}->{'modules'}}, $module unless ($lastp2); push @{$paths->{$lastp}->{$lastp1}->{$lastp2}->{'modules'}}, $module unless ($lastp3); push @{$paths->{$lastp}->{$lastp1}->{$lastp2}->{$lastp3}->{'modules'}}, $module if ($lastp3); $modules->{$module}->{'file'} = $modline; next; } # Gawd this is ugly. Part II. $lastp3 = $p if ($lastp && $lastp1 && $lastp2 && !$lastp3); $lastp2 = $p if ($lastp && $lastp1 && !$lastp2); $lastp1 = $p if ($lastp && !$lastp1); $lastp = $p if (!$lastp); } # print $module . ";" . $lastp . ";" . $lastp1 . ";" . $lastp2 . ";" . "$lastp3;\n"; if ($dep) { my ($dmodule) = $1 if ($dep =~ /\/(\w+-?\w+\.o)/); print "DEPM: $module-$dmodule\n"; push @{$modules->{$module}->{'depends'}}, $dmodule; $last_module = $module; } } if ($last_module && $line =~ /^\t/) { my ($dmodule) = $1 if ( $_ =~ /(.*\.o)/ ); # print "DEPM2: $dmodule\n"; push @{$modules->{$last_module}->{'depends'}}, $dmodule; } } close (DEP); return ($modules, $paths); } sub printPaths { my ($modules, $path, $level) = @_; $level++; foreach my $pat (sort(keys (%$path))) { print "Path:$pat\n" if ($pat && $pat ne "modules"); if ($pat eq "modules") { foreach my $mod (@{$path->{'modules'}}) { print "\t$mod - "; print join (";", @{$modules->{$mod}->{'depends'}}) if (exists($modules->{$mod}->{'depends'})); print "\n"; } next; } &printPaths($modules, $path->{$pat}, $level) if (ref($path->{$pat}) eq "HASH"); } }