bug 5138
[scilab.git] / scilab / modules / dynamic_link / macros / ilib_build.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) ENPC/INRIA
3 // Copyright (C) DIGITEO - 2009 - 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 ilib_build(ilib_name,table,files,libs,makename,ldflags,cflags,fflags,ismex,cc)
12
13   if ~haveacompiler() then
14     error(msprintf(gettext("%s: A Fortran or C compiler is required.\n"),'ilib_build'));
15     return;
16   end
17   
18   [lhs,rhs] = argn(0);
19   if rhs < 4 then
20     error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"ilib_build"));
21     return
22   end
23
24   if type(ilib_name) <> 10 then
25     error(999,msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"),'ilib_build',1));
26   end
27   
28   if size(ilib_name,'*') <> 1 then
29     error(999,msprintf(_("%s: Wrong size for input argument #%d: A string expected.\n"),'ilib_build',1));
30   end 
31
32   if type(table) <> 10 then
33     error(999,msprintf(_("%s: Wrong type for input argument #%d: A matrix of strings expected.\n"),'ilib_build',2));
34   end
35   
36   if size(table,'*') > 999 * 2 then
37     error(999,msprintf(_("%s: Wrong size for input argument #%d: A matrix of strings < 999 expected.\n"),'ilib_build',2));
38   end 
39   
40   if ~MSDOS & strncpy(ilib_name,3) <> "lib" then
41         // We add a leading lib under Linux/Unix because it is the way
42           ilib_name="lib" + ilib_name;
43   end
44   
45   if rhs <= 4 then makename = 'Makelib';end
46   if rhs <= 5 then ldflags = ''; end 
47   if rhs <= 6 then cflags  = ''; end 
48   if rhs <= 7 then fflags  = ''; end 
49   if rhs <= 8 then ismex  = %f; end 
50   if rhs <= 9 then cc  = ''; end 
51   
52   if MSDOS then
53     if isdef('makename') then
54       if (makename == []) | (makename == '') then
55         makename = 'makelib';
56       end
57     end
58   end
59   
60   // check if library is not already loaded
61   if or(link() == ilib_name) then
62     error(999,msprintf(_('%s: ''%s'' already loaded in scilab.'),'ilib_build',ilib_name) + ..
63     ascii(10) + _('You need to unload this library before.'));
64   end
65   
66   // generate the gateway file
67   if ( ilib_verbose() <> 0 ) then
68     mprintf(_("   Generate a gateway file\n"));
69   end
70   
71       
72   file_gw_name = ilib_gen_gateway(ilib_name,table);
73   
74   // generate a loader file
75   if ( ilib_verbose() <> 0 ) then
76     mprintf(_("   Generate a loader file\n"));
77   end
78   if ~ismex then
79     ilib_gen_loader(ilib_name,table,libs);
80   else
81     ilib_gen_loader(ilib_name,table);
82   end
83   
84   // generate a Makefile
85   if ( ilib_verbose() <> 0 ) then
86           if MSDOS
87             mprintf(_("   Generate a Makefile: %s\n"),'Makelib');
88           else
89             mprintf(_("   Generate a Makefile\n"));
90           end
91   end
92   
93   if ~MSDOS then // Needs to copy the libfoo.c which contains important stuff
94     files = files(:)';
95     files = [files,ilib_name + '.c'];
96   end
97
98   ilib_gen_Make(ilib_name,table,files,libs,makename,%t,ldflags,cflags,fflags,cc);
99   
100   // we call make
101   if ( ilib_verbose() <> 0 ) then
102     mprintf(_("   Running the makefile\n"));
103   end
104   
105   libn = ilib_compile(ilib_name,makename,files);
106   
107   if ( ilib_verbose() <> 0 ) then
108     mprintf(_("   Generate a cleaner file\n"));
109   end
110   ilib_gen_cleaner(makename,'loader.sce',[libn;file_gw_name]);
111   
112 endfunction
113 //==========================================