Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add functions to tesh.pl
authornavarrop <navarrop@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 17 Dec 2010 11:55:38 +0000 (11:55 +0000)
committernavarrop <navarrop@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 17 Dec 2010 11:55:38 +0000 (11:55 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9286 48e7efb5-ca39-0410-a469-dd3cf9ba447f

buildtools/Cmake/tesh.pl

index 8de3293..87e6adc 100755 (executable)
@@ -15,6 +15,11 @@ my(@list1)=();
 my(@list2)=();
 my(@list3)=();
 my(@buffer)=();
 my(@list2)=();
 my(@list3)=();
 my(@buffer)=();
+my($timeout)=-1;
+my($parallel)=0;
+my($verbose)=0;
+my($encore)=0;
+my($old_buffer);
 
 #options
 do{
 
 #options
 do{
@@ -26,11 +31,11 @@ do{
                if( -e $directory) 
                {
                        chdir("$directory");
                if( -e $directory) 
                {
                        chdir("$directory");
-                       print "-- Tesh options   : Change directory to \"$directory\"\n";
+                       print "[Tesh/INFO] Change directory to \"$directory\"\n";
                }
                else
                {
                }
                else
                {
-                       die "Directory not found : \"$directory\"\n";
+                       die "[Tesh/CRITICAL] Directory not found : \"$directory\"\n";
                }
                $nb_arg++;      
        }
                }
                $nb_arg++;      
        }
@@ -40,13 +45,17 @@ do{
                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]";
                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 options   : export $ARGV[$nb_arg]=\"$ENV{$ARGV[$nb_arg]}\"\n";
+               print "[Tesh/INFO] export $ARGV[$nb_arg]=\"$ENV{$ARGV[$nb_arg]}\"\n";
                $nb_arg++;
                $nb_arg++;
        }
                $nb_arg++;
                $nb_arg++;
        }
+       elsif($ARGV[$nb_arg] =~ /^--verbose$/)
+       {
+               $verbose=1;
+       }
        else
        {
        else
        {
-               print "-- Tesh options   : Unrecognized option : $ARGV[$nb_arg]\n";
+               print "[Tesh/CRITICAL] Unrecognized option : $ARGV[$nb_arg]\n";
                $nb_arg++;
        }
 }while(($nb_arg) < $#ARGV);
                $nb_arg++;
        }
 }while(($nb_arg) < $#ARGV);
@@ -56,72 +65,190 @@ $ENV{PATH} = "$ENV{PATH}:.";
 
 #tesh file
 if(!$ARGV[$nb_arg]){die "tesh.pl <options> <teshfile.tesh>\n";}
 
 #tesh file
 if(!$ARGV[$nb_arg]){die "tesh.pl <options> <teshfile.tesh>\n";}
-print "-- Tesh load file : $ARGV[$nb_arg]\n";
+print "[Tesh/INFO] load file : $ARGV[$nb_arg]\n";
 my($file)=$ARGV[$nb_arg];
 my($file)=$ARGV[$nb_arg];
-open SH_LIGNE, $file or die "Unable to open $file. $!\n";
+open SH_LIGNE, $file or die "[Tesh/CRITICAL] Unable to open $file. $!\n";
 
 while(defined($line1=<SH_LIGNE>))
 {
 
 while(defined($line1=<SH_LIGNE>))
 {
-               if($line1 =~ /^\$ mkfile/){     #command line
-                       $line1 =~ s/\$ //g;
-                       chomp $line1;
-                       print "-- Tesh exec_line : $line1\n";
-                       $line1 =~ s/mkfile//g;
-                       `rm -f $line1`;
-                       foreach(@buffer)
-                       {
-                               `echo $_ >> $line1`;
-                       }
-                       $execline = $line1;
-                       @buffer = ();           
+       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";
                }
                }
-               elsif($line1 =~ /^\$/){         #command line
+               else
+               {
                        $ok = 1;
                        $ok = 1;
-                       $line1 =~ s/\$\{srcdir\:\=\.\}/./g;
-                       $line1 =~ s/\$SG_TEST_EXENV//g;
-                       $line1 =~ s/\$SG_EXENV_TEST//g;
-                       $line1 =~ s/\$EXEEXT//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;
-                       $execline = $line1;
-                       print "-- Tesh exec_line : $execline\n";
-                       $result=`$execline 2>&1`;
+                       $execline = "$line1  2>&1";
+                       print "[Tesh/INFO] exec_line : $execline\n";
+                       $result=`$execline`;
                        @list1 = split(/\n/,$result);
                        @list1 = split(/\n/,$result);
-                       
-               }               
-               elsif($line1 =~ /^\>/){ #expected result line
-                       if($ok == 0){die "No command line$!";}
-                       $ok1 = 1;
-                       $line1 =~ s/^\> //g;
-                       $line1 =~ s/\r//g;
-                       chomp $line1;
-                       push @list2, $line1;
                }
                }
-               elsif($line1 =~ /^\</){ #need to buffer
-                       $line1 =~ s/^\< //g;
-                       $line1 =~ s/\r//g;
-                       chomp $line1;
-                       push @buffer, $line1;
+       }
+       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";
                }
                }
-               elsif($line1 =~ /^p/){  #comment
-                       $line1 =~ s/^p //g;
-                       $line1 =~ s/\r//g;
-                       chomp $line1;
-                       print "-- Tesh comment_line :$line1\n";
+               else
+               {
+                       $parallel = 1;
+                       $execline = "$line1 2>&1";
+                       print "[Tesh/INFO] exec_line // : $execline\n";
                }
                }
