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