ilib_for_link, ilib_build do not accept files with ".o" or ".obj" extensions for...
[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-2011 - 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) | ~and(isfile(files)) then
43      error(999, msprintf(_("%s: Wrong value for input argument #%d: existing file(s) expected.\n"), "ilib_for_link", 2));
44   end  
45
46   if ~isempty(files) & (or(fileext(files)==".o") | or(fileext(files)==".obj")) then
47     error(999, msprintf(_("%s: A managed file extension for input argument #%d expected.\n"), "ilib_for_link", 2));
48   end
49
50   if getos() == "Windows" then
51     if ~isdef("makename") | (makename == []) | (makename == "") then
52       // Load dynamic_link Internal lib if it"s not already loaded
53       if ~ exists("dynamic_linkwindowslib") then
54         load("SCI/modules/dynamic_link/macros/windows/lib");
55       end
56       makename = dlwGetDefltMakefileName();
57     end
58   else
59     makename = "Makefile";
60   end
61
62   // generate a loader file
63   if ( ilib_verbose() <> 0 ) then
64     mprintf(gettext("   Generate a loader file\n"));
65   end
66
67   tables = [];
68
69   // we manage .f90 as .f on windows
70   if getos() == "Windows" then
71    if findmsifortcompiler() <> "unknown" then
72      if flag == "f90" then
73        flag = "f";
74      end
75    else
76      if flag == "f90" then
77        error(999, _("F2C cannot build fortran 90"));
78      end
79    end
80   end
81
82   ilib_gen_loader(names, tables, libs, libname, flag, loadername);
83
84   // bug 4515 - unlink previous function with same name
85   n = size(names,"*");
86   for i = 1:n
87     execstr("[bOK, ilib] = c_link(""" + names(i) + """);if bOK then ulink(ilib), end");
88   end
89
90   // generate a Makefile
91   if ( ilib_verbose() <> 0 ) then
92     mprintf(gettext("   Generate a Makefile\n"));
93   end
94
95   generateMakefile(names, ..
96                    files, ..
97                    libs, ..
98                    makename, ..
99                    libname, ..
100                    ldflags, ..
101                    cflags, ..
102                    fflags, ..
103                    cc, ..
104                    flag);
105
106   // we call make
107   if ( ilib_verbose() <> 0 ) then
108     mprintf(gettext("   Running the Makefile\n"));
109   end
110
111   if (libname == "") then
112     libname = names(1);
113   end
114
115   libn = ilib_compile("lib" + libname, makename, files);
116
117   if ( ilib_verbose() <> 0 ) then
118     mprintf(_("   Generate a cleaner file\n"));
119   end
120
121   ilib_gen_cleaner(makename, loadername, libn);
122
123 endfunction
124 //=============================================================================
125 function generateMakefile(names, ..
126                             files, ..
127                             libs, ..
128                             makename, ..
129                             libname, ..
130                             ldflags, ..
131                             cflags, ..
132                             fflags, ..
133                             cc, ..
134                             flag)
135
136
137   if getos() <> "Windows" then
138     Makename = makename;
139     ilib_gen_Make_unix(names, ..
140                      files, ..
141                      libs, ..
142                      libname, ..
143                      ldflags, ..
144                      cflags, ..
145                      fflags, ..
146                      cc);
147   else
148     if ~ exists("dynamic_linkwindowslib") then
149       load("SCI/modules/dynamic_link/macros/windows/lib");
150     end
151
152     if strncpy(names,3) <> "lib" then
153       names = "lib" + names;
154     end
155
156     names = names(1);
157
158     Makename = dlwGenerateMakefile(names, ..
159                                     [], ..
160                                     files, ..
161                                     libs, ..
162                                     libname, ..
163                                     makename, ..
164                                     %f, ..
165                                     ldflags, ..
166                                     cflags, ..
167                                     fflags, ..
168                                     cc);
169   end
170
171 endfunction
172 //=============================================================================
173