Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reindent generate_memcheck_tests.pl.
[simgrid.git] / buildtools / Cmake / generate_memcheck_tests.pl
1 #!/usr/bin/perl -w
2 use strict;
3
4 # input file = AddTest.txt
5
6 if ( $#ARGV != 1 ) {
7     die "Usage: generate_memcheck_tests.pl <CMAKE_HOME_DIRECTORY> AddTests.cmake\n";
8 }
9
10 my ($proj_dir) = $ARGV[0];
11 open MAKETEST, $ARGV[1] or die "Unable to open $ARGV[1]. $!\n";
12
13 my (@test_list) = ();
14 my ($nb_test)   = 0;
15 my ($line);
16 my ($path);
17 my ($dump) = 0;
18 my ($srcdir);
19 my ($bindir);
20 my ($tesh_file);
21 my ($config_var);
22 my ($name_test);
23
24 while ( defined( $line = <MAKETEST> ) ) {
25     chomp $line;
26     if ( $line =~ /BEGIN TESH TESTS/ ) {
27         $dump = 1;
28         next;
29     }
30     if ( $line =~ /END TESH TESTS/ ) {
31         $dump = 0;
32         last;
33     }
34     if ($dump) {
35         if ( $line =~ /ADD_TEST/ ) {
36             $srcdir     = "";
37             $bindir     = "";
38             $config_var = "";
39             $path       = "";
40             $nb_test++;
41             $tesh_file = "";
42             $name_test = "";
43
44             if ( $line =~ /ADD_TEST\(([\S]+)/ ) {
45                 $name_test = ($1);
46             }
47             if ( $line =~ /--cfg\s*\t*(\S*)/ ) {
48                 $config_var = "--cfg=$1 $config_var";
49             }
50             if ( $line =~ /--cd\s*(\S+)/ ) {
51                 $path = ($1);
52                 $path =~ s/\"//g;
53
54                 #$path =~ s/\$\{CMAKE_BINARY_DIR\}/$proj_dir/g;
55                 $path =~ s/\$\{CMAKE_HOME_DIRECTORY\}/$proj_dir/g;
56             }
57             if ( $line =~ /--setenv\s*\t*(\S*)\=(\S*)/ ) {
58                 my ( $env_var, $value_var ) = ( $1, $2 );
59                 $value_var =~ s/\$\{CMAKE_BINARY_DIR\}/$proj_dir/g;
60                 $value_var =~ s/\$\{CMAKE_HOME_DIRECTORY\}/$proj_dir/g;
61                 if ( $env_var =~ /srcdir/ ) {
62                     $srcdir = $value_var;
63                 }
64                 if ( $env_var =~ /bindir/ ) {
65                     $bindir = $value_var;
66                 }
67             }
68             if ( $line =~ /([\S]+)[)]$/ ) {
69                 $tesh_file = ($1);
70                 $tesh_file =~ s/\${CMAKE_HOME_DIRECTORY}/$proj_dir/g;
71                 if ( -e "$tesh_file" ) {
72
73                 }
74                 elsif ( -e "$path/$tesh_file" ) {
75                     $tesh_file = "$path\/$tesh_file";
76                 }
77                 else {
78                     print "tesh_file : $tesh_file not exists!\n";
79                     print "tesh_file : $path\/$tesh_file not exists!\n";
80                     die;
81                 }
82             }
83
84             if (0) {
85                 print "test_name = $name_test\n";
86                 print "$config_var\n";
87                 print "path = $path\n";
88                 print "srcdir=$srcdir\n";
89                 print "bindir=$bindir\n";
90                 print "tesh_file = $tesh_file\n";
91                 print "\n\n";
92             }
93
94             my ($count)        = 0;
95             my ($count_first)  = 0;
96             my ($count_second) = 0;
97             open TESH_FILE, $tesh_file or die "Unable to open $tesh_file $!\n";
98             my ($l);
99             while ( defined( $l = <TESH_FILE> ) ) {
100                 chomp $l;
101                 if ( $l =~ /^\$ (.*)$/ ) {
102                     my ($command) = $1;
103                     $command =~ s/\${srcdir:=.}/$srcdir/g;
104                     $command =~ s/\${bindir:=.}/$bindir/g;
105                     $command =~ s/\${EXEEXT:=}//g;
106                     $command =~ s/\$SG_TEST_EXENV //g;
107                     $command =~ s/\$SG_TEST_ENV //g;
108                     $command =~ s/\$SG_EXENV_TEST //g;
109                     $command =~ s/\$EXEEXT//g;
110                     $command =~ s/\${EXEEXT}//g;
111                     $command =~ s/\${srcdir}/\${CMAKE_HOME_DIRECTORY}\/src/g;
112                     $command =~ s/ \$ARGS//g;
113                     $command =~ s/ \$@ //g;
114                     $command =~ s/..\/..\/bin\/smpirun/\${CMAKE_BINARY_DIR\}\/bin\/smpirun/g;
115
116                     if ( $command =~ /^[^\/\$\s]+\// ) {
117                         $command = $path . "/" . $command;
118                         $command =~ s/\/(.?\/)+/\//g;
119                     }
120                     $command =~ s/$proj_dir/\$\{CMAKE_BINARY_DIR\}/g;
121                     if ($config_var) {
122                         $command = "$command $config_var";
123                     }
124                     print "ADD_TEST(memcheck-$name_test-$count $command --cd $path\/)\n";
125
126                     #push @test_list, "memcheck-$name_test-$count";
127                     $count++;
128                 }
129                 if ( $l =~ /^\& (.*)$/ ) {
130                     last;
131                 }
132             }
133             close(TESH_FILE);
134         }
135         elsif ( $line =~ /set_tests_properties/ ) {
136             if ( $line =~ /set_tests_properties\(([\S]+)/ ) {
137                 my ($name_temp) = ($1);
138                 $line =~ s/$name_temp/memcheck-$name_temp-0/g;
139                 print $line. "\n";
140             }
141         }
142         else {
143             print $line. "\n";
144         }
145     }
146 }
147 close(MAKETEST);
148
149 #print "nb_test = $nb_test\n";
150 #print "set(MEMCHECK_LIST\n";
151 #print (join("\n", @test_list));
152 #print ")\n";