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