1#!/usr/bin/perl 
2# 
3# Copyright Martin J. Bligh (mbligh@mbligh.org), 2006
4
5($file, $y_label, $columns, $title) = @ARGV;
6die unless (-f $file);
7die unless ($y_label);
8die unless ($columns =~ /^1:\d+/);
9
10# print " ++++++ plotgraph $file\n";
11plotgraph($file, $y_label, $columns, $title);
12# print " ++++++ plotgraph\n";
13
14# First column must be kernel count, second kernel version, third is job number
15# $columns spec is 1:y-value:y-stddev
16sub plotgraph {
17    my ($file, $y_label, $columns, $title) = @_;
18    my @xtics;
19
20    if (!$title) {
21        $title = $file;
22        $title =~ s#.*/##;
23    }
24    open (INDATA, $file);
25    open (DATA_MAIN, "> ${file}.main");
26    open (DATA_MM, "> ${file}.mm");
27    open (DATA_OTHER, "> ${file}.other");
28    my $count;
29    while ($data = <INDATA>) {
30        chomp $data;
31        ($count, my $version, my $job) = split (/\s+/, $data);
32        $short_ver = $version;
33        $short_ver =~ s/\+.*/+p$job/;
34        push @xtics, "\"$short_ver\" $count";
35        if ($version =~ /^2\.\d+\.\d+(\.\d+|-rc\d+)?(-git\d+)?$/) {
36            print DATA_MAIN "$data\n";
37            $plot_main = "\"${file}.main\" using $columns title \"mainline\"";
38        } elsif ($version =~ /^2\.\d+\.\d+(-rc\d+)?-mm\d+$/) {
39            print DATA_MM "$data\n";
40            $plot_mm = "\"${file}.mm\" using $columns title \"-mm\"";
41        } else {
42            print DATA_OTHER "$data\n";
43            $plot_other = "\"${file}.other\" using $columns title \"other\"";
44        }
45    }
46    close (INDATA);
47    close (DATA_MAIN);
48    close (DATA_MM);
49    close (DATA_OTHER);
50
51    die unless ($count > 0);
52    $x_res = $count * 12;
53    $y_res = 900;
54    push @plots, $plot_main if ($plot_main);
55    push @plots, $plot_mm if ($plot_mm);
56    push @plots, $plot_other if ($plot_other);
57    $plots = join (',', @plots);
58
59    open (GNUPLOT, "> ${file}.gnuplot");
60    # print "MACHINE: $machine\n";
61    print GNUPLOT "set terminal png size $x_res,$y_res\n";
62    print GNUPLOT "set key below\n";
63    print GNUPLOT "set title \"$title\"\n";
64    print GNUPLOT "set xlabel \"Kernel\"\n";
65    print GNUPLOT "set ylabel \"${y_label}\"\n";
66    print GNUPLOT "set output \"${file}.png\"\n";
67    print GNUPLOT "set style data yerrorlines\n";
68    print GNUPLOT "set grid\n";
69    $xtics = join ',', @xtics;
70    print GNUPLOT "\nset xtics rotate (${xtics})\n\n";
71    print GNUPLOT "plot $plots\n";
72    print GNUPLOT "replot";
73    close (GNUPLOT);
74    `/usr/bin/gnuplot ${file}.gnuplot`;
75    `chmod 644 ${file}.gnuplot`;
76    `chmod 644 ${file}.png`;
77}
78