]>
jfr.im git - irc/quakenet/newserv.git/blob - depmod.pl
13 #push @arglist, "../newserv";
16 open DEPENDS
,">modules.dep";
17 open GRAPH
,">modgraph.dot";
20 if ($ARGV[0] eq "--verbose" or $ARGV[0] eq "-v") {
27 open NM
,"nm $modname |";
31 push @realarglist, $modname;
33 $reqsyms{$modname} = [];
37 next unless (/([URTB]) (\S+)/);
39 my ($type,$sym) = ($1, $2);
41 next if ($sym eq "_init");
42 next if ($sym eq "_fini");
43 next if ($sym eq "_version");
44 next if ($sym eq "__bss_start");
45 next if ($sym eq "_end");
48 push @{$reqsyms{$modname}}, $sym;
50 if (defined $definers{$sym}) {
51 print "WARNING: Multiple modules export $sym, at least $modname and $definers{$sym}\n";
53 $definers{$sym}=$modname;
61 print GRAPH
"digraph g { \n";
66 $reqmods{$modname} = {};
68 for (@{$reqsyms{$modname}}) {
69 my $provider = $definers{$_};
71 if (defined $provider) {
72 ${reqmods
{$modname}}{$provider}=1;
74 print "Module $modname importing $_ from $provider\n";
92 if (!(defined $printed{$modname})) {
95 for (keys %{$reqmods{$modname}}) {
99 print DEPENDS
"$modname";
100 for (keys %{$reqmods{$modname}}) {
101 if (defined ${$reqmods{$_}}{$modname}) {
102 print "ERROR: circular dependency between $modname and $_\n";
105 print GRAPH
"\t\"$modname\" -> \"$_\";\n";