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