diff --git a/bin/export.pike b/bin/export.pike index cdb1df6b579fcdedb07dacae759136397f7bfdd1..7f204d1bcc8f3ca1bc12a22726acaa4ba8aec62b 100755 --- a/bin/export.pike +++ b/bin/export.pike @@ -1,6 +1,6 @@ #!/usr/local/bin/pike -/* $Id: export.pike,v 1.26 1999/08/30 21:49:25 hubbe Exp $ */ +/* $Id: export.pike,v 1.27 1999/09/06 11:01:45 hubbe Exp $ */ #include <simulate.h> import Stdio; @@ -8,6 +8,16 @@ import Stdio; multiset except_modules =(<>); string vpath; + +string dirname(string dir) +{ + array tmp=dir/"/"; + if(tmp[-1]=="") tmp=tmp[..sizeof(tmp)-2]; + tmp=tmp[..sizeof(tmp)-2]; + if(!sizeof(tmp)) return "/"; + return tmp*"/"; +} + string *get_files(string path) { string *files,tmp,*ret; @@ -61,7 +71,7 @@ void fix_configure(string dir) string getversion() { // werror("FNORD:%O\n",getcwd()); - string s=Stdio.read_file("pike/src/version.h"); + string s=Stdio.read_file(pike_base_name+"/src/version.h"); int maj, min, build; @@ -79,19 +89,22 @@ void bump_version() { werror("Bumping release number.\n"); Process.create_process(({ "cvs", "update", "version.h" }), - ([ "cwd":"pike/src" ]))->wait(); + ([ "cwd":pike_base_name+"/src" ]))->wait(); - string s=Stdio.read_file("pike/src/version.h"); + string s=Stdio.read_file(pike_base_name+"/src/version.h"); sscanf(s,"%s PIKE_BUILD_VERSION %d%s",string pre, int rel, string post); rel++; - Stdio.File("pike/src/version.h", "wct")-> + Stdio.File(pike_base_name+"/src/version.h", "wct")-> write(pre+" PIKE_BUILD_VERSION "+rel+post); Process.create_process(({ "cvs", "commit", "-m", "release number bumped to "+rel+" by export.pike", "version.h" }), - ([ "cwd":"pike/src" ]))->wait(); + ([ "cwd":pike_base_name+"/src" ]))->wait(); } +string pike_base_name; +string srcdir; +int rebuild; int main(int argc, string *argv) { @@ -100,20 +113,57 @@ int main(int argc, string *argv) string *files; object cvs; - tmp=reverse(argv[0]/"/"); - except_modules=mklist(argv[1..]); - e=search(tmp,"pike"); - if(e==-1) + + foreach(Getopt.find_all_options(argv,aggregate( + ({ "srcdir", "--srcdir", Getopt.HAS_ARG }), + ({ "rebuild","--rebuild", Getopt.NO_ARG }), + )),array opt) + { + switch(opt[0]) + { + case "srcdir": + srcdir=opt[1]; + if(basename(srcdir)=="src") + srcdir=dirname(srcdir); + pike_base_name=basename(srcdir); + cd(dirname(srcdir)); + break; + + case "rebuild": + rebuild=1; + } + } + + argv=Getopt.get_args(argv); + + if(!srcdir) + { + tmp=reverse(argv[0]/"/"); + except_modules=mklist(argv[1..]); + e=search(tmp,"pike"); + if(e==-1) + { + werror("Couldn't find Pike source dir.\n"); + werror("Use export.pike --srcdir=<dir> <except modules>.\n"); + exit(1); + } + tmp=reverse(tmp[e+1..]); + cd(sizeof(tmp)<1 ? tmp*"/" : "/"); + werror("Sourcedir = "+tmp*"/"+"/pike\n"); + pike_base_name="pike"; + } + + if(rebuild) { - werror("Couldn't find Pike source dir.\n"); - werror("Use /full/path/export.pike <except modules>.\n"); + werror("Not yet finished!\n"); exit(1); + object autoconfig=Process.create_process(({"./run_autoconfig"}), + (["cwd":pike_base_name])); + /* make depend... */ + /* And other things... */ } - tmp=reverse(tmp[e+1..]); - cd(sizeof(tmp)<1 ? tmp*"/" : "/"); - werror("Sourcedir = "+tmp*"/"+"/pike\n"); - if(file_stat("pike/CVS")) + if(file_stat(pike_base_name+"/CVS")) { bump_version(); @@ -122,15 +172,15 @@ int main(int argc, string *argv) werror("Creating tag "+tag+" in the background.\n"); cvs=Process.create_process(({"cvs","tag","-R","-F",tag}), - (["cwd":"pike"])); + (["cwd":pike_base_name])); }else{ vpath=replace(replace(getversion()," ","-"),"-release-","."); } - fix_configure("pike/src"); + fix_configure(pike_base_name+"/src"); - foreach(get_dir("pike/src/modules") - ({"CVS","RCS"}), tmp) - if(file_size("pike/src/modules/"+tmp) == -2) + foreach(get_dir(pike_base_name+"/src/modules") - ({"CVS","RCS"}), tmp) + if(file_size(pike_base_name+"/src/modules/"+tmp) == -2) fix_configure("modules/"+tmp); werror("vpath = %s\n",vpath); @@ -144,7 +194,7 @@ int main(int argc, string *argv) werror("Creating "+vpath+"-indigo.tar.gz:\n"); object o=Stdio.File(); spawn("tar cvf - "+files*" ",0,o->pipe(Stdio.PROP_IPC)); - spawn("gzip -9",o,Stdio.File("pike/"+vpath+"-indigo.tar.gz","wct"))->wait(); + spawn("gzip -9",o,Stdio.File(pike_base_name+"/"+vpath+"-indigo.tar.gz","wct"))->wait(); rm(vpath); werror("Done.\n");