- rename end-user functions => prefix them with "atoms"
[scilab.git] / scilab / modules / atoms / macros / atomsCheck.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008 - INRIA - Delphine GASC <delphine.gasc@scilab.org>
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 // Verification that the toolbox is built correctly
11
12 function result = checkToolbox(name)
13   rhs=argn(2);
14
15   if rhs == 1 then
16   // We remove the special characters
17   name = atomsSubstituteString(name)
18   // We go in the repectory with toolboxes
19   rep = atomsToolboxDirectory()
20   d = rep + name
21   // If the repertory doesn't exist
22   if ~(isdir(d))
23     atomsDisplayMessage(sprintf(_("The toolbox directory ''%s'' doesn''t exist or the name is wrong.\n"),name))
24     result = %f
25     return result
26   end
27   cd (d)
28   if ~checkDescription()
29     atomsDisplayMessage(_("The DESCRIPTION file isn''t valid"))
30     result = %f
31     return result
32   end
33     if ~checkDescriptionFunc()
34     atomsDisplayMessage(_("The DESCRIPTION-FUNCTIONS file isn''t valid"))
35     result = %f
36     return result
37   end
38   if ~checkLoader()
39     atomsDisplayMessage(_("The loader.sce file isn''t present"))
40     result = %f
41     return result
42   end
43   if ~checkTest()
44     atomsDisplayMessage(_("It would be interesting to have tests available."))
45   end
46   if ~checkHelp()
47     atomsDisplayMessage(_("It would be interesting to have help available."))
48   end
49   if ~checkDemo()
50     atomsDisplayMessage(_("It would be interesting to have demonstrations available."))
51   end
52   if ~checkReadme()
53     atomsDisplayMessage(_("It would be interesting to have a README file."))
54   end
55   if ~checkLicense()
56     atomsDisplayMessage(_("It would be interesting to have a license file."))
57   end
58   result = %t
59   return result
60   else
61     error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"checkToolbox",1));
62   end
63 endfunction
64
65 function result = checkDescription()
66   // If the DESCRIPTION file is present
67   if ls("DESCRIPTION") <> []
68     // Reading of the description file which we stock in an array
69     tab = atomsReadFile("DESCRIPTION")
70     // Creation of a "hash table"
71     desc = atomsListDescription()
72     // Check of the presence of only one space after the :
73     [n, m] = size(desc)
74       for i=1:n
75         ind = strindex(tab(i),':')
76         if (part([tab(i)],[ind+1]) <> " " | part([tab(i)],[ind+2])== " ")
77           atomsDisplayMessage(sprintf(_("The field %s should have one and only one whitespace after the :"),tab(i)))
78           result = %f
79           return result
80         end
81       end
82     // Filling of the hash table
83     desc = hashTable(desc, tab)
84     // Check if all the compulsory fields are filled 
85     [listeObl, listeOpt] = atomsConstant()
86     for i=1:7
87       if desc(listeObl(i)) == []
88         atomsDisplayMessage(sprintf(_("The field %s is missing in the DESCRIPTION file"),listeObl(i)))
89         result = %f
90         return result
91       end
92     end
93     // Check if the name correspond
94     if desc("Toolbox") <> name
95       atomsDisplayMessage(_("The toolbox name present in the DESCRIPTION file is false"))
96       result = %f
97       return result
98     end
99     // Check if the version has a good format
100     v = desc("Version")
101     if regexp(v, '/[0-9]+\.[0-9]+\.?[0-9]*$/') <> 1
102       disp(_("The version is a sequence of at least two (and usually three) non-negative integers separated by single ''.'' characters."))
103       result = %f
104       return result
105     end
106   // If the DESCRIPTION file doesn't exist 
107   else
108     atomsDisplayMessage(_("The DESCRIPTION file doesn''t exist or isn''t at the right place"))
109     result = %f
110     return result
111   end
112   result = %t
113   return result
114 endfunction
115
116 function result = checkDescriptionFunc()
117   result = %t
118   // If the DESCRIPTION-FUNCTIONS file is present
119   if ls("DESCRIPTION-FUNCTIONS") <> []
120     // Reading of the description file which we stock in an array
121     tab = atomsReadFile("DESCRIPTION-FUNCTIONS")
122     // Creation of a list
123     [n, m] = size(tab)
124     numberFunction = 0
125     for i=1:n
126       ind = strindex(tab(i),'-')
127       // If ind = [] we are always in the previous field
128       if ind == []
129         descFunct(string(numberFunction)) = descFunct(string(numberFunction)) + tab(i)
130       else
131         descFunct(string(numberFunction + 1)) = tab(i)
132         numberFunction = numberFunction + 1
133       end
134     end
135     // Check if no function have the name of a Scilab function
136     // Recuperation of the Scilab functions
137     scilabFunction = listPrimitives()
138     // Recuperation of each function name
139     for i=1:numberFunction
140       ind = strindex(descFunct(string(i)),'-')
141       funct = strsplit(descFunct(string(i)), ind)
142       funct = funct(1)
143       funct = strsubst(funct, "-", "")
144       funct = strsubst(funct, " ", "")
145       // We search the name of the function in the Scilab functions list
146       if strindex(scilabFunction, " " + funct + " ") <> []
147         atomsDisplayMessage(sprintf(_("The function %s already exist in Scilab. Please change the name."),funct))
148         result = %f
149       end
150     end
151   // If the DESCRIPTION-FUNCTIONS file doesn't exist
152   else
153     atomsDisplayMessage(_("The file DESCRIPTION-FUNCTIONS doesn''t exist or isn''t at the good place."))
154     result = %f
155   end
156   return result
157 endfunction
158
159 // Filling of a list with the DESCRIPTION file
160 function listDesc = hashTable(listDesc, tabDesc)
161   [listeObl, listeOpt] = atomsConstant()
162   // We create all the values for all the keys so that even if one optional field is not present in the array, there is no error.
163   [o, p] = size(listeOpt)
164   for i=1:p
165     listDesc(listeOpt(i))= ""
166   end
167   [n, m] = size(tabDesc)
168   for i=1:n
169     ind = strindex(tabDesc(i),':')
170     // If ind = [] we are always in the previous field
171     if ind == []
172       listDesc(temp(1)) = listDesc(temp(1)) + tabDesc(i)
173     else
174       // ind+1 to remove the space before the second field
175       temp = strsplit(tabDesc(i),ind+1)
176       // We remove the ": "
177       temp(1) = strsubst(temp(1), ": ", "")
178       listDesc(temp(1))= temp(2)
179     end
180   end
181 endfunction
182
183 function var = listPrimitives()
184   // Recuperation of the scilab function
185   [primitives,commandes] = what();
186   listLib = librarieslist();
187   [n, m] = size(listLib);
188   for i=1:n
189     [o, m] = size(primitives);
190     temp = libraryinfo(listLib(i));
191     [p, m] = size(temp);
192     for j=1:p
193       primitives(o + j) = temp(j);
194     end
195   end
196   [o, m] = size(primitives);
197   var = " "
198   for i=1:o
199     var = var + primitives(i) + " ";
200   end
201 endfunction
202
203 function result = checkLoader()
204   if ~ls("loader.sce") <> []
205     result = %f
206     return result
207   end
208   result = %t
209   return result
210 endfunction
211
212 function result = checkTest()
213   if ~isdir("unit tests") <> []
214     result = %f
215     return result
216   end
217   result = %t
218   return result
219 endfunction
220
221 function result = checkHelp()
222   if ~isdir("help") <> []
223     result = %f
224     return result
225   end
226   result = %t
227   return result  
228 endfunction
229
230 function result = checkDemo()
231   if ~isdir("demos") <> []
232     result = %f
233     return result
234   end
235   result = %t
236   return result  
237 endfunction
238
239 function result = checkReadme()
240   if ~ls("readme.txt") <> []
241     result = %f
242     return result
243   end
244   result = %t
245   return result  
246 endfunction
247
248 function result = checkLicense()
249   if ~ls("license.txt") <> []
250     result = %f
251     return result
252   end
253   result = %t
254   return result  
255 endfunction