1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
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
10 function Makename=ilib_gen_Make(name,tables,files,libs,makename,with_gateway,ldflags,cflags,fflags,cc)
11 // flag 'c' or 'f' used with lcc
12 //------------------------------------
13 // generate a Makefile for gateway
15 if argn(2)<6 then with_gateway=%t,ldflags='',cflags='',fflags='', cc='';end
16 for i=1:size(files,'*') // compatibility scilab 4.x
17 [path_f, file_f, ext_f] = fileparts(files(i));
18 if or(ext_f == ['.o','.obj']) then
19 files(i) = path_f + file_f;
21 files(i) = path_f + file_f + ext_f;
25 // change table if necessary
26 if typeof(tables)<>'list' then
35 col= "csci"; // @TODO what is csci
36 table = [table, col(ones(mt,1))];
41 error(msprintf(gettext("%s: Wrong size for input argument #%d.\n"),"ilib_gen_Make",2));
47 comp_target = COMPILER;
48 if with_lcc() == %T then
49 Makename = makename+'.lcc'
50 ilib_gen_Make_lcc(name,tables,files,libs,Makename,with_gateway,ldflags,cflags,fflags,'c')
51 else if getenv('WIN32','NO')=='OK' then
53 case 'VC++' then Makename = makename+'.mak'
54 ilib_gen_Make_win32(name,tables,files,libs,Makename,with_gateway,ldflags,cflags,fflags)
57 ilib_gen_Make_unix(name,tables,files,libs,Makename,with_gateway,ldflags,cflags,fflags,cc)
60 ilib_gen_Make_win32(name,tables,files,libs,Makename,with_gateway,ldflags,cflags,fflags)
64 ilib_gen_Make_unix(name,files,libs,name,ldflags,cflags,fflags,cc)
70 function ilib_gen_Make_win32(name,table,files,libs,Makename,with_gateway,ldflags,cflags,fflags)
72 managed_ext = ['.f90','.cxx','.cpp','.c','.f'];
73 for i=1:size(files,'*') // compatibility scilab 4.x
74 [path_f, file_f, ext_f] = fileparts(files(i));
75 if or(managed_ext == ext_f) then
76 files(i) = path_f + file_f;
78 files(i) = path_f + file_f + ext_f;
82 fd=mopen(Makename,"w");
83 mfprintf(fd,"# generated by builder.sce: Please do not edit this file\n");
84 mfprintf(fd,"# ------------------------------------------------------\n");
85 mfprintf(fd,"SHELL = /bin/sh\n");
86 mfprintf(fd,"SCIDIR =%s\n",SCI);
87 mfprintf(fd,"SCIDIR1 =%s\n",pathconvert(SCI,%f,%f,'w'));
88 mfprintf(fd,"# name of the dll to be built\n");
89 mfprintf(fd,"LIBRARY = %s\n",name);
90 mfprintf(fd,"# list of objects file\n");
91 mfprintf(fd,"OBJS =");
92 for x=files(:)' ; mfprintf(fd," %s.obj",x);end
94 if typeof(tables)<>'list' then
101 mfprintf(fd," %s.obj",name);
103 for i=1:L , mfprintf(fd," %s.obj",name+string(i));end
112 // mex files to be added
113 if table(i,3)=='cmex' | table(i,3)=='fmex' | table(i,3)=='Fmex'
114 mfprintf(fd," %s.obj",table(i,2));
118 mfprintf(fd,"\n# added libraries \n");
119 mfprintf(fd,"OTHERLIBS = ");
120 for x=libs(:)' ; mfprintf(fd," %s.lib",x);end
122 mfprintf(fd,"!include $(SCIDIR1)\\modules\\dynamic_link\\src\\scripts\\Makefile.incl.mak\n");
127 if table(i,3)=='cmex' | table(i,3)=='fmex' | table(i,3)=='Fmex' then
128 if findmsvccompiler() <>'msvc90express' then
129 mexcflags = " -Dmexfunction_=mex$*_ -DmexFunction=mex_$* ";
130 mexfflags = " -Dmexfunction=mex$* ";
133 mfprintf(fd,"CFLAGS = $(CC_OPTIONS) -DFORDLL -I\""$(SCIDIR)/modules/core/includes\"""+...
134 mexcflags + cflags +" \n");
135 mfprintf(fd,"FFLAGS = $(FC_OPTIONS) -DFORDLL -I\""$(SCIDIR)/modules/core/includes\"""+...
136 mexfflags + fflags +"\n");
137 mfprintf(fd,"EXTRA_LDFLAGS = "+ ldflags+"\n");
138 mfprintf(fd,"!include $(SCIDIR1)\\modules\\dynamic_link\\src\\scripts\\Makedll.incl \n");
141 //---------------------------------------------------------------------------------------
143 function ilib_gen_Make_lcc(name,table,files,libs,Makename,with_gateway,ldflags,cflags,fflags,flag)
147 managed_ext = ['.cxx','.cpp','.c','.f'];
148 for i=1:size(files,'*') // compatibility scilab 4.x
149 [path_f, file_f, ext_f] = fileparts(files(i));
150 if or(managed_ext == ext_f) then
151 files(i) = path_f + file_f;
153 files(i) = path_f + file_f + ext_f;
157 if with_module('scicos') then
158 scicoslib = '$(LCCLIBDIR)\\scicoslcc.lib $(LCCLIBDIR)\\scicos_flcc.lib $(LCCLIBDIR)\\scicos_blockslcc.lib $(LCCLIBDIR)\\scicos_blocks_flcc.lib';
163 fd=mopen(Makename,"w");
164 mfprintf(fd,"# ------------------------------------------------------------\n");
165 mfprintf(fd,"# generated by builder.sce (lcc 1): Please do not edit this file\n");
166 mfprintf(fd,"# ------------------------------------------------------------\n\n");
167 mfprintf(fd,"SCIDIR =%s\n",SCI);
168 mfprintf(fd,"LCCLIBDIR =%s\n",getshortpathname(SCIHOME+filesep()+'lcclib'));
169 mfprintf(fd,"SCIDIR1 =%s\n",pathconvert(SCI,%f,%f,'w'));
170 mfprintf(fd,"DUMPEXTS=""$(SCIDIR1)\\bin\\dumpexts""\n");
171 mfprintf(fd,"SCIIMPLIB=$(LCCLIBDIR)\\LibScilablcc.lib $(LCCLIBDIR)\\blaspluslcc.lib $(LCCLIBDIR)\\libf2clcc.lib $(LCCLIBDIR)\\interscilcc.lib $(LCCLIBDIR)\\lapacklcc.lib " + scicoslib +"\n\n");
172 mfprintf(fd,"CC=lcc\n");
173 mfprintf(fd,"LINKER=lcclnk\n");
174 mfprintf(fd,"CFLAGS= -ansic msvcrt.lib -I""$(SCIDIR)/modules/core/includes"" -I""$(SCIDIR)/modules/output_stream/includes"" -I""$(SCIDIR)/libs/f2c"" -I""$(SCIDIR)/modules/mexlib/includes"" -Dmexfunction_=mex$*_ -DmexFunction=mex_$* -DWIN32 -DSTRICT -DFORDLL -D__STDC__ "+ cflags +" \n");
175 mfprintf(fd,"LINKER_FLAGS=-dll -nounderscores\n");
176 mfprintf(fd,"EXTRA_LDFLAGS = "+ ldflags+"\n");
177 mfprintf(fd,"O=.obj\n");
179 mfprintf(fd,"# name of the dll to be built\n");
180 mfprintf(fd,"LIBRARY = %s\n",name);
181 mfprintf(fd,"# list of objects file\n");
182 mfprintf(fd,"OBJS =");
183 for x=files(:)' ; mfprintf(fd," %s$(O)",x);end
185 if typeof(table)<>'list' then
193 mfprintf(fd," %s$(O)",name);
195 for i=1:L , mfprintf(fd," %s$(O)",name+string(i));end
204 // mex files to be added
205 if table(i,3)=='cmex' | table(i,3)=='fmex' | table(i,3)=='Fmex'
206 mfprintf(fd," %s$(O)",table(i,2));
212 mfprintf(fd,"\n\n# added libraries \n");
213 mfprintf(fd,"OTHERLIBS =");
215 for x=libs(:)' ; mfprintf(fd," %s.lib",x);end
220 mfprintf(fd,"\nall :: $(LIBRARY).dll\n");
221 mfprintf(fd,"\n$(LIBRARY).dll: $(OBJS)\n");
222 mfprintf(fd,"\t"+"$(DUMPEXTS) -o ""$(LIBRARY).def"" ""$*"" $(OBJS)\n");
223 mfprintf(fd,"\t"+"$(LINKER) $(LINKER_FLAGS) $(OBJS) $(OTHERLIBS) $(SCIIMPLIB) $(XLIBSBIN) $(TERMCAPLIB) $(EXTRA_LDFLAGS) $*.def -o $(LIBRARY).dll\n\n");
226 managed_ext_obj = ['.obj','.o'];
227 [path_f, file_f, ext_f] = fileparts(x);
228 if or(managed_ext == ext_f) then
229 files(i) = path_f + file_f;
231 files(i) = path_f + file_f + ext_f;
233 mfprintf(fd,"%s$(O):\n",x);
234 mfprintf(fd,"\t"+"$(CC) $(CFLAGS) $*.c\n\n");
239 mfprintf(fd,"\n%s$(O):\n",name);
240 mfprintf(fd,"\t"+"$(CC) $(CFLAGS) $*.c\n");
243 mfprintf(fd,"\n%s$(O):\n",name+string(i));
244 mfprintf(fd,"\t"+"$(CC) $(CFLAGS) $*.c\n");
249 mfprintf(fd,"\nclean:\n");
250 mfprintf(fd,"\t"+"del *.obj\n");
251 mfprintf(fd,"\t"+"del *.dll\n");
252 mfprintf(fd,"\t"+"del *.lib\n");
253 mfprintf(fd,"\t"+"del *.def\n");
258 //---------------------------------------------------------------------------------------