#! /usr/bin/perl -w

use strict;

BEGIN {
    $0 =~ m%^(.*?/?tools)/winapi/make_filter$%;
    require "$1/winapi/setup.pm";
}

use config qw(
    &file_absolutize &file_normalize
    $current_dir $wine_dir
);
use output qw($output);
use make_filter_options qw($options);

use make_parser qw($directory $tool $file $line $message);

if($options->progress) {
    $output->enable_progress;
} else {
    $output->disable_progress;
}

########################################################################
# main
########################################################################

my $command = $options->make . " " . join(" ", $options->arguments);
open(IN, "($command) 2>&1 |");

while(<IN>) {    
    chomp;

    if(!&make_parser::line($_)) {
	next;
    }

    if($message) {
	if($file && $line) {
	    if($directory && $directory ne "." && $file !~ m%^/%) {
		$output->write(&file_normalize("$directory/$file") . ":$line: $message\n");
	    } else {
		$output->write("$file:$line: $message\n");
	    }
	} elsif($file) {
	    if($directory && $directory ne "." && $file !~ m%^/%) {
		$output->write(&file_normalize("$directory/$file") . ": $message\n");
	    } else {
		$output->write("$file: $message\n");
	    }
	} else {
	    if($directory && $directory ne ".") {
		$output->write("$directory: $tool: $message\n");
	    } elsif($tool) {
		$output->write("$tool: $message\n");
	    } else {
		$output->write("$message\n");
	    }
	}
    } elsif($tool eq "make") {
	if($directory && $directory ne ".") {
	    $output->progress("$directory: make");
	}
    }
}

close(IN);

$output->hide_progress();
