* configure.ac: New switch for disabling -O2 (--disable-optimizations).
[cacao.git] / contrib / log2xml.pl
old mode 100755 (executable)
new mode 100644 (file)
index 214d776..89e83cf
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 # ======================================================================
-# log2xml - This script translates cacao -verbosecall ouput into a
+# log2xml - This script translates cacao -verbosecall output into a
 #           more readable XML format. It also separates the output of
 #           different threads and is able to ignore commonly called
 #           (uninteresting) methods.
 # You may want to edit the opt_ignore options below.
 #
 # Author  : Edwin Steiner
-# Revision: $Id: log2xml.pl 2305 2005-04-14 20:10:20Z edwin $
+# Revision:
 #
 # $Log$
+# Revision 1.5  2005/04/15 09:33:34  edwin
+# preserve indentation of log text
+#
+# Revision 1.4  2005/04/15 09:06:54  edwin
+# output more valid xml
+#
+# Revision 1.3  2005/04/14 20:11:04  edwin
+# typo
+#
 # Revision 1.2  2005/04/14 20:10:20  edwin
 # disabled debug print, added vim boilerplate
 #
@@ -141,6 +150,17 @@ sub write_xml_leave ( $$ )
        print $file "</call>\n";
 }
 
+sub write_xml_never_returns ( $$ )
+{
+       my ($thread,$node) = @_;
+
+       my $file = $files{$thread};
+       print $file '<never_returns';
+       print $file ' name="' . quote($node->{NAME}) . '"';
+       print $file "/>\n";
+       print $file "</call>\n";
+}
+
 sub write_xml_node ( $$ )
 {
        my ($thread,$node) = @_;
@@ -169,11 +189,13 @@ sub write_xml_header ( $ )
 {
        my ($file) = @_;
        print $file '<?xml version="1.0"?>'."\n";
+       print $file "<thread>\n";
 }
 
 sub write_xml_end ( $ )
 {
        my ($file) = @_;
+       print $file "</thread>\n";
 }
 
 # ======================================================================
@@ -398,8 +420,8 @@ sub main
                my $lastthread;
                while (<>) {
                        chomp($_);
-                       if (/LOG: \[(\S+)\]\s+(.*)/) {
-                               my ($thread,$log) = ($1,$2);
+                       if (/LOG: \[(\S+)\](\s*)(.*)/) {
+                               my ($thread,$space,$log) = ($1,$2,$3);
                                thread_register($thread);
                                $lastthread = $thread;
                                if ($log =~ /(1st_call|called|finished):\s*(.*)/) {
@@ -409,7 +431,7 @@ sub main
                                        process_exception($thread,$1,$2);
                                }
                                else {
-                                       process_text($thread,$log);
+                                       process_text($thread,$space.$log);
                                }
                        }
                        else {
@@ -437,7 +459,14 @@ sub main
                                write_xml_frame($thread,$top);
                                $ign--;
                    }
+                       pop @{$stacks{$thread}} for 1..$ignore_level{$thread};
+               }
+               while (scalar @{$stacks{$thread}} > 1) {
+                               my $top = $stacks{$thread}->[-1];
+                               write_xml_never_returns($thread,$top);
+                               pop @{$stacks{$thread}};
                }
+               write_xml_end($files{$thread});
                $files{$thread}->close();
        }
        print STDERR "processed $. lines\n";