atomsCheckModule function added. (SEP 76)
[scilab.git] / scilab / modules / atoms / macros / atomsCheckModule.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2011 - DIGITEO - Michael BAUDIN
3 // Copyright (C) 2011 - DIGITEO - Allan CORNET
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10
11 function isok = atomsCheckModule(modulenames, verbose)
12   // Check the given list of ATOMS modules.
13   //
14   // Calling Sequence
15   //   isok = atomsCheckModule(modulenames, verbose)
16   //
17   // Parameters
18   //   names : a matrix of strings, the names of the modules to check
19   //   verbose : a 1-by-1 matrix of booleans, set to true to display messages
20   //
21   // Description
22   //   Installs, load, launch the tests and remove all the modules
23   //   in modulenames.
24   //
25   // Examples
26   //   atomsCheckModule("scibench", %t)
27   //   atomsCheckModule(["apifun" "scibench"],%t)
28   //
29
30   tabsp = "  * ";
31   if ~isdef('verbose') then
32     verbose = %t;
33   end
34   //============================================================================
35   function isok = atomsCheckModuleInstall(modulename, verbose)
36     isok = %f;
37     if verbose then
38       mprintf(gettext("\n%s Installing ...\n"), tabsp);
39     end
40     
41     if execstr("r = [];r = atomsInstall(modulename, ''user'');", "errcatch") == 0 then
42       isok = (r <> []);
43       if isok & verbose then
44         disp(r);
45       end
46     end
47   endfunction
48   //============================================================================
49   function isok = atomsCheckModuleLoad(modulename, verbose)
50     isok = %f;
51     if verbose then
52       mprintf(gettext("\n%s Loading ...\n"), tabsp);
53     end
54       
55     if execstr("r = [];r = atomsLoad(modulename);", "errcatch") <> 0 then
56       isok = %f;
57     else
58       isok = (r <> []);
59       if isok & verbose then
60         disp(r);
61       end
62     end
63   endfunction
64   //============================================================================
65   function isok = atomsCheckModuleTest(modulename, verbose)
66     isok = %f;
67     if verbose then
68       mprintf(gettext("\n%s Testing ...\n"), tabsp);
69     end
70     
71     isok = atomsTest(modulename);
72   endfunction
73   //============================================================================
74   function isok = atomsCheckModuleRemove(modulename, verbose)
75     isok = %f;
76     if verbose then
77       mprintf(gettext("\n%s Removing ...\n"), tabsp);
78     end
79     if execstr("r = atomsRemove(modulename, ''user'', %t);", "errcatch") <> 0 then
80       isok = %f;
81     else
82       isok = (r == []);
83     end
84   endfunction
85   //============================================================================
86   isok = %f;
87   
88   if type(modulenames) <> 10 then
89     error(msprintf(gettext("%s: Wrong type for input argument #%d: a matrix of string expected.\n"), "atomsCheckModule", 1));
90   end
91
92   if type(verbose) <> 4 then
93     error(msprintf(gettext("%s: Wrong type for input argument #%d: a boolean expected.\n"), "atomsCheckModule", 2));
94   end
95   
96   if size(verbose, '*') <> 1 then
97     error(msprintf(gettext("%s: Wrong size for input argument #%d: a boolean expected.\n"), "atomsCheckModule", 2));
98   end
99
100   nm = size(modulenames, "*");
101   
102   for k = 1:nm
103     modulename = modulenames(k);
104     im = atomsIsInstalled(modulename);
105     if im then
106       error(msprintf(gettext("%s: Module %s is already installed. Please remove it before checking it.\n"), "atomsCheckModule", modulename));
107     end
108   end
109  
110   for k = 1:nm
111     modulename = modulenames(k);
112     r = atomsSearch(modulename);
113     if grep(r(:, 1), modulename)  == [] then
114       error(msprintf(gettext("%s: Module %s does not exist in current repostories.\n"), "atomsCheckModule", modulename));
115     end
116   end  
117   
118   if nm > 1 then
119     u = unique(modulenames);
120     if size(u, '*') <> nm then
121       error(msprintf(gettext("%s: Wrong value(s) for input argument #%d: some unique module names expected.\n"), "atomsCheckModule", 1));
122     end
123   end
124   
125   for k = 1:nm
126     im = atomsIsInstalled(modulename);
127     if im then
128        error(msprintf(gettext("%s: Module %s is already installed. Please remove it before checking it.\n"), "atomsCheckModule", modulename));
129      end
130   end
131
132   if verbose then
133     mprintf(gettext("\nNumber of modules to check: %d\n"), nm);
134   end
135
136   for k = 1:nm
137     modulename = modulenames(k);
138
139     isok(k) = atomsCheckModuleInstall(modulename, verbose);
140     isok(k) = isok(k) & atomsCheckModuleLoad(modulename, verbose);
141     isok(k) = isok(k) & atomsCheckModuleTest(modulename, verbose);
142     isok(k) = isok(k) & atomsCheckModuleRemove(modulename, verbose);
143   end
144   
145   isok = matrix(isok, size(modulenames, 'r'), size(modulenames, 'c'));
146   
147 endfunction
148
149