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