#! /usr/bin/perl -w
#
# Copyright 1999, 2000, 2001 Patrik Stridvall
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#

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 |") || die "Cannot execute command $command: $!";

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();
