]> jfr.im git - irc/quakenet/newserv.git/blobdiff - depmod.pl
Merge pull request #51 from retropc/chanserv-live
[irc/quakenet/newserv.git] / depmod.pl
index d0cc916f61c302e589dc6a48515c94ab78b4b445..1004001321edb96bfa583c1c9a2c303d93f27234 100755 (executable)
--- a/depmod.pl
+++ b/depmod.pl
@@ -2,6 +2,8 @@
 
 use strict;
 
+my $verbose=0;
+
 my %definers;
 my %reqsyms;
 my %reqmods;
@@ -14,6 +16,12 @@ my @realarglist;
 open DEPENDS,">modules.dep";
 open GRAPH,">modgraph.dot";
 
+if (@ARGV) {
+  if ($ARGV[0] eq "--verbose" or $ARGV[0] eq "-v") {
+    $verbose=1;
+  }
+}
+
 for (@arglist) {
   my $modname=$_;
   open NM,"nm $modname |";
@@ -33,6 +41,8 @@ for (@arglist) {
     next if ($sym eq "_init");
     next if ($sym eq "_fini");
     next if ($sym eq "_version");
+    next if ($sym eq "__bss_start");
+    next if ($sym eq "_end");
 
     if ($type eq "U") {
       push @{$reqsyms{$modname}}, $sym;
@@ -60,6 +70,9 @@ for (@realarglist) {
     
     if (defined $provider) {
       ${reqmods{$modname}}{$provider}=1;
+      if ($verbose) {
+        print "Module $modname importing $_ from $provider\n";
+      }
     }
   }
 }
@@ -85,6 +98,9 @@ sub printdep {
 
     print DEPENDS "$modname";
     for (keys %{$reqmods{$modname}}) {
+      if (defined ${$reqmods{$_}}{$modname}) {
+        print "ERROR: circular dependency between $modname and $_\n";
+      }
       print DEPENDS " $_";
       print GRAPH "\t\"$modname\" -> \"$_\";\n";
     }