X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f1be35ba7d6cb89619fe933cbd5bfdd10c611948..363ae066badd453c806244ee48a0f18da4643261:/buildtools/Cmake/tesh.pl diff --git a/buildtools/Cmake/tesh.pl b/buildtools/Cmake/tesh.pl old mode 100644 new mode 100755 index bd20f0cccc..87e6adc2e0 --- a/buildtools/Cmake/tesh.pl +++ b/buildtools/Cmake/tesh.pl @@ -1,62 +1,296 @@ -#!perl -w -use strict; - -if($#ARGV!=1){die "Usage: perl tesh.pl \n";} -my($directory)=$ARGV[0]; -my($file)=$ARGV[1]; -my($line1); -my($line2); -my($execline); -my($ok)=0; -chdir("$directory"); -print "Change directory to \"$directory\"\n"; -open SH_LIGNE, $file or die "Unable to open $file. $!\n"; - -while(defined($line1=)) -{ - if($line1 =~ /^\$/){ #command line - $ok = 1; - $line1 =~ s/\$\{srcdir\:\=\.\}/./g; - $line1 =~ s/\$SG_TEST_EXENV//g; - $line1 =~ s/\$SG_EXENV_TEST//g; - $line1 =~ s/\$EXEEXT/.exe/g; - $line1 =~ s/\${EXEEXT:=}//g; - $line1 =~ s/^\$\ *//g; - $line1 =~ s/^.\/lua/lua/g; - $line1 =~ s/^.\/ruby/ruby/g; - chomp $line1; - $execline = $line1; - print "$execline\n"; - system "$execline 1>output_tesh.txt 2>output_tesh_err.txt"; - close(FILE_ERR); - close(FILE); - open (FILE, "output_tesh.txt"); - open (FILE_ERR, "output_tesh_err.txt");} - - if($line1 =~ /^\>/){ #expected result line - if($ok == 0){die "No command line$!";} - $line1 =~ s/^\> //g; - $line1 =~ s/\r//g; - chomp $line1; - - if($line1 =~ /^.*\[.*\].*\[.*\/INFO\].*$/){if(!defined($line2=)){die;}}elsif($line1 =~ /^.*\[.*\].*\[.*\/WARNING\].*$/){if(!defined($line2=)){die;}} - elsif($line1 =~ /^.*\[.*\].*\[.*\/CRITICAL\].*$/){if(!defined($line2=)){die;}} - elsif($line1 =~ /^.*\[.*\].*\[.*\/DEBUG\].*$/){if(!defined($line2=)){die;}} - else{if(!defined($line2=)){die;}} - - $line2 =~ s/\r//g; - chomp $line2; - - if($line2 eq $line1){} - else - { print "- $line1\n"; - print "+ $line2\n"; - die;}} -} -if($ok == 1){ - print "Test of \"$file\" OK\n"; - $ok = 0;} - -close(SH_LIGNE); -close(FILE_ERR); -close(FILE); \ No newline at end of file +#! /usr/bin/perl -w + +use strict; + +if($#ARGV<0){die "Usage: tesh.pl \n";} +my($line1); +my($line2); +my($execline); +my($ok)=0; +my($ok1)=0; +my($sort)=0; +my($nb_arg)=0; +my($result); +my(@list1)=(); +my(@list2)=(); +my(@list3)=(); +my(@buffer)=(); +my($timeout)=-1; +my($parallel)=0; +my($verbose)=0; +my($encore)=0; +my($old_buffer); + +#options +do{ + if($ARGV[$nb_arg] =~ /^--cd$/) + { + $nb_arg++; + if(!$ARGV[$nb_arg] or $ARGV[$nb_arg] =~ /^--/){die "Usage: tesh.pl --cd \n";} + my($directory)=$ARGV[$nb_arg]; + if( -e $directory) + { + chdir("$directory"); + print "[Tesh/INFO] Change directory to \"$directory\"\n"; + } + else + { + die "[Tesh/CRITICAL] Directory not found : \"$directory\"\n"; + } + $nb_arg++; + } + elsif($ARGV[$nb_arg] =~ /^--setenv$/) + { + $nb_arg++; + if(!$ARGV[$nb_arg] or $ARGV[$nb_arg] =~ /^--/){die "Usage: tesh.pl --setenv environment_variable\n";} + if(!$ARGV[$nb_arg+1] or $ARGV[$nb_arg+1] =~ /^--/){die "Usage: tesh.pl --setenv environment_variable\n";} + $ENV{$ARGV[$nb_arg]} = "$ENV{$ARGV[$nb_arg]}:$ARGV[$nb_arg+1]"; + print "[Tesh/INFO] export $ARGV[$nb_arg]=\"$ENV{$ARGV[$nb_arg]}\"\n"; + $nb_arg++; + $nb_arg++; + } + elsif($ARGV[$nb_arg] =~ /^--verbose$/) + { + $verbose=1; + } + else + { + print "[Tesh/CRITICAL] Unrecognized option : $ARGV[$nb_arg]\n"; + $nb_arg++; + } +}while(($nb_arg) < $#ARGV); + +#Add current directory to path +$ENV{PATH} = "$ENV{PATH}:."; + +#tesh file +if(!$ARGV[$nb_arg]){die "tesh.pl \n";} +print "[Tesh/INFO] load file : $ARGV[$nb_arg]\n"; +my($file)=$ARGV[$nb_arg]; +open SH_LIGNE, $file or die "[Tesh/CRITICAL] Unable to open $file. $!\n"; + +while(defined($line1=)) +{ + if($line1 =~ /^\$ /){ #command line + $line1 =~ s/\$\{srcdir\:\=\.\}/./g; + $line1 =~ s/\${EXEEXT:=}//g; + $line1 =~ s/^\$\ *//g; + $line1 =~ s/^.\/lua/lua/g; + $line1 =~ s/^.\/ruby/ruby/g; + $line1 =~ s/^.\///g; + $line1 =~ s/\(%i:%P@%h\)/\\\(%i:%P@%h\\\)/g; + chomp $line1; + if(@list1){ + print "[Tesh/CRITICAL] Old result : @list1"; + print "[Tesh/CRITICAL] Previous result not check!"; + die;} + if($parallel == 1) + { + $execline = "$execline \& $line1 2>&1"; + print "[Tesh/INFO] exec_line // : $execline\n"; + } + else + { + $ok = 1; + $execline = "$line1 2>&1"; + print "[Tesh/INFO] exec_line : $execline\n"; + $result=`$execline`; + @list1 = split(/\n/,$result); + } + } + elsif($line1 =~ /^\& /){ # parallel command line + $line1 =~ s/\$\{srcdir\:\=\.\}/./g; + $line1 =~ s/\${EXEEXT:=}//g; + $line1 =~ s/^\& //g; + $line1 =~ s/^.\/lua/lua/g; + $line1 =~ s/^.\/ruby/ruby/g; + $line1 =~ s/^.\///g; + $line1 =~ s/\(%i:%P@%h\)/\\\(%i:%P@%h\\\)/g; + chomp $line1; + if(@list1){ + print "Old result : @list1"; + die "Previous result not check!";} + if($parallel == 1) + { + $execline = "$execline \& $line1 2>&1"; + print "[Tesh/INFO] exec_line // : $execline\n"; + } + else + { + $parallel = 1; + $execline = "$line1 2>&1"; + print "[Tesh/INFO] exec_line // : $execline\n"; + } + + } + elsif($line1 =~ /^\>/){ #expected result line + if($ok == 0 and $parallel== 0){die "No command line\n";} + $ok1 = 1; + $line1 =~ s/^\> //g; + $line1 =~ s/\r//g; + chomp $line1; + push @list2, $line1; + } + elsif($line1 =~ /^\