//builder.sce //build modnum_3 package for scilab-3.0 //both linux and windob(with lcc) //13-10-2004 Alan // //Modification : 4/4/2005 //builder rewritten with scilab function //Improvment : Build with VC++ // //Modif. : 13/09/2006 //routines building process reviewed. //works now with ilib_for_link. //rmk : building process no more supported // for scilab-3.0,3.1 // //Modif. : 14/04/2007 //review for windows compilation // // REVISION HISTORY : // $Log$ // //def_MODNUM_path() //Input : nothing //Output : tt MODNUM path (ex:/home/alan/modnum_3) function tt=def_MODNUM_path() tt=get_absolute_file_path('builder.sce'); end_char=part(tt,length(tt)); if end_char=='/'|end_char=='\' then tt=part(tt,1:length(tt)-1); end endfunction //change mode and lines behavior sav_mode=mode(); mode(-1); sav_lines=lines(); sav_lines=sav_lines(2); lines(0); //define MODNUM path MODNUM=def_MODNUM_path(); //Search Scilab Version getf(MODNUM+'/macros/build_util/find_scilab_ver.sci'); [ok]=find_scilab_ver(); if ~ok then printf("modnum toolbox source version only build with scilab >=4.1.2\n"); abort end //open loader.sce file for writting ierror=execstr('u=mopen(MODNUM+""/loader.sce"",""w"");','errcatch'); if ierror<>0 then printf("Can''t write loader file.\nVerify your writting access.\n"); end clear ierror; //write Header of loader.sce file getf(MODNUM+'/macros/build_util/write_header.sci'); write_header(u,'builer.sce') //Build and load util macro library getf(MODNUM+'/macros/build_util/build_lib.sci'); build_lib('/macros/build_util','modnum_build_util'); getf(MODNUM+'/macros/build_util/write_inf_lib.sci'); txt=write_inf_lib(u,'/macros/build_util','modnum_build_util',1); ierr=execstr(txt,'errcatch'); //Build and load all scilab library libs = ['find_file'; 'misc'; 'pll'; 'signal']; rep_lib = '/macros/'+libs; lib_name = 'modnum_'+libs; build_lib(rep_lib,lib_name); txt = write_inf_lib(u,rep_lib,lib_name,1); ierr = execstr(txt,'errcatch'); //Build routines Library printf("Build modnum routines libraries\n"); //Build and load modnum_lib routines printf("Build modnum_lib C routines\n"); path='/../../src'; files=basename(listfiles(MODNUM+path+'/*.c')); libnam="modnum_lib"; //update path of MODNUM for ilib_for_link MODNUM_path=MODNUM; if MSDOS then MODNUM_path=strsubst(MODNUM,'\','\\'); end //Build modnum_lib rep=pwd(); chdir(MODNUM+path); ierr=execstr('ilib_for_link(files,files+''.o'',[],""c"",""Makelib"",""loader.sce"",libnam);','errcatch') chdir(rep); if ierr<>0 then printf("\n Error during compilation inside scilab.\n"+... " Building process of modnum aborted.\n"); mclose(u); clear files, clear libnam; clear scifunc; clear intname; abort; end txt=write_inf_rout_lib(u,'lib'+libnam,path,files,0); ierr=execstr(txt,'errcatch'); //Build and load scilab interface of modnum_lib routines printf("Build Scilab interface of modnum_lib\n"); path='/gateway'; files=basename(listfiles(MODNUM+path+'/*.c')); libnam="intmodnum_lib"; //set CFLAGS if MSDOS then cflag="-I"""+MODNUM_path+"\\..\\..\\src"" -c"; else cflag="-I"""+MODNUM_path+"/../../src"" -c"; end //set LDFLAGS if MSDOS then if fileinfo(MODNUM+'/../../src/libmodnum_lib.ilib')<>[] then ldflag=" """+MODNUM_path+"\\..\\..\\src\\libmodnum_lib.ilib""" else ldflag=" """+MODNUM_path+"\\..\\..\\src\\libmodnum_lib.lib""" end else ldflag="" end //Build modnum_lib rep=pwd(); chdir(MODNUM+path); ierr=execstr('ilib_for_link(files,files+''.o'',[],""c"",""Makelib"",""loader.sce"",libnam,ldflag,cflag);','errcatch') chdir(rep); if ierr<>0 then printf("\n Error during compilation inside scilab.\n"+... " Building process of modnum aborted.\n"); mclose(u); clear files, clear libnam; clear scifunc; clear intname; abort; end //Define interfacing function scifunc=["genint";"genrayl";"upsmpl";"downsmpl";"modpsk";"demodpsk"; "modqam";"demodqam";"genpn";"gengold"; "spread";"despread";"nfilter";"awgn";"intsym"; "autocorr";"data2sig";"sig2data"]; intname="intmodnum_lib"; txt=write_addinter_line(u,'lib'+libnam,path,intname,scifunc); ierr=execstr(txt,'errcatch'); clear files, clear libnam; clear scifunc; clear intname; clear MODNUM_path; clear files_c; clear libnam; clear rep; clear path; clear ierr; clear cflag; clear ldflag;clear i; //Build documentation and demos txt=write_inf_doc(u); ierr=execstr(txt,'errcatch'); if ierr==0 then %helps=%helps; end //flag_doc=build_doc(); //write info for %scicos_contrib txt=write_inf_contrib(u); ierr=execstr(txt,'errcatch'); //Close loader.sce mclose(u); printf("Write a loader.sce file\n"); //write a .scilab file if ~MSDOS then txt=mgetl(MODNUM+'/loader.sce'); mputl(txt,MODNUM+'/.scilab'); printf("Write a .scilab file\n"); end clear u; clear txt; clear ierr; clear ok; //retrieve original mode and lines behavior mode(sav_mode); lines(sav_lines); clear sav_mode; clear sav_lines;