X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/59a223efb7bf8ddf95af4850d0ba77488c03bf13..980c7d5a11260a0502b12f14f1ee62aff51a8e6f:/tools/tesh/tesh.pl diff --git a/tools/tesh/tesh.pl b/tools/tesh/tesh.pl index 48f5d1c782..7e16cf8ffa 100755 --- a/tools/tesh/tesh.pl +++ b/tools/tesh/tesh.pl @@ -19,8 +19,6 @@ tesh -- testing shell B [I] I =cut -my($bindir)="."; -my($srcdir)="."; my($timeout)=0; my($time_to_wait)=0; my $path = $0; @@ -51,10 +49,10 @@ use English; ## Portability bits for windows ## -use constant RUNNING_ON_WINDOWS => ($^O =~ /^(?:mswin|dos|os2)/oi); +use constant RUNNING_ON_WINDOWS => ($OSNAME =~ /^(?:mswin|dos|os2)/oi); use POSIX qw(:sys_wait_h WIFEXITED WIFSIGNALED WIFSTOPPED WEXITSTATUS WTERMSIG WSTOPSIG :signal_h SIGINT SIGTERM SIGKILL SIGABRT SIGSEGV); -# These are not implemented on windows (see bug 6798 and 6470) +# These are not implemented on windows BEGIN { if (RUNNING_ON_WINDOWS) { *WIFEXITED = sub { not $_[0] & 127 }; @@ -141,7 +139,6 @@ sub get_options { $tesh_file = pop @ARGV; # temporary arrays for GetOption - my @verbose = (); my @cfg; my $log; # ignored @@ -149,7 +146,6 @@ sub get_options { my %opt = ( "help" => 0, "debug" => 0, - "verbose" => 0 ); Getopt::Long::config('bundling', 'no_getopt_compat', 'no_auto_abbrev'); @@ -157,7 +153,6 @@ sub get_options { GetOptions( 'help|h' => \$opt{'help'}, - 'verbose|v' => \@verbose, 'debug|d' => \$opt{"debug"}, 'difftool=s' => \$diff_tool, @@ -189,7 +184,6 @@ sub get_options { print "Test suite `$tesh_name'\n"; } - $opt{'verbose'} = scalar @verbose; foreach (@cfg) { $opt{'cfg'} .= " --cfg=$_"; } @@ -201,18 +195,9 @@ my %opts = get_options(@ARGV); ## ## File parsing ## -my($nb_arg)=0; -my($old_buffer); -my($linebis); -my($SIGABRT)=0; -my($verbose)=0; my($return)=-1; -my($pid); -my($result); -my($result_err); my($forked); my($config)=""; -my($tesh_command)=0; my(@buffer_tesh)=(); ########################################################################### @@ -290,7 +275,7 @@ sub exec_cmd { close CHILD_IN; # if timeout specified, fork and kill executing child at the end of timeout - if (defined($cmd{'timeout'}) or defined($opts{'timeout'})){ + if (not $cmd{'background'} and (defined($cmd{'timeout'}) or defined($opts{'timeout'}))){ $time_to_wait= defined($cmd{'timeout'}) ? $cmd{'timeout'} : $opts{'timeout'}; $forked = fork(); $timeout=-1; @@ -302,19 +287,13 @@ sub exec_cmd { # Cleanup the executing child, and kill the timeouter brother on need $cmd{'return'} = 0 unless defined($cmd{'return'}); - if($cmd{'background'} != 1){ + if ($cmd{'background'} != 1) { waitpid ($cmd{'pid'}, 0); $cmd{'gotret'} = exit_status($?); parse_out(\%cmd); - }else{ + } else { # & commands, which will be handled at the end push @bg_cmds, \%cmd; - # no timeout for background commands - if($forked){ - kill(SIGKILL, $forked); - $timeout=0; - $forked=0; - } } } @@ -451,36 +430,26 @@ sub mkfile_cmd { } # parse tesh file -#my $teshfile=$tesh_file; -#$teshfile=~ s{\.[^.]+$}{}; - -unless($tesh_file eq "(stdin)"){ - open TESH_FILE, $tesh_file or die "[Tesh/CRITICAL] Unable to open $tesh_file $!\n"; +my $infh; # The file descriptor from which we should read the teshfile +if($tesh_file eq "(stdin)"){ + $infh = *STDIN; +} else { + open $infh, $tesh_file + or die "[Tesh/CRITICAL] Unable to open $tesh_file $!\n"; } my %cmd; # everything about the next command to run my $line_num=0; -my $finished =0; -LINE: while (not $finished and not $error) { - my $line; - - - if ($tesh_file ne "(stdin)" and !defined($line=)){ - $finished=1; - next LINE; - }elsif ($tesh_file eq "(stdin)" and !defined($line=<>)){ - $finished=1; - next LINE; - } - - $line_num++; +LINE: while (defined(my $line=<$infh>) and not $error) { chomp $line; $line =~ s/\r//g; + + $line_num++; print "[TESH/debug] $line_num: $line\n" if $opts{'debug'}; my $next; # deal with line continuations while ($line =~ /^(.*?)\\$/) { - $next=; + $next=<$infh>; die "[TESH/CRITICAL] Continued line at end of file\n" unless defined($next); $line_num++; @@ -627,13 +596,13 @@ print "hey\n"; die "[TESH/CRITICAL] parse error: $line\n"; } if($forked){ - kill(SIGKILL, $forked); + kill('KILL', $forked); $timeout=0; } - } - +# We're done reading the input file +close $infh unless ($tesh_file eq "(stdin)"); # Deal with last command if (defined($cmd{'cmd'})) { @@ -643,7 +612,7 @@ if (defined($cmd{'cmd'})) { if($forked){ - kill(SIGKILL, $forked); + kill('KILL', $forked); $timeout=0; }