xref: /qemu/scripts/cleanup-trace-events.pl (revision f7dc89c3)
1b7d5a9c2SKamil Rytarowski#!/usr/bin/env perl
2f0c03c8cSMarkus Armbruster# Copyright (C) 2013 Red Hat, Inc.
3f0c03c8cSMarkus Armbruster#
4f0c03c8cSMarkus Armbruster# Authors:
5f0c03c8cSMarkus Armbruster#  Markus Armbruster <armbru@redhat.com>
6f0c03c8cSMarkus Armbruster#
7f0c03c8cSMarkus Armbruster# This work is licensed under the terms of the GNU GPL, version 2 or
8f0c03c8cSMarkus Armbruster# later.  See the COPYING file in the top-level directory.
9f0c03c8cSMarkus Armbruster
10f0c03c8cSMarkus Armbruster# Usage: cleanup-trace-events.pl trace-events
11f0c03c8cSMarkus Armbruster#
12f0c03c8cSMarkus Armbruster# Print cleaned up trace-events to standard output.
13f0c03c8cSMarkus Armbruster
14f0c03c8cSMarkus Armbrusteruse warnings;
15f0c03c8cSMarkus Armbrusteruse strict;
16a44cf524SMarkus Armbrusteruse File::Basename;
17f0c03c8cSMarkus Armbruster
18*f7dc89c3SMarkus Armbrustermy @files = ();
19*f7dc89c3SMarkus Armbrustermy $events = '';
20f0c03c8cSMarkus Armbrustermy %seen = ();
21f0c03c8cSMarkus Armbruster
22f0c03c8cSMarkus Armbrustersub out {
23*f7dc89c3SMarkus Armbruster    print sort @files;
24*f7dc89c3SMarkus Armbruster    print $events;
25*f7dc89c3SMarkus Armbruster    @files = ();
26*f7dc89c3SMarkus Armbruster    $events = '';
27f0c03c8cSMarkus Armbruster    %seen = ();
28f0c03c8cSMarkus Armbruster}
29f0c03c8cSMarkus Armbruster
30a44cf524SMarkus Armbruster$#ARGV == 0 or die "usage: $0 FILE";
31a44cf524SMarkus Armbrustermy $in = $ARGV[0];
32a44cf524SMarkus Armbrustermy $dir = dirname($in);
33a44cf524SMarkus Armbrusteropen(IN, $in) or die "open $in: $!";
34a44cf524SMarkus Armbrusterchdir($dir) or die "chdir $dir: $!";
35a44cf524SMarkus Armbruster
36a44cf524SMarkus Armbrusterwhile (<IN>) {
37164e7dd7SMarkus Armbruster    if (/^(disable |(tcg) |(vcpu) )*([a-z_0-9]+)\(/i) {
38164e7dd7SMarkus Armbruster        my $pat = "trace_$4";
39164e7dd7SMarkus Armbruster        $pat .= '_tcg' if defined $2;
40164e7dd7SMarkus Armbruster        open GREP, '-|', 'git', 'grep', '-lw',
41164e7dd7SMarkus Armbruster	    defined $3 ? () : ('--max-depth', '1'),
42164e7dd7SMarkus Armbruster	    $pat
43f0c03c8cSMarkus Armbruster            or die "run git grep: $!";
44a44cf524SMarkus Armbruster        while (my $fname = <GREP>) {
45f0c03c8cSMarkus Armbruster            chomp $fname;
46f0c03c8cSMarkus Armbruster            next if $seen{$fname} || $fname eq 'trace-events';
47f0c03c8cSMarkus Armbruster            $seen{$fname} = 1;
48*f7dc89c3SMarkus Armbruster            push @files, "# $fname\n";
49f0c03c8cSMarkus Armbruster        }
50f0c03c8cSMarkus Armbruster        unless (close GREP) {
51f0c03c8cSMarkus Armbruster            die "close git grep: $!"
52f0c03c8cSMarkus Armbruster                if $!;
53f0c03c8cSMarkus Armbruster            next;
54f0c03c8cSMarkus Armbruster        }
55f0c03c8cSMarkus Armbruster    } elsif (/^# ([^ ]*\.[ch])$/) {
56f0c03c8cSMarkus Armbruster        out;
57f0c03c8cSMarkus Armbruster        next;
58f0c03c8cSMarkus Armbruster    } elsif (!/^#|^$/) {
59f0c03c8cSMarkus Armbruster        warn "unintelligible line";
60f0c03c8cSMarkus Armbruster    }
61*f7dc89c3SMarkus Armbruster    $events .= $_;
62f0c03c8cSMarkus Armbruster}
63f0c03c8cSMarkus Armbruster
64f0c03c8cSMarkus Armbrusterout;
65a44cf524SMarkus Armbrusterclose(IN) or die "close $in: $!";
66