* Bug #12162 fixed - tbx_build_blocks did not report errors.
[scilab.git] / scilab / modules / modules_manager / macros / tbx_build_blocks.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2011 - DIGITEO - ClĂ©ment DAVID <clement.david@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 function tbx_build_blocks(module, names, macros_path)
11     // Build a default block instance
12     //
13     // Calling Sequence
14     //   tbx_build_blocks(module, names)
15     //
16     // Parameters
17     // module: toolbox base directory
18     // names: list of block names (sci file name without extension)
19
20     if argn(2) < 2 then
21         error(msprintf(gettext("%s: Wrong number of input arguments: At least %d expected.\n"),"tbx_build_blocks",2));
22     end
23     if argn(2) > 3 then
24         error(msprintf(gettext("%s: Wrong number of input arguments: At most %d expected.\n"),"tbx_build_blocks",3));
25     end
26
27
28     // checking module argument
29     if type(module) <> 10 then
30         error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"),"tbx_build_blocks",1));
31     end
32     if size(module,"*") <> 1 then
33         error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"),"tbx_build_blocks",1));
34     end
35     if ~isdir(module) then
36         error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"),"tbx_build_blocks",module));
37     end
38
39     // checking names argument
40     if type(names) <> 10 then
41         error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"),"tbx_build_blocks",2));
42     end
43
44     // checking optional macros_path argument
45     if ~exists("macros_path", 'l') then
46         macros_path = module + "/macros/";
47     end
48         if type(macros_path) <> 10 then
49         error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"),"tbx_build_blocks",3));
50     end
51     if size(macros_path,"*") <> 1 then
52         error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"),"tbx_build_blocks",3));
53     end
54     if ~isdir(macros_path) then
55         error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"),"tbx_build_blocks",macros_path));
56     end
57
58     mprintf(gettext("Building blocks...\n"));
59
60     // load Xcos libraries when not already loaded.
61     if ~exists("scicos_diagram") then loadXcosLibs(); end
62     
63     // create directories
64     if ~isdir(module + "/images") then
65         createdir(module + "/images");
66     end
67     if ~isdir(module + "/images/h5") then
68         createdir(module + "/images/h5");
69     end
70     if ~isdir(module + "/images/gif") then
71         createdir(module + "/images/gif");
72     end
73     if ~isdir(module + "/images/svg") then
74         createdir(module + "/images/svg");
75     end
76
77     names = names(:);
78     sciFiles = pathconvert(macros_path + "/") + names + ".sci";
79     h5Files = pathconvert(module + "/images/h5/") + names + ".sod";
80     gif_tlbx = pathconvert(module + "/images/gif");
81     svg_tlbx = pathconvert(module + "/images/svg");
82     for i=1:size(names, "*")
83         // load the interface function
84         exec(sciFiles(i), -1);
85
86         // export the instance
87         execstr(msprintf("scs_m = %s (''define'');", names(i)));
88         if ~export_to_hdf5(h5Files(i), "scs_m") then
89             error(msprintf(gettext("%s: Unable to export %s to %s.\n"),"tbx_build_blocks",names(i), h5Files(i)));
90         end
91
92         block = scs_m;
93
94         // export an image file if it doesn't exist
95         files = gif_tlbx + "/" + names(i) + [".png" ".jpg" ".gif"];
96         if ~or(isfile(files)) then
97             if ~generateBlockImage(block, gif_tlbx, names(i), "gif", %t) then
98                 error(msprintf(gettext("%s: Unable to export %s to %s.\n"),"tbx_build_blocks",names(i), files(i)));
99             end
100         end
101
102         // export a schema file if it doesn't exist
103         files = svg_tlbx + "/" + names(i) + [".svg" ".png" ".jpg" ".gif"];
104         if ~or(isfile(files)) then
105             if ~generateBlockImage(block, svg_tlbx, names(i), "svg", %f) then
106                 error(msprintf(gettext("%s: Unable to export %s to %s.\n"),"tbx_build_blocks",names(i), files(i)));
107             end
108         end
109     end
110 endfunction
111