Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Answer the request as the last action on it (it will destroy it)
[simgrid.git] / buildtools / Cmake / tesh.pl
1 #! /usr/bin/perl -w
2
3 use strict;
4
5 if($#ARGV<0){die "Usage: tesh.pl <options> <teshfile.tesh>\n";}
6 my($line1);
7 my($line2);
8 my($execline);
9 my($ok)=0;
10 my($ok1)=0;
11 my($nb_arg)=0;
12 my($result);
13 my(@list1)=();
14 my(@list2)=();
15
16 #options
17 do{
18         if($ARGV[$nb_arg] =~ /^--cd$/)
19         {
20                 $nb_arg++;
21                 if(!$ARGV[$nb_arg] or $ARGV[$nb_arg] =~ /^--/){die "Usage: tesh.pl --cd <directory>\n";}
22                 my($directory)=$ARGV[$nb_arg];
23                 if( -e $directory) 
24                 {
25                         chdir("$directory");
26                         print "-- Tesh options   : Change directory to \"$directory\"\n";
27                 }
28                 else
29                 {
30                         die "Directory not found : \"$directory\"\n";
31                 }
32                 $nb_arg++;      
33         }
34         elsif($ARGV[$nb_arg] =~ /^--setenv$/)
35         {
36                 $nb_arg++;
37                 if(!$ARGV[$nb_arg] or $ARGV[$nb_arg] =~ /^--/){die "Usage: tesh.pl --setenv environment_variable\n";}
38                 if(!$ARGV[$nb_arg+1] or $ARGV[$nb_arg+1] =~ /^--/){die "Usage: tesh.pl --setenv environment_variable\n";}
39                 $ENV{$ARGV[$nb_arg]} = "$ENV{$ARGV[$nb_arg]}:$ARGV[$nb_arg+1]";
40                 print "-- Tesh options   : export $ARGV[$nb_arg]=\"$ENV{$ARGV[$nb_arg]}\"\n";
41                 $nb_arg++;
42                 $nb_arg++;
43         }
44         else
45         {
46                 print "-- Tesh options   : Unrecognized option : $ARGV[$nb_arg]\n";
47                 $nb_arg++;
48         }
49 }while(($nb_arg) < $#ARGV);
50
51 #Add current directory to path
52 $ENV{PATH} = "$ENV{PATH}:.";
53
54 #tesh file
55 if(!$ARGV[$nb_arg]){die "tesh.pl <options> <teshfile.tesh>\n";}
56 print "-- Tesh load file : $ARGV[$nb_arg]\n";
57 my($file)=$ARGV[$nb_arg];
58 open SH_LIGNE, $file or die "Unable to open $file. $!\n";
59 print "\n";
60 while(defined($line1=<SH_LIGNE>))
61 {
62                 if($line1 =~ /^\$/){    #command line
63                         $ok = 1;
64                         $line1 =~ s/\$\{srcdir\:\=\.\}/./g;
65                         $line1 =~ s/\$SG_TEST_EXENV//g;
66                         $line1 =~ s/\$SG_EXENV_TEST//g;
67                         $line1 =~ s/\$EXEEXT//g;
68                         $line1 =~ s/\${EXEEXT:=}//g;
69                         $line1 =~ s/^\$\ *//g;
70                         $line1 =~ s/^.\/lua/lua/g;
71                         $line1 =~ s/^.\/ruby/ruby/g;
72                         $line1 =~ s/^.\///g;
73                         $line1 =~ s/\(%i:%P@%h\)/\\\(%i:%P@%h\\\)/g;
74                         chomp $line1;
75                         $execline = $line1;
76                         print "-- Tesh exec_line : $execline\n";
77                         $result=`$execline 2>&1`;
78                         @list1 = split(/\n/,$result);
79                         
80                 }               
81                 elsif($line1 =~ /^\>/){ #expected result line
82                         if($ok == 0){die "No command line$!";}
83                         $ok1 = 1;
84                         $line1 =~ s/^\> //g;
85                         $line1 =~ s/\r//g;
86                         chomp $line1;
87                         push @list2, $line1;
88                 }
89                 elsif($ok == 1 and $ok1 == 1)
90                 {
91                         while(@list1 or @list2)
92                         {
93                                 $line1 = shift (@list1);
94                                 $line2 = shift (@list2);
95                                 if($line1 eq $line2){}
96                                 else
97                                 {       print "- $line1\n";
98                                         print "+ $line2\n";
99                                         die;}
100                         }
101                         $ok = 0;
102                         $ok1= 0;
103                         @list1=();
104                         @list2=();
105                 }
106 }
107
108 if($ok == 1 and $ok1 == 1)
109 {
110         while(@list1 or @list2)
111         {
112                 $line1 = shift (@list1);
113                 $line2 = shift (@list2);
114                 if($line1 eq $line2){}
115                 else
116                 {       print "- $line1\n";
117                         print "+ $line2\n";
118                         die;}
119         }
120         $ok = 0;
121         $ok1= 0;
122         @list1=();
123         @list2=();
124 }