-
Fredrik Hübinette (Hubbe) authored
Rev: bin/parse_install_log:1.3
Fredrik Hübinette (Hubbe) authoredRev: bin/parse_install_log:1.3
parse_install_log 2.90 KiB
#!/usr/local/bin/pike
string basename(string s)
{
return (s/"/")[-1];
}
mapping install_from=([]);
mapping fake_dirs=([]);
void install(string from, string to)
{
if(search(from,"/CVS/")!=-1) return;
install_from[combine_path(".",to)]=combine_path(".",from);
}
int main(int argc, string *argv)
{
string srcdir=argv[1];
string prefix=argv[2];
string *lines=Stdio.stdin->read(0x7fffffff)/"\n";
foreach(lines, string line)
{
string *args=line/" ";
args[0]=basename(args[0]);
Getopt.find_all_options(args,
({
({"ignore",Getopt.NO_ARG,"-cvf"}),
}),
0,
0);
args=Getopt.get_args(args,0,0);
switch(args[0])
{
case "mkdir":
for(int e=1;e<sizeof(args);e++)
fake_dirs[args]=1;
break;
case "install":
case "cp":
mixed s=file_stat(args[-1]);
if((s && s[1]==-2) || sizeof(args)>3 || fake_dirs[s])
{
for(int e=1;e<sizeof(args)-1;e++)
install(args[e], combine_path(args[-1],basename(args[e])));
}else{
install(args[1], args[2]);
}
}
}
string dirname=replace(version()," ","-");
#if constant(uname)
mixed u=uname();
if(u->sysname=="AIX")
dirname+="-"+u->sysname+"-"+u->version+"."+u->release;
else
dirname+="-"+u->sysname+"-"+u->release+"-"+u->machine;
dirname=replace(dirname,"/","-");
#endif
Process.system("rm -rf "+dirname);
mkdir(dirname);
chmod(dirname,0755);
mkdir(dirname+"/files");
chmod(dirname+"/files",0755);
Process.system("cp "+
srcdir+"/install-sh "+
srcdir+"/COPYING "+
srcdir+"/COPYRIGHT "+
srcdir+"/DISCLAIMER "+
srcdir+"/../ANNOUNCE "+
dirname);
chmod(dirname+"/install-sh",0755);
mapping new_install_from=([]);
int fileno;
foreach(sort(indices(install_from)), mixed i)
{
Process.system("cp "+install_from[i]+" "+dirname+"/files/"+fileno);
new_install_from[i]="files/"+fileno;
fileno++;
}
string script="#!/bin/sh\n";
script+="cat <<\EOF\n";
script+=
"This script will install "+version()+" on this machine.\n"
"The following directories will be created if they do not\n"
"already exist:\n"
"\n"
" "+prefix+"/bin/\n"
" "+prefix+"/lib/pike/\n"
" "+prefix+"/include/pike/\n"
"\n"
"Do you wish to continue? \n"
"EOF\n"
"if read answer ; then\n"
" case x$answer in\n"
" xy* | xY*) ;;\n"
" *) echo See you later. ; exit 0\n"
" esac\n"
"else\n"
" :\n"
"fi\n"
;
foreach(sort(indices(new_install_from)), mixed i)
{
script+=
sprintf("echo installing %s\n",i)+
sprintf("if test -f %s ; then mv -f %s %s.old ; else : ; fi\n",i,i,i)+
sprintf("./install-sh %s %s\n",new_install_from[i],i);
}
rm(dirname+"/install");
Stdio.write_file(dirname+"/install",script);
chmod(dirname+"/install",0755);
Process.system("tar cvf - "+dirname+" | gzip -9 >"+dirname+".tar.gz");
}