#/usr/local/bin/perl
#
# exectools.pl
#######################################################################
# This software has been created by Genome Research Limited (GRL).    # 
# GRL hereby grants permission to use, copy, modify and distribute    # 
# this software and its documentation for non-commercial purposes     # 
# without fee at the user's own risk on the basis set out below.      #
# GRL neither undertakes nor accepts any duty whether contractual or  # 
# otherwise in connection with the software, its use or the use of    # 
# any derivative, and makes no representations or warranties, express #
# or implied, concerning the software, its suitability, fitness for   #
# a particular purpose or non-infringement.                           #
# In no event shall the authors of the software or GRL be responsible # 
# or liable for any loss or damage whatsoever arising in any way      # 
# directly or indirectly out of the use of this software or its       # 
# derivatives, even if advised of the possibility of such damage.     #
# Our software can be freely distributed under the conditions set out # 
# above, and must contain this copyright notice.                      #
#######################################################################


#####################################################
# functions Used for wrapping up system calls
#####################################################

#####################################################
# execute( $command, @files )
#
# Uses system to run $command, checks for exit error status and for the existence of @files
# If LOG is defined then writes a message to it
#####################################################

sub execute 
{

    my($exec,@outfiles) = @_;
    my($name);

    print STDERR "Running: $exec\n";

    system($exec) && die "Failed: $exec: $!\n";

    $name = $exec;

    if ( defined(@outfiles) )
    {
	foreach $output (@outfiles)
	{
	    ( ! defined($output) ) || (-s "$output")  || die "$output empty\n";
	    print LOG "$name produced $output\n" if ( -w LOG );
	}
    }
}

#####################################################
# Execute a process and catch the standard output in a string which is returned
#####################################################

sub execute_catch
{
    my($exec,@outfiles) = @_;
    my($name);
    my $out;

    print STDERR "Running: $exec\n";

    $out = `$exec`;
    $? && die "Failed: $exec: $!\n";

    $name = $exec;

    if ( defined(@outfiles) )
    {
	foreach $output (@outfiles)
	{
	    ( ! defined($output) ) || (-s "$output")  || die "$output empty\n";
	    print LOG "$name produced $output\n" if ( -w LOG );
	}
    }
    $out;
}

1;
