~ubuntu-branches/ubuntu/hoary/scilab/hoary

« back to all changes in this revision

Viewing changes to macros/util/ilib_for_link.sci

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2005-01-09 22:58:21 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050109225821-473xr8vhgugxxx5j
Tags: 3.0-12
changed configure.in to build scilab's own malloc.o, closes: #255869

Show diffs side-by-side

added added

removed removed

Lines of Context:
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)
 
2
// Copyright Enpc 
 
3
// Generate a shared library which can be used by link 
 
4
// command. 
 
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 '
3
9
// 
4
 
[lhs,rhs]=argn(0);
5
 
info=1
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);
14
 
// we call make
15
 
if info==1 then write(%io(2),'   running the makefile');end
16
 
libn=ilib_compile('lib'+names(1),makename);
 
10
  [lhs,rhs]=argn(0);
 
11
  info=1
 
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
 
21
  
 
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);
 
27
  // we call make
 
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);
 
31
endfunction
17
32
 
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
22
 
  select comp_target
23
 
        case 'VC++'   then lib_suf='dll';
24
 
        case 'ABSOFT' then lib_suf='dll';
25
 
        else lib_suf='dll';
26
 
  end
27
 
else
28
 
  lib_suf=ilib_unix_soname();
29
 
end
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);
35
 
names=names(:)';
36
 
n = size(names,'*');
37
 
for i=1:n
38
 
  mfprintf(fd,"''%s''",names(i))
39
 
  if i <>n ; mfprintf(fd,","); else mfprintf(fd,"],");end
40
 
end
41
 
mfprintf(fd,"''%s'');\n",flag);
42
 
mclose(fd);
 
35
  rhs=argn(2)
 
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
 
43
                lib_suf='dll';
 
44
        end
 
45
  
 
46
  else if getenv('WIN32','NO')=='OK' then
 
47
        select comp_target
 
48
                case 'VC++'   then lib_suf='dll';
 
49
                case 'ABSOFT' then lib_suf='dll';
 
50
                else lib_suf='dll';
 
51
        end
 
52
        else
 
53
                lib_suf=ilib_unix_soname();
 
54
        end
 
55
  end
 
56
  if libname=="" then libname = names(1);end 
 
57
    
 
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'));
 
62
  nl=size(libs,'*') 
 
63
  for i=1:nl 
 
64
    if part(libs(i),1)=='/' then
 
65
      mfprintf(fd,"link(''%s.%s'');\n",libs(i),lib_suf);
 
66
    else
 
67
      mfprintf(fd,"link(%s_path+''%s.%s'');\n",libname,libs(i),lib_suf);
 
68
    end
 
69
  end 
 
70
  mfprintf(fd,"link(%s_path+''lib%s.%s'',[",libname,libname,lib_suf);
 
71
  names=names(:)';
 
72
  n = size(names,'*');
 
73
  for i=1:n
 
74
        mfprintf(fd,"''%s''",names(i))
 
75
   
 
76
    if i <>n ; mfprintf(fd,","); else mfprintf(fd,"],");end
 
77
  end
 
78
  mfprintf(fd,"''%s'');\n",flag);
 
79
  mclose(fd);
 
80
endfunction
43
81
 
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
49
 
  select comp_target
50
 
        case 'VC++'   then Makename = makename+'.mak'
51
 
        case 'ABSOFT' then Makename = makename+'.amk'
52
 
        else Makename = makename;
53
 
  end
54
 
  ilib_link_gen_Make_win32(names,files,libs,Makename)
55
 
else
56
 
  Makename = makename;
57
 
  ilib_link_gen_Make_unix(names,files,libs,Makename)
58
 
end
59
 
 
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
67
 
mfprintf(fd,"\n") ;
68
 
mfprintf(fd,"OTHERLIBS = ")
69
 
for x=libs(:)' ; mfprintf(fd," %s",x);end
70
 
mfprintf(fd,"\n") ;
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");
76
 
mclose(fd);
77
 
 
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");
95
 
mclose(fd);
96
 
 
97
 
 
98
 
 
99
 
 
100
 
 
101
 
 
102
 
 
103
 
 
104
 
 
105
 
 
106
 
 
107
 
 
108
 
 
109
 
 
110
 
 
111
 
 
112
 
 
113
 
 
114
 
 
115
 
 
 
85
  [lhs,rhs]=argn(0);
 
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
 
100
    select comp_target
 
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)
 
107
     case 'gcc' then 
 
108
      // cygwin assumed 
 
109
      Makename = makename;
 
110
      ilib_link_gen_Make_unix(names,files,libs,Makename,libname,...
 
111
                              ldflags,cflags,fflags,cc)
 
112
    else 
 
113
       Makename = makename;
 
114
       ilib_link_gen_Make_win32(names,files,libs,Makename,libname,...
 
115
                                ldflags,cflags,fflags,cc)
 
116
    end
 