-               elsif($line1 =~ /^! output sort/){      #output sort
-                       $sort=1;
+               
+       }       
+       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 =~ /^\</ or $encore==1){   #need to buffer
+               $line1 =~ s/^\< //g;
+               $line1 =~ s/\r//g;
+               chomp $line1;
+               if($line1 =~ /\\$/) # need to store this line into old_buff
+               {
+                       $encore=1;
+                       $line1 =~ s/\\$//g;
+                       $old_buffer = "$old_buffer$line1";
                }
                }
-               elsif($line1 =~ /^! include/){  #output sort
-                       die "-- Tesh need include\n";
+               else
+               {
+                       if($encore == 1)
+                       {       
+                               push @buffer, "$old_buffer$line1";
+                               $old_buffer = ();
+                               $encore = 0;                            
+                       }
+                       else
+                       {
+                               push @buffer, "$line1\n";
+                               $old_buffer = ();
+                               $encore = 0;                                    
+                       }
                }
                }
-               elsif($ok == 1 and $ok1 == 1)
+       }
+       elsif($line1 =~ /^p/){  #comment
+               $line1 =~ s/^p //g;
+               $line1 =~ s/\r//g;
+               chomp $line1;
+               print "[Tesh/INFO] comment_line :$line1\n";
+       }
+       elsif($line1 =~ /^! output sort/){      #output sort
+               print "[Tesh/INFO] output sort\n";
+               $sort=1;
+       }
+       elsif($line1 =~ /^! expect return/){    #expect sort
+               print "[Tesh/CRITICAL] expect return\n";
+               die;
+       }
+       elsif($line1 =~ /^! setenv/){   #setenv
+               $line1 =~ s/^! setenv //g;
+               $line1 =~ s/\r//g;
+               chomp $line1;
+               $line1 =~ /^(.*)=(.*)$/;
+               $ENV{$1} = $2;
+               print "[Tesh/INFO] setenv: $1=$2\n";
+       }
+       elsif($line1 =~ /^! include/){  #output sort
+               die "[Tesh/CRITICAL] need include\n";
+       }
+       elsif($line1 =~ /^! timeout/){  #timeout
+               $line1 =~ s/^! timeout //g;
+               $line1 =~ s/\r//g;
+               chomp $line1;
+               $timeout = $line1;
+               print "[Tesh/INFO] timeout   : $timeout\n";
+       }
+       elsif($ok == 1 and $ok1 == 1)
+       {
+               @buffer = ();
+               if($sort == 1)
+               {
+                       @list3 = sort @list1;
+                       @list1=();
+                       @list1=@list3;
+                       @list3=();
+                       
+                       @list3 = sort @list2;
+                       @list2=();
+                       @list2=@list3;
+                       @list3=();
+                       
+                       $sort=0;
+               }
+               while(@list1 or @list2)
+               {
+                       $line1 = shift (@list1);
+                       $line2 = shift (@list2);
+                       if($line2 and $line1)
+                       {
+                               if($line1 eq $line2){
+                                       if($verbose == 1){print "$line1\n";}
+                                       else{push @buffer, "$line1\n";}
+                                       
+                               }
+                               else
+                               {       if($verbose == 0){print @buffer};
+                                       if($line2) {print "- $line2\n"};
+                                       if($line1) {print "+ $line1\n"};
+                                       die;
+                               }
+                       }
+                       else
+                       {       if($verbose == 0){print @buffer};
+                               if($line2) {print "- $line2\n"};
+                               if($line1) {print "+ $line1\n"};
+                               die;
+                       }
+               }
+               $ok = 0;
+               $ok1= 0;
+               @list1=();
+               @list2=();
+               @buffer = ();
+               $result = ();
+       }
+}
+
+if($parallel == 1)
+{
+       $ok = 1;
+       $result=`$execline`;
+       @list1 = split(/\n/,$result);
+}
+elsif($ok == 1 and $ok1 == 1)
                {
                {
+                       @buffer = ();
                        if($sort == 1)
                        {
                                @list3 = sort @list1;
                        if($sort == 1)
                        {
                                @list3 = sort @list1;
@@ -140,33 +267,30 @@ while(defined($line1=<SH_LIGNE>))
                        {
                                $line1 = shift (@list1);
                                $line2 = shift (@list2);
                        {
                                $line1 = shift (@list1);
                                $line2 = shift (@list2);
-                               if($line1 eq $line2){}
+                               if($line2 and $line1)
+                               {
+                                       if($line1 eq $line2){
+                                               if($verbose == 1){print "$line1\n";}
+                                               else{push @buffer, "$line1\n";}
+                                               
+                                       }
+                                       else
+                                       {       if($verbose == 0){print @buffer};
+                                               if($line2) {print "- $line2\n"};
+                                               if($line1) {print "+ $line1\n"};
+                                               die;
+                                       }
+                               }
                                else
                                else
-                               {       print "- $line2\n";
-                                       print "+ $line1\n";
-                                       die;}
+                               {       if($verbose == 0){print @buffer};
+                                       if($line2) {print "- $line2\n"};
+                                       if($line1) {print "+ $line1\n"};
+                                       die;
+                               }
                        }
                        $ok = 0;
                        $ok1= 0;
                        @list1=();
                        @list2=();
                        }
                        $ok = 0;
                        $ok1= 0;
                        @list1=();
                        @list2=();
-               }
-}
-
-if($ok == 1 and $ok1 == 1)
-{
-       while(@list1 or @list2)
-       {
-               $line1 = shift (@list1);
-               $line2 = shift (@list2);
-               if($line1 eq $line2){}
-               else
-               {       print "- $line1\n";
-                       print "+ $line2\n";
-                       die;}
-       }
-       $ok = 0;
-       $ok1= 0;
-       @list1=();
-       @list2=();
+                       @buffer = ();
 }
\ No newline at end of file
 }
\ No newline at end of file