[llvm-commits] CVS: llvm/utils/GenLibDeps.pl

Reid Spencer reid at x10sys.com
Wed Jan 5 09:29:40 PST 2005



Changes in directory llvm/utils:

GenLibDeps.pl updated: 1.2 -> 1.3
---
Log message:

1. Make sure that "dot" can be found in the path
2. Fix a bug where the lib directory specified also had to be cwd
3. Weight the output so archive->archive edges are shorter
4. Generate two different graphs: one for libraries, one for objects.
5. Adjust the properties of the graphs till it looks nice.


---
Diffs of the changes:  (+30 -3)

Index: llvm/utils/GenLibDeps.pl
diff -u llvm/utils/GenLibDeps.pl:1.2 llvm/utils/GenLibDeps.pl:1.3
--- llvm/utils/GenLibDeps.pl:1.2	Thu Dec 30 17:13:12 2004
+++ llvm/utils/GenLibDeps.pl	Wed Jan  5 11:29:29 2005
@@ -12,6 +12,10 @@
 # Give first option a name.
 my $Directory = $ARGV[0];
 
+# Find the "dot" program
+chomp(my $DotPath = `which dot`);
+die "Can't find 'dot'" if (! -x "$DotPath");
+
 # Open the directory and read its contents, sorting by name and differentiating
 # by whether its a library (.a) or an object file (.o)
 opendir DIR,$Directory;
@@ -28,7 +32,7 @@
 # Gather definitions from the libraries
 foreach $lib (@libs ) {
   open DEFS, 
-    "nm -g --defined-only $lib | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
+    "nm -g --defined-only $Directory/$lib | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
   while (<DEFS>) {
     chomp($_);
     $libdefs{$_} = $lib;
@@ -39,7 +43,7 @@
 # Gather definitions from the object files.
 foreach $obj (@objs ) {
   open DEFS, 
-    "nm -g --defined-only $obj | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
+    "nm -g --defined-only $Directory/$obj | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
   while (<DEFS>) {
     chomp($_);
     $objdefs{$_} = $obj;
@@ -52,9 +56,11 @@
 # object. The <dd> provides a list of the libraries/objects it depends on.
 sub gen_one_entry {
   my $lib = $_[0];
+  my $lib_ns = $lib;
+  $lib_ns =~ s/(.*)\.[oa]/$1/;
   print "  <dt><b>$lib</b</dt><dd><ul>\n";
   open UNDEFS, 
-    "nm -u $lib | grep ' U ' | sed -e 's/         U //' | sort | uniq |";
+    "nm -u $Directory/$lib | grep ' U ' | sed -e 's/         U //' | sort | uniq |";
   open DEPENDS,
     "| sort | uniq > GenLibDeps.out";
   while (<UNDEFS>) {
@@ -75,6 +81,13 @@
   while (<DF>) {
     chomp;
     print "    <li>$_</li>\n";
+    $suffix = substr($_,length($_)-1,1);
+    $_ =~ s/(.*)\.[oa]/$1/;
+    if ($suffix eq "a") {
+      print DOT "$lib_ns -> $_ [ weight=0 ];\n";
+    } else {
+      print DOT "$lib_ns -> $_ [ weight=10];\n";
+    }
   }
   close DF;
   print "  </ul></dd>\n";
@@ -87,15 +100,29 @@
 # Print the definition list tag
 print "<dl>\n";
 
+open DOT, "| $DotPath -Tgif > libdeps.gif";
+
+print DOT "digraph LibDeps {size=\"40,15\"; ratio=\"1.33333\"; margin=\"0.25\"; rankdir=\"LR\"; mclimit=\"50.0\"; ordering=\"out\"; center=\"1\";\n";
+print DOT "node [shape=\"box\",color=\"#000088\",fillcolor=\"#FFFACD\",fontcolor=\"#5577DD\",style=\"filled\",fontsize=\"24\"];\n";
+print DOT "edge [style=\"solid\",color=\"#000088\"];\n";
 # Print libraries first
 foreach $lib (@libs) {
   gen_one_entry($lib);
 }
+print DOT "}\n";
+close DOT;
+open DOT, "| $DotPath -Tgif > objdeps.gif";
+print DOT "digraph ObjDeps {size=\"40,15\"; ratio=\"1.33333\"; margin=\"0.25\"; rankdir=\"LR\"; mclimit=\"50.0\"; ordering=\"out\"; center=\"1\";\n";
+print DOT "node [shape=\"box\",color=\"#000088\",fillcolor=\"#FFFACD\",fontcolor=\"#5577DD\",style=\"filled\",fontsize=\"24\"];\n";
+print DOT "edge [style=\"solid\",color=\"#000088\"];\n";
 
 # Print objects second
 foreach $obj (@objs) {
   gen_one_entry($obj);
 }
 
+print DOT "}\n";
+close DOT;
+
 # Print end tag of definition list element
 print "</dl>\n";






More information about the llvm-commits mailing list