0cdbe941ee74c139f7058b5248df8fe9c3d8504b
[scilab.git] / scilab / modules / dynamic_link / macros / ilib_for_link.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA/ENPC
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 // Generate a shared library which can be used by link command.
12 function libn = ilib_for_link(names, ..
13                               files, ..
14                               libs, ..
15                               flag, ..
16                               makename, ..
17                               loadername, ..
18                               libname, ..
19                               ldflags, ..
20                               cflags, ..
21                               fflags, ..
22                               cc)
23
24   [lhs, rhs] = argn(0);
25   if rhs < 4 then
26     error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"ilib_for_link"));
27     return
28   end
29
30   if rhs > 4 then
31     if (makename <> [] & makename <> "") then
32       warning(msprintf(_("%s: Wrong value for input argument #%d: """" or ""[]"" expected.\n"), "ilib_for_link", 5));
33     end
34   end
35   if rhs <= 5 then loadername = "loader.sce";end
36   if rhs <= 6 then libname = ""; end
37   if rhs <= 7 then ldflags = ""; end
38   if rhs <= 8 then cflags  = ""; end
39   if rhs <= 9 then fflags  = ""; end
40   if rhs <= 10 then cc  = ""; end
41
42   if ~isempty(files) & (or(fileext(files)==".o") | or(fileext(files)==".obj")) then
43     warnobsolete(msprintf(_("A managed file extension for input argument #%d"), 2), "5.4.0");
44   end
45
46   if getos() == "Windows" then
47     if ~isdef("makename") | (makename == []) | (makename == "") then
48       // Load dynamic_link Internal lib if it"s not already loaded
49       if ~ exists("dynamic_linkwindowslib") then
50         load("SCI/modules/dynamic_link/macros/windows/lib");
51       end
52       makename = dlwGetDefltMakefileName();
53     end
54   else
55     makename = "Makefile";
56   end
57
58   // generate a loader file
59   if ( ilib_verbose() <> 0 ) then
60     mprintf(gettext("   Generate a loader file\n"));
61   end
62
63   tables = [];
64
65   // we manage .f90 as .f on windows
66   if getos() == "Windows" then
67    if findmsifortcompiler() <> "unknown" then
68      if flag == "f90" then
69        flag = "f";
70      end
71    else
72      if flag == "f90" then
73        error(999, _("F2C cannot build fortran 90"));
74      end
75    end
76   end
77
78   ilib_gen_loader(names, tables, libs, libname, flag, loadername);
79
80   // bug 4515 - unlink previous function with same name
81   n = size(names,"*");
82   for i = 1:n
83     execstr("[bOK, ilib] = c_link(""" + names(i) + """);if bOK then ulink(ilib), end");
84   end
85
86   // generate a Makefile
87   if ( ilib_verbose() <> 0 ) then
88     mprintf(gettext("   Generate a Makefile\n"));
89   end
90
91   generateMakefile(names, ..
92                    files, ..
93                    libs, ..
94                    makename, ..
95                    libname, ..
96                    ldflags, ..
97                    cflags, ..
98                    fflags, ..
99                    cc, ..
100                    flag);
101
102   // we call make
103   if ( ilib_verbose() <> 0 ) then
104     mprintf(gettext("   Running the Makefile\n"));
105   end
106
107   if (libname == "") then
108     libname = names(1);
109   end
110
111   libn = ilib_compile("lib" + libname, makename, files);
112
113   if ( ilib_verbose() <> 0 ) then
114     mprintf(_("   Generate a cleaner file\n"));
115   end
116
117   ilib_gen_cleaner(makename, loadername, libn);
118
119 endfunction
120 //=============================================================================
121 function generateMakefile(names, ..
122                             files, ..
123                             libs, ..
124                             makename, ..
125                             libname, ..
126                             ldflags, ..
127                             cflags, ..
128                             fflags, ..
129                             cc, ..
130                             flag)
131
132
133   if getos() <> "Windows" then
134     Makename = makename;
135     ilib_gen_Make_unix(names, ..
136                      files, ..
137                      libs, ..
138                      libname, ..
139                      ldflags, ..
140                      cflags, ..
141                      fflags, ..
142                      cc);
143   else
144     if ~ exists("dynamic_linkwindowslib") then
145       load("SCI/modules/dynamic_link/macros/windows/lib");
146     end
147
148     if strncpy(names,3) <> "lib" then
149       names = "lib" + names;
150     end
151
152     names = names(1);
153
154     Makename = dlwGenerateMakefile(names, ..
155                                     [], ..
156                                     files, ..
157                                     libs, ..
158                                     libname, ..
159                                     makename, ..
160                                     %f, ..
161                                     ldflags, ..
162                                     cflags, ..
163                                     fflags, ..
164                                     cc);
165   end
166
167 endfunction
168 //=============================================================================
169