LVal filter_sbcl_uri(LVal v) { char* str=subseq(firsts(v),-3,0); if(strcmp(str,"bz2")==0 || strcmp(str,"msi")==0) { char* u=uname(); char* m=uname_m(); char *third,*fourth; char *m2; int i; char* tmp=file_namestring(q(firsts(v))); LVal ret= split_string(tmp,"-"); s(tmp); third=firsts(nthcdr(2,ret)); fourth=firsts(nthcdr(3,ret)); if(strcmp(third,"x86")==0 && strcmp(fourth,"64")==0) { m2=q("x86-64"); i=4; }else { m2=q(third); i=3; } i=(strcmp(m2,m)==0 && strcmp(firsts(nthcdr(i,ret)),u)==0); s(m2),s(str),s(m),s(u),sL(ret); return i?toNumber(1):0; } s(str); return 0; }
char* ccl_binname(char* bit) { char* ret=q(""); char* _uname_m=uname_m(); char* _uname=uname_s(); if(strcmp(_uname,"linux")==0) { if(strcmp(_uname_m,"armhf")!=0) ret=s_cat(ret,q("l"),NULL); }else if(strcmp(_uname,"windows")==0) { ret=s_cat(ret,q("w"),NULL); }else if(strcmp(_uname,"darwin")==0) { ret=s_cat(ret,q("d"),NULL); }else if(strcmp(_uname,"freebsd")==0) { ret=s_cat(ret,q("f"),NULL); } if(strcmp(_uname_m,"x86-64")==0 || strcmp(_uname_m,"x86")==0) { ret=s_cat(ret,q("x86"),NULL); }else if(strcmp(_uname_m,"armhf")==0) ret=s_cat(ret,q("arm"),NULL); ret=s_cat(ret,q("cl"),NULL); if((strcmp(_uname_m,"x86-64")==0 && strcmp(bit,"32")!=0) || (strcmp(_uname_m,"x86")==0 && strcmp(bit,"64")==0)) ret=s_cat(ret,q("64"),NULL); return ret; }
int cmd_uname (int argc,char **argv,struct sub_command* cmd) { if(argc==1) { printf("%s\n",uname()); }else if(argc==2) { if(strcmp(argv[1],"-m")==0) printf("%s\n",uname_m()); } return 0; }
char* sbcl_bin(char* file) { char* str; LVal ret3,ret2,ret; cond_printf(1,"uname=%s uname-m=%s\n",uname(),uname_m()); ret=atag_list(file); ret2=remove_if_not1(filter_sbcl_uri,ret); if(ret2==(LVal)NULL) { fprintf(stderr,"this architecture is not supported.stop\n"); exit(1); } if(verbose&2) print_list(ret2); ret3= split_string(firsts(ret2),"-"); str=q(firsts(nthcdr(1,ret3))); sL(ret),sL(ret2),sL(ret3); return str; }
char* extract_command_str(int flags,const char *filename,int do_extract,const char* outputpath,char* type) { char* str; char* _uname_m=uname_m(); char* _uname=uname(); char* _homedir=configdir(); char* exe=s_escape_string(cat(_homedir,"impls",SLASH,_uname_m,SLASH,_uname,SLASH,"7za",SLASH,"9.20",SLASH,"7za.exe",NULL)); char *outputpath2=q(outputpath); char *filename2=q(filename); substitute_char('\\','/',outputpath2); outputpath2=s_escape_string(outputpath2); filename2=s_escape_string(filename2); ensure_directories_exist(outputpath2); if(strcmp(type,"gzip")==0 || strcmp(type,"bzip2")==0 || strcmp(type,"xz")==0) { str=cat("cmd /c \"",exe," ",do_extract?"x ":"l ",filename2," -so |",exe," x -ttar -si -y -o",outputpath2,"\"",NULL); }else if(strcmp(type,"7za")==0) { ensure_directories_exist(outputpath2); str=cat(exe," ",do_extract?"x":"t"," -y -o",outputpath2," ",filename2,NULL); } s(outputpath2),s(filename2),s(_homedir),s(_uname),s(_uname_m); return str; }
char* ccl_binname(void) { char* ret=q(""); char* _uname_m=uname_m(); char* _uname=uname(); if(strcmp(_uname,"linux")==0) { if(strcmp(_uname_m,"armhf")!=0) ret=s_cat(ret,q("l"),NULL); }else if(strcmp(_uname,"windows")==0) { ret=s_cat(ret,q("w"),NULL); }else if(strcmp(_uname,"darwin")==0) { ret=s_cat(ret,q("d"),NULL); } if(strcmp(_uname_m,"x86-64")==0 || strcmp(_uname_m,"x86")==0) { ret=s_cat(ret,q("x86"),NULL); }else if(strcmp(_uname_m,"armhf")==0) ret=s_cat(ret,q("arm"),NULL); ret=s_cat(ret,q("cl"),NULL); if(strcmp(_uname_m,"x86-64")==0) ret=s_cat(ret,q("64"),NULL); return ret; }
int cmd_install(int argc,char **argv,struct sub_command* cmd) { install_cmds *cmds=NULL; struct install_options param; quicklisp=1; param.os=uname(); param.arch=uname_m(); param.arch_in_archive_name=0; param.expand_path=NULL; if(argc!=1) { int ret=1,k; for(k=1;k<argc;++k) { int i,pos; param.impl=argv[k]; pos=position_char("/",param.impl); if(pos!=-1) { param.version=subseq(param.impl,pos+1,0); param.impl=subseq(param.impl,0,pos); }else { param.version=NULL; param.impl=q(param.impl); } for(install_impl=NULL,i=0;i<sizeof(impls_to_install)/sizeof(struct install_impls*);++i) { struct install_impls* j=impls_to_install[i]; if(strcmp(param.impl,j->name)==0) { install_impl=j; } } if(install_impl) { for(cmds=install_impl->call;*cmds&&ret;++cmds) ret=(*cmds)(¶m); if(ret) { // after install latest installed impl/version should be default for 'run' struct opts* opt=global_opt; struct opts** opts=&opt; char* home=configdir(); char* path=cat(home,"config",NULL); char* v=cat(param.impl,".version",NULL); char* version=param.version; if(!install_impl->util) { int i; for(i=0;version[i]!='\0';++i) if(version[i]=='-') version[i]='\0'; set_opt(opts,"default.lisp",param.impl,0); set_opt(opts,v,version,0); save_opts(path,opt); } s(home),s(path),s(v); } }else { char* lisp_path=lispdir(); int i,j,argc_; char** tmp; char* install_ros=s_cat2(lisp_path,q("install.ros")); if(verbose&1) { fprintf(stderr,"%s is not implemented internal. %s argc:%d\n",param.impl,install_ros,argc); for(i=0;i<argc;++i) fprintf(stderr,"%s:",argv[i]); fprintf(stderr,"\n"); } tmp=(char**)alloc(sizeof(char*)*(argc+9)); i=0; tmp[i++]=q("--"); tmp[i++]=install_ros; tmp[i++]=q("install"); tmp[i++]=q(argv[1]); for(j=2;j<argc;tmp[i++]=q(argv[j++])); argc_=i; if(verbose&1) { int j; fprintf(stderr,"argc_=%d",argc_); for(j=0;j<argc_;++j) fprintf(stderr,"argv[%d]=%s,",j,tmp[j]); } for(i=0;i<argc_;i+=proccmd(argc_-i,&tmp[i],top_options,top_commands)); for(j=0;j<argc_;s(tmp[j++])); dealloc(tmp); return 0; } if(param.version)s(param.version); s(param.impl),s(param.arch),s(param.os); s(param.expand_path); if(!ret) exit(EXIT_FAILURE); } }else { char* tmp[]={"help","install"}; proccmd(2,tmp,top_options,top_commands); exit(EXIT_SUCCESS); } return 0; }