#!/usr/bin/perl
###################################################################################
# This script is used to extract statistics from a single execution of the VTR flow
#
# Usage:
#	parse_vtr_flow.pl <parse_path> <parse_config_file>
#
# Parameters:
#	parse_path: Directory path that contains the files that will be 
#					parsed (vpr.out, odin.out, etc).
#	parse_config_file: Path to the Parse Configuration File
###################################################################################


use strict;
use Cwd;
use File::Spec;

sub expand_user_path;

if ( $#ARGV + 1 < 2 ) {
	print "usage: parse_vtr_flow.pl <path_to_output_files> <config_file>\n";
	exit(-1);
}
my $parse_path = expand_user_path(shift);
my $parse_config_file = expand_user_path(shift);

if ( !-r $parse_config_file ) {
	die "Cannot find parse file ($parse_config_file)\n";
}

open (PARSE_FILE, $parse_config_file);
my @parse_lines = <PARSE_FILE>;
close (PARSE_FILE);

my @parse_data;
my $file_to_parse;
foreach my $line (@parse_lines) {
	chomp($line);

	# Ignore comments
	if ( $line =~ /^\s*#.*$/ or $line =~ /^\s*$/ ) { next; }
	
	my @name_file_regexp = split( /;/, $line );
	push(@parse_data, [@name_file_regexp]);	
}

# attributes to parse become headings
for my $parse_entry (@parse_data) {
    print @$parse_entry[0] . "\t";
}
print "\n";

my $count = 0;
for my $parse_entry (@parse_data) {
	my $file_to_parse = "@$parse_entry[1]";
	my $file_to_parse_path =
	  File::Spec->catdir( ${parse_path}, ${file_to_parse} );
	my $default_not_found = "-1";
	if (scalar @$parse_entry > 3) {
	    $default_not_found = "@$parse_entry[3]";
    }

	$count++;	
	if ( $file_to_parse =~ /\*/ ) {
		my @files = glob($file_to_parse_path);
		if ( @files == 1 ) {
			$file_to_parse_path = $files[0];
		}
		else {
			die "Wildcard in filename ($file_to_parse) matched " . @files
			  . " files.  There must be exactly one match.\n";
		}
	}

	if ( not -r "$file_to_parse_path" ) {
		print $default_not_found;
		print "\t";
	}
	else {
		undef $/;
		open( DATA_FILE, "<$file_to_parse_path" );
		my $parse_file_lines = <DATA_FILE>;
		close(DATA_FILE);
		$/ = "\n";
		
		my $regexp = @$parse_entry[2];
		$regexp =~ s/\s+$//;

		if ( $parse_file_lines =~ m/$regexp/gm ) {
			print $1;
		}
		else {
			print $default_not_found;
		}
        # tab separation even at end of line to indicate last element
        print "\t";
	}
}
print "\n";

sub expand_user_path {
	my $str = shift;	
	$str =~ s/^~\//$ENV{"HOME"}\//;
	return $str;
}
