1
function libn=ilib_for_link(names,files,libs,flag,makename,loadername)
2
// shared library builder for link command
1
function libn=ilib_for_link(names,files,libs,flag,makename,loadername,libname,ldflags,cflags,fflags,cc)
3
// Generate a shared library which can be used by link
5
// names = names of entry points or the name of the library to
6
// be built (when flag == 'g')
7
// files = object files to be built
8
// flag = 'c' or 'f' or '
6
if rhs <= 4 then makename = 'Makelib';end
7
if rhs <= 5 then loadername = 'loader.sce';end
8
// generate a loader file
9
if info==1 then write(%io(2),' generate a loader file');end
10
ilib_link_gen_loader(names,flag,loadername);
11
// generate a Makefile
12
if info==1 then write(%io(2),' generate a Makefile: Makelib');end
13
ilib_link_gen_Make(names,files,libs,makename);
15
if info==1 then write(%io(2),' running the makefile');end
16
libn=ilib_compile('lib'+names(1),makename);
12
if rhs <= 4 then makename = 'Makelib';end
13
if rhs <= 5 then loadername = 'loader.sce';end
14
if rhs <= 6 then libname = ""; end
15
if rhs <= 7 then ldflags = ""; end
16
if rhs <= 8 then cflags = ""; end
17
if rhs <= 9 then fflags = ""; end
18
if rhs <= 10 then cc = ""; end
19
// generate a loader file
20
if info==1 then write(%io(2),' generate a loader file');end
22
ilib_link_gen_loader(names,flag,loadername,libs,libname);
23
// generate a Makefile
24
if info==1 then write(%io(2),' generate a Makefile: Makelib');end
25
ilib_link_gen_Make(names,files,libs,makename,libname,...
26
ldflags,cflags,fflags,cc,flag);
28
if info==1 then write(%io(2),' running the makefile');end
29
if libname=="" then libname = names(1);end
30
libn=ilib_compile('lib'+libname,makename,files);
18
function ilib_link_gen_loader(names,flag,loadername)
33
function ilib_link_gen_loader(names,flag,loadername,libs,libname)
19
34
//------------------------------------
20
comp_target = getenv('COMPILER','NO');
21
if getenv('WIN32','NO')=='OK' then
23
case 'VC++' then lib_suf='dll';
24
case 'ABSOFT' then lib_suf='dll';
28
lib_suf=ilib_unix_soname();
30
fd=mopen(loadername,"w");
31
mfprintf(fd,"// generated by builder.sce: Please do not edit this file\n");
32
mfprintf(fd,"// ------------------------------------------------------\n");
33
mfprintf(fd,"%s_path=get_file_path(''%s'');\n",names(1),loadername);
34
mfprintf(fd,"link(%s_path+''/lib%s.%s'',[",names(1),names(1),lib_suf);
38
mfprintf(fd,"''%s''",names(i))
39
if i <>n ; mfprintf(fd,","); else mfprintf(fd,"],");end
41
mfprintf(fd,"''%s'');\n",flag);
36
if rhs <= 4 then libname = ""; end
37
if rhs <= 3 then libs=[]; end
38
if rhs <= 2 then loadername = 'loader.sce' ; end
39
comp_target = COMPILER;
40
// suffix to be used for dll
41
if with_lcc()==%T then
42
if getenv('WIN32','NO')=='OK' then
46
else if getenv('WIN32','NO')=='OK' then
48
case 'VC++' then lib_suf='dll';
49
case 'ABSOFT' then lib_suf='dll';
53
lib_suf=ilib_unix_soname();
56
if libname=="" then libname = names(1);end
58
fd=mopen(loadername,"w");
59
mfprintf(fd,"// generated by builder.sce: Please do not edit this file\n");
60
mfprintf(fd,"// ------------------------------------------------------\n");
61
mfprintf(fd,"%s_path=get_absolute_file_path(''%s'');\n",libname,basename(loadername+'.x'));
64
if part(libs(i),1)=='/' then
65
mfprintf(fd,"link(''%s.%s'');\n",libs(i),lib_suf);
67
mfprintf(fd,"link(%s_path+''%s.%s'');\n",libname,libs(i),lib_suf);
70
mfprintf(fd,"link(%s_path+''lib%s.%s'',[",libname,libname,lib_suf);
74
mfprintf(fd,"''%s''",names(i))
76
if i <>n ; mfprintf(fd,","); else mfprintf(fd,"],");end
78
mfprintf(fd,"''%s'');\n",flag);
44
function ilib_link_gen_Make(names,files,libs,makename)
82
function ilib_link_gen_Make(names,files,libs,makename,libname,ldflags,cflags,fflags,cc,flag)
45
83
//------------------------------------
46
84
// generate a Makefile for gateway
47
comp_target = getenv('COMPILER','NO');
48
if getenv('WIN32','NO')=='OK' then
50
case 'VC++' then Makename = makename+'.mak'
51
case 'ABSOFT' then Makename = makename+'.amk'
52
else Makename = makename;
54
ilib_link_gen_Make_win32(names,files,libs,Makename)
57
ilib_link_gen_Make_unix(names,files,libs,Makename)
60
function ilib_link_gen_Make_unix(names,files,libs,Makename)
61
fd=mopen(Makename,"w");
62
mfprintf(fd,"# generated by builder.sce: Please do not edit this file\n");
63
mfprintf(fd,"# ------------------------------------------------------\n");
64
mfprintf(fd,"SCIDIR = %s\n",SCI);
65
mfprintf(fd,"OBJS = ")
66
for x=files(:)' ; mfprintf(fd," %s",x);end
68
mfprintf(fd,"OTHERLIBS = ")
69
for x=libs(:)' ; mfprintf(fd," %s",x);end
71
mfprintf(fd,"LIBRARY = lib%s\n",names(1));
72
mfprintf(fd,"include $(SCIDIR)/Makefile.incl\n");
73
mfprintf(fd,"CFLAGS = $(CC_OPTIONS)\n");
74
mfprintf(fd,"FFLAGS = $(FC_OPTIONS)\n");
75
mfprintf(fd,"include $(SCIDIR)/config/Makeso.incl\n");
78
function ilib_link_gen_Make_win32(names,files,libs,Makename)
79
fd=mopen(Makename,"w");
80
mfprintf(fd,"# generated by builder.sce: Please do not edit this file\n");
81
mfprintf(fd,"# ------------------------------------------------------\n");
82
mfprintf(fd,"SHELL = /bin/sh\n");
83
mfprintf(fd,"SCIDIR =%s\n",SCI);
84
mfprintf(fd,"SCIDIR1 =%s\n",WSCI);
85
mfprintf(fd,"# name of the dll to be built\n");
86
mfprintf(fd,"LIBRARY = lib%s\n",names(1));
87
mfprintf(fd,"# list of objects file\n");
88
mfprintf(fd,"OBJS =");
89
for x=files(:)' ; mfprintf(fd," %s",strsubst(x,".o",".obj"));end
90
mfprintf(fd,"# added libraries \n");
91
mfprintf(fd,"OTHERLIBS = ");
92
for x=libs(:)' ; mfprintf(fd," %s",x);end
93
mfprintf(fd,"\n################ do not edit below this line ############################\n");
94
mfprintf(fd,"!include $(SCIDIR1)\\config\\Makedll.incl \n");
86
if rhs <= 2 then libs = [];end
87
if rhs <= 3 then makename = 'Makelib';end
88
if rhs <= 4 then libname = "";end
89
if rhs <= 5 then ldflags = ""; end
90
if rhs <= 6 then cflags = ""; end
91
if rhs <= 7 then fflags = ""; end
92
if rhs <= 8 then cc = ""; end
93
if rhs <= 9 then flag = "c"; end
94
comp_target = COMPILER;
95
if with_lcc()==%T then
96
Makename = makename+'.lcc';
97
ilib_link_gen_Make_lcc(names,files,libs,Makename,libname,...
98
ldflags,cflags,fflags,cc,flag)
99
else if getenv('WIN32','NO')=='OK' then
101
case 'VC++' then Makename = makename+'.mak'
102
ilib_link_gen_Make_win32(names,files,libs,Makename,libname,...
103
ldflags,cflags,fflags,cc)
104
case 'ABSOFT' then Makename = makename+'.amk'
105
ilib_link_gen_Make_win32(names,files,libs,Makename,libname,...
106
ldflags,cflags,fflags,cc)
110
ilib_link_gen_Make_unix(names,files,libs,Makename,libname,...
111
ldflags,cflags,fflags,cc)
114
ilib_link_gen_Make_win32(names,files,libs,Makename,libname,...
115
ldflags,cflags,fflags,cc)
119
ilib_link_gen_Make_unix(names,files,libs,Makename,libname,...
120
ldflags,cflags,fflags,cc)
125
function ilib_link_gen_Make_unix(names,files,libs,Makename,libname, ...
126
ldflags,cflags,fflags,cc)
128
if libname=="" then libname = names(1);end
130
fd=mopen(Makename,"w");
131
mfprintf(fd,"# generated by builder.sce: Please do not edit this file\n");
132
mfprintf(fd,"# ------------------------------------------------------\n");
133
mfprintf(fd,"SCIDIR = %s\n",SCI);
134
mfprintf(fd,"OBJS = ")
135
for x=files(:)' ; mfprintf(fd," %s",x);end
137
mfprintf(fd,"OTHERLIBS = ")
138
for x=libs(:)' ; mfprintf(fd," %s",x);end
140
mfprintf(fd,"LIBRARY = lib%s\n",libname);
141
mfprintf(fd,"include $(SCIDIR)/Makefile.incl\n");
143
mfprintf(fd,"CC="+cc+ "\n");
145
if getenv('WIN32','NO')=='OK' then
147
mfprintf(fd,"OTHERLIBS = ");
148
for x=libs(:)' ; mfprintf(fd," %s.a",x);end
150
mfprintf(fd,"CFLAGS = $(CC_OPTIONS) -DFORDLL -I\""$(SCIDIR)/routines\"""+...
151
" -Dmexfunction_=mex$*_ -DmexFunction=mex_$* "+ cflags +" \n");
152
mfprintf(fd,"FFLAGS = $(FC_OPTIONS) -DFORDLL -I\""$(SCIDIR)/routines\"""+...
153
" -Dmexfunction=mex$* "+ fflags +"\n");
155
mfprintf(fd,"CFLAGS = $(CC_OPTIONS) "+cflags+ "\n");
156
mfprintf(fd,"FFLAGS = $(FC_OPTIONS) "+fflags+ "\n");
158
mfprintf(fd,"EXTRA_LDFLAGS = "+ ldflags+ "\n");
159
if getenv('WIN32','NO')=='OK' then
160
// cygwin assumed : we use a specific makedll
161
// and not libtool up to now XXX
162
mfprintf(fd,"include $(SCIDIR)/config/Makecygdll.incl\n");
164
mfprintf(fd,"include $(SCIDIR)/config/Makeso.incl\n");
169
function ilib_link_gen_Make_win32(names,files,libs,Makename,libname,ldflags, ...
172
if libname=="" then libname = names(1);end
173
fd=mopen(Makename,"w");
174
mfprintf(fd,"# generated by builder.sce : Please do not edit this file\n");
175
mfprintf(fd,"# ------------------------------------------------------\n");
176
mfprintf(fd,"SCIDIR =%s\n",SCI);
177
mfprintf(fd,"SCIDIR1 =%s\n",WSCI);
178
mfprintf(fd,"# name of the dll to be built\n");
179
mfprintf(fd,"LIBRARY = lib%s\n",libname);
180
mfprintf(fd,"# list of objects file\n");
181
mfprintf(fd,"OBJS =");
182
for x=files(:)' ; mfprintf(fd," %s",strsubst(x,".o",".obj"));end
183
mfprintf(fd,"\n# added libraries \n");
184
mfprintf(fd,"OTHERLIBS = ");
185
for x=libs(:)' ; mfprintf(fd," %s.ilib",x);end
187
mfprintf(fd,"!include $(SCIDIR1)\\Makefile.incl.mak\n");
189
mfprintf(fd,"CC="+cc+ "\n");
191
mfprintf(fd,"CFLAGS = $(CC_OPTIONS) -DFORDLL -I\""$(SCIDIR)/routines\"""+...
192
" -Dmexfunction_=mex$*_ -DmexFunction=mex_$* "+ cflags +" \n");
193
mfprintf(fd,"FFLAGS = $(FC_OPTIONS) -DFORDLL -I\""$(SCIDIR)/routines\"""+...
194
" -Dmexfunction=mex$* "+ fflags +"\n");
195
mfprintf(fd,"EXTRA_LDFLAGS = "+ ldflags+"\n");
196
mfprintf(fd,"!include $(SCIDIR1)\\config\\Makedll.incl \n");
200
//----------------------------------------------------------------------------------------------
201
function ilib_link_gen_Make_lcc(names,files,libs,Makename,libname,ldflags,cflags,fflags,cc,flag)
205
if libname == "" then libname = names(1);end
206
fd=mopen(Makename,"w");
207
mfprintf(fd,"# ------------------------------------------------------------\n");
208
mfprintf(fd,"# generated by builder.sce (lcc): Please do not edit this file\n");
209
mfprintf(fd,"# ------------------------------------------------------------\n\n");
210
mfprintf(fd,"SCIDIR =%s\n",SCI);
211
mfprintf(fd,"SCIDIR1 =%s\n",WSCI);
212
mfprintf(fd,"DUMPEXTS=""$(SCIDIR1)\\bin\\dumpexts""\n");
213
mfprintf(fd,"SCIIMPLIB=$(SCIDIR1)\\bin\\LibScilablcc.lib\n\n");
214
mfprintf(fd,"CC=lcc\n");
215
mfprintf(fd,"LINKER=lcclnk\n");
216
//mfprintf(fd,"CFLAGS=-I""$(SCIDIR)/routines"" -Dmexfunction_=mex$*_ -DmexFunction=mex_$* "+ cflags +" \n");
217
mfprintf(fd,"CFLAGS=-I""$(SCIDIR)/routines"" -I""$(SCIDIR)/routines/f2c"" -Dmexfunction_=mex$*_ -DmexFunction=mex_$* -DWIN32 -DSTRICT -DFORDLL -D__STDC__ "+ cflags +" \n");
218
mfprintf(fd,"LINKER_FLAGS=-dll -nounderscores\n");
219
mfprintf(fd,"EXTRA_LDFLAGS = "+ ldflags+"\n");
220
mfprintf(fd,"O=.obj\n");
222
mfprintf(fd,"# name of the dll to be built\n");
223
mfprintf(fd,"LIBRARY = lib%s\n",libname);
224
mfprintf(fd,"\n# list of objects file\n");
227
mfprintf(fd,"OBJSC =");
229
x=strsubst(x,".obj","");
230
x=strsubst(x,".o","");
231
mfprintf(fd," %s$(O)",x);
234
mfprintf(fd,"\nOBJSF=\n");
236
mfprintf(fd,"OBJSC =\n");
237
mfprintf(fd,"\nOBJSF=");
239
x=strsubst(x,".obj","");
240
x=strsubst(x,".o","");
241
mfprintf(fd," %s$(O)",x);
245
mfprintf(fd,"\nOBJS = $(OBJSC) $(OBJSF)\n");
247
mfprintf(fd,"\n# added libraries \n");
248
mfprintf(fd,"OTHERLIBS =");
250
mfprintf(fd," %s.ilib",x);
254
mfprintf(fd,"\nall :: $(LIBRARY).dll\n");
255
mfprintf(fd,"\n$(LIBRARY).dll: $(OBJS)\n");
256
mfprintf(fd," $(DUMPEXTS) -o ""$(LIBRARY).def"" ""$*"" $(OBJS)\n");
257
mfprintf(fd," $(LINKER) $(LINKER_FLAGS) $(OBJS) $(OTHERLIBS) $(SCIIMPLIB) $(XLIBSBIN) $(TERMCAPLIB) $(EXTRA_LDFLAGS) $*.def -o $(LIBRARY).dll\n\n");
261
x=strsubst(x,".obj","");
262
x=strsubst(x,".o","");
263
mfprintf(fd,"%s$(O):\n",x);
265
mfprintf(fd," $(CC) $(CFLAGS) $*.c\n\n");
267
mfprintf(fd," @$(SCIDIR1)\\bin\\f2c.exe $*.f \n");
268
mfprintf(fd," @$(CC) $(CFLAGS) $*.c \n");
269
mfprintf(fd," del $*.c \n");
273
mfprintf(fd,"clean:\n");
274
mfprintf(fd," del *.obj\n");
275
mfprintf(fd," del *.dll\n");
276
mfprintf(fd," del *.lib\n");
277
mfprintf(fd," del *.def\n");
281
//----------------------------------------------------------------------------------------------
b'\\ No newline at end of file'