]>
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");
46 push @{$reqsyms{$modname}}, $sym;
48 if (defined $definers{$sym}) {
49 print "WARNING: Multiple modules export $sym, at least $modname and $definers{$sym}\n";
51 $definers{$sym}=$modname;
59 print GRAPH
"digraph g { \n";
64 $reqmods{$modname} = {};
66 for (@{$reqsyms{$modname}}) {
67 my $provider = $definers{$_};
69 if (defined $provider) {
70 ${reqmods
{$modname}}{$provider}=1;
72 print "Module $modname importing $_ from $provider\n";
90 if (!(defined $printed{$modname})) {
93 for (keys %{$reqmods{$modname}}) {
97 print DEPENDS
"$modname";
98 for (keys %{$reqmods{$modname}}) {
99 if (defined ${$reqmods{$_}}{$modname}) {
100 print "ERROR: circular dependency between $modname and $_\n";
103 print GRAPH
"\t\"$modname\" -> \"$_\";\n";