117
  else
 
118
     Makename = makename;
 
119
     ilib_link_gen_Make_unix(names,files,libs,Makename,libname,...
 
120
                             ldflags,cflags,fflags,cc)
 
121
  end
 
122
  end
 
123
endfunction
 
124
 
 
125
function ilib_link_gen_Make_unix(names,files,libs,Makename,libname, ...
 
126
                                 ldflags,cflags,fflags,cc)
 
127
  
 
128
  if libname=="" then libname = names(1);end 
 
129
    
 
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
 
136
  mfprintf(fd,"\n") ;
 
137
  mfprintf(fd,"OTHERLIBS = ")
 
138
  for x=libs(:)' ; mfprintf(fd," %s",x);end
 
139
  mfprintf(fd,"\n") ;
 
140
  mfprintf(fd,"LIBRARY = lib%s\n",libname);
 
141
  mfprintf(fd,"include $(SCIDIR)/Makefile.incl\n");
 
142
  if cc<>"" then 
 
143
    mfprintf(fd,"CC="+cc+ "\n");
 
144
  end
 
145
  if getenv('WIN32','NO')=='OK' then
 
146
    // cygwin 
 
147
    mfprintf(fd,"OTHERLIBS = ");
 
148
    for x=libs(:)' ; mfprintf(fd," %s.a",x);end
 
149
    mfprintf(fd,"\n");
 
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"); 
 
154
  else
 
155
     mfprintf(fd,"CFLAGS = $(CC_OPTIONS) "+cflags+ "\n");
 
156
     mfprintf(fd,"FFLAGS = $(FC_OPTIONS) "+fflags+ "\n");
 
157
  end
 
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");
 
163
  else
 
164
     mfprintf(fd,"include $(SCIDIR)/config/Makeso.incl\n");
 
165
  end
 
166
  mclose(fd);
 
167
endfunction
 
168
 
 
169
function ilib_link_gen_Make_win32(names,files,libs,Makename,libname,ldflags, ...
 
170
                                  cflags,fflags,cc)
 
171
                                  
 
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
 
186
  mfprintf(fd,"\n");
 
187
  mfprintf(fd,"!include $(SCIDIR1)\\Makefile.incl.mak\n");
 
188
  if cc<>"" then 
 
189
    mfprintf(fd,"CC="+cc+ "\n");
 
190
  end
 
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");
 
197
  mclose(fd);
 
198
endfunction
 
199
 
 
200
//----------------------------------------------------------------------------------------------
 
201
function ilib_link_gen_Make_lcc(names,files,libs,Makename,libname,ldflags,cflags,fflags,cc,flag)
 
202
// Allan CORNET
 
203
// INRIA 2004
 
204
  
 
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");
 
221
 
 
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");
 
225
  
 
226
  if (flag =='c') then
 
227
        mfprintf(fd,"OBJSC =");
 
228
        for x=files(:)' ;
 
229
                x=strsubst(x,".obj","");
 
230
                x=strsubst(x,".o","");
 
231
                mfprintf(fd," %s$(O)",x);
 
232
        end
 
233
  
 
234
        mfprintf(fd,"\nOBJSF=\n");
 
235
  else
 
236
        mfprintf(fd,"OBJSC =\n");
 
237
        mfprintf(fd,"\nOBJSF=");
 
238
        for x=files(:)' ;
 
239
                x=strsubst(x,".obj","");
 
240
                x=strsubst(x,".o","");
 
241
                mfprintf(fd," %s$(O)",x);
 
242
        end
 
243
  end
 
244
  
 
245
  mfprintf(fd,"\nOBJS = $(OBJSC) $(OBJSF)\n");
 
246
  
 
247
  mfprintf(fd,"\n# added libraries \n");
 
248
  mfprintf(fd,"OTHERLIBS =");
 
249
  for x=libs(:)' ;
 
250
        mfprintf(fd," %s.ilib",x);
 
251
  end
 
252
  mfprintf(fd,"\n");
 
253
  
 
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");
 
258
 
 
259
 
 
260
  for x=files(:)' ;
 
261
        x=strsubst(x,".obj","");
 
262
        x=strsubst(x,".o","");
 
263
        mfprintf(fd,"%s$(O):\n",x);
 
264
        if (flag =='c') then
 
265
                mfprintf(fd,"   $(CC) $(CFLAGS) $*.c\n\n");
 
266
        else
 
267
                mfprintf(fd,"   @$(SCIDIR1)\\bin\\f2c.exe $*.f \n");
 
268
                mfprintf(fd,"   @$(CC) $(CFLAGS) $*.c \n");
 
269
                mfprintf(fd,"   del $*.c \n");
 
270
        end
 
271
  end
 
272
        
 
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");
 
278
 
 
279
 mclose(fd);
 
280
endfunction
 
281
//----------------------------------------------------------------------------------------------
 
 
b'\\ No newline at end of file'