Revert "Merge remote branch 'origin/sas' into YaSp"
[scilab.git] / scilab / modules / development_tools / src / perl / check_makefileam.pl
1 #!/usr/bin/perl
2
3 # Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 # Copyright (C) 2008 - INRIA - Pierre MARECHAL <pierre.marechal@inria.fr>
5 #
6 # This file must be used under the terms of the CeCILL.
7 # This source file is licensed as described in the file COPYING, which
8 # you should have received as part of this distribution.  The terms
9 # are also available at
10 # http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11
12 use strict;
13 use Cwd;
14 use File::Basename;
15
16 # Current directory
17 my $directory       = getcwd();
18
19 if( dirname($0) ne '.' )
20 {
21         $directory .= '/'.dirname($0);
22 }
23
24 if( dirname($0) =~ m/^\// )
25 {
26         $directory = dirname($0);
27 }
28
29 # modules dir path
30 my $sci_modules_dir = $directory;
31 $sci_modules_dir =~ s/\/development_tools\/src\/perl//g;
32
33 # Module list
34 my %modules = get_module_list();
35
36 foreach my $module (sort keys %modules)
37 {
38         print $module;
39         
40         my $nb_pb                  = 0;
41         
42         my %list_makefile_headers  = get_makefileam_list($module,'HEADERS');
43         my %list_real_headers      = get_real_list($module,'HEADERS');
44         
45         my $nb_makefile_headers    = 0;
46         my $nb_real_headers        = 0;
47         
48         my $error_list             = '';
49         
50         
51         foreach my $file (sort keys %list_makefile_headers)
52         {
53                 $nb_makefile_headers++;
54                 
55                 if( ! -e $sci_modules_dir.'/'.$module.'/'.$file )
56                 {
57                         $nb_pb++;
58                         $error_list .= sprintf("\t".'% 3d - %s doesn\'t exist'."\n",$nb_pb,$file);
59                 }
60         }
61         
62         foreach my $file (sort keys %list_real_headers)
63         {
64                 $nb_real_headers++;
65                 
66                 if( ! exists( $list_makefile_headers{$file} ) )
67                 {
68                         $nb_pb++;
69                         $error_list .= sprintf("\t".'% 3d - %s is not listed in the Makefile.am file'."\n",$nb_pb,$file);
70                 }
71         }
72         
73         if( $nb_pb == 0 )
74         {
75                 for( my $i = length($module) ; $i <= 30 ; $i++ )
76                 {
77                         print ' ';
78                 }
79                 print 'OK';
80                 printf(' [ % 4d include file(s) ]'."\n",$nb_makefile_headers);
81         }
82         else
83         {
84                 print "\n".$error_list;
85         }
86 }
87
88 # ==============================================================================
89 # get_makefileam_list
90 # ==============================================================================
91
92 sub get_makefileam_list()
93 {
94         my $module            = $_[0];
95         
96         my $list_start        = 0;
97         my @file_list_string;
98         my %list;
99         
100         my $nb_blocs = 0;
101         
102         unless( chdir($sci_modules_dir.'/'.$module) )
103         {
104                 print $module.' : The directory '.$sci_modules_dir.'/'.$module.' doesn\'t exist or read access denied'."\n";
105                 exit;
106         }
107         
108         # Ouverture du fichier Makefile.am pour en extraire le bloc d'include
109         # ==========================================================================
110         
111         unless( open(MAKEFILEAM,'Makefile.am') )
112         {
113                 print $module.' : Makefile.am file doesn\'t exist or read access denied'."\n";
114                 exit;
115         }
116         
117         while(<MAKEFILEAM>)
118         {
119                 # suppression du \n
120                 chomp($_);
121                 
122                 # Suppression des espaces en début et fin de chaîne
123                 $_ =~ s/^\s+//;
124                 $_ =~ s/\s+$//;
125                 
126                 # Début de la list
127                 
128                 if($_ =~ m/lib(.*)include_HEADERS/ )
129                 {
130                         $nb_blocs++;
131                         $file_list_string[$nb_blocs] = '';
132                         $list_start = 1;
133                 }
134                 
135                 # Traitement de la liste
136                 if( $list_start == 1 )
137                 {
138                         $file_list_string[$nb_blocs] .= $_;
139                         
140                         if( index($_,' \\') == -1 )
141                         {
142                                 $list_start = 0;
143                         }
144                 }
145         }
146         
147         close(MAKEFILEAM);
148         
149         # parcours des blocs
150         # ==========================================================================
151         
152         for( my $i=1 ; $i <= $nb_blocs ; $i++ )
153         {
154                 # traitement du bloc d'include
155                 # ======================================================================
156                 
157                 # suppression des parties inutiles
158                 # ================================
159                 
160                 $file_list_string[$i] =~ s/\\/ /g;
161                 
162                 # Suppression des espaces en début et fin de chaîne
163                 my $rep = index( $file_list_string[$i] , '=' );
164                 substr($file_list_string[$i],0,$rep+1) = '';
165                 
166                 # Suppression des espaces en début et fin de chaîne
167                 $file_list_string[$i] =~ s/^\s+//;
168                 $file_list_string[$i] =~ s/\s+$//;
169                 
170                 # Séparation des fichiers
171                 my @files = split(/[[:blank:]]+/,$file_list_string[$i]);
172                 
173                 foreach my $file (@files)
174                 {
175                         $list{$file} = 1;
176                 }
177         }
178         
179         return %list;
180 }
181
182 # ==============================================================================
183 # get_real_list
184 # ==============================================================================
185
186 sub get_real_list()
187 {
188         my $module = $_[0];
189         
190         my $list_start        = 0;
191         my $file_list_string  = '';
192         
193         my %list;
194         
195         unless( chdir($sci_modules_dir.'/'.$module) )
196         {
197                 print $module.' : The directory '.$sci_modules_dir.'/'.$module.' doesn\'t exist or read access denied'."\n";
198                 exit;
199         }
200         
201         my @files = <includes/*>;
202         
203         foreach my $file (@files)
204         {
205                 $list{$file} = 1;
206         }
207         
208         return %list;
209 }
210
211 # ==============================================================================
212 # get_module_list
213 # ==============================================================================
214
215 sub get_module_list
216 {
217         my %list;
218         
219         unless( chdir($sci_modules_dir) )
220         {
221                 print 'The directory '.$sci_modules_dir.' doesn\'t exist or read access denied'."\n";
222                 exit;
223         }
224         
225         my @candidates = <*>;
226         
227         foreach my $candidate (@candidates)
228         {
229                 if( -e $sci_modules_dir.'/'.$candidate.'/Makefile.am' )
230                 {
231                         $list{$candidate} = 1;
232                 }
233         }
234         
235         return %list;
236 }
237
238 # ==============================================================================
239 # search
240 # ==============================================================================
241
242 sub search
243 {
244         my $dir      = $_[0];
245         my $module   = $_[1];
246         
247         my $dirToPrint;
248         my @list_dir;
249         
250         my $current_directory;
251         my $previous_directory = getcwd();
252         
253         chdir($dir);
254         
255         @list_dir = <*>;
256         
257         foreach my $list_dir (@list_dir)
258         {
259                 $current_directory = getcwd();
260                 
261                 if( (-d $list_dir) && ($list_dir ne '.svn') )
262                 {
263                         search($current_directory.'/'.$list_dir,$module);
264                 }
265                 
266                 if( -f $list_dir )
267                 {
268                         my $file = $current_directory.'/'.$list_dir;
269                         substr($file,0,length($sci_modules_dir.'/'.$module.'/')) = '';
270                         
271                         print LIST $file.' ';
272                 }
273         }
274         
275         chdir($previous_directory);
276 }