diff --git a/bin/install.pike b/bin/install.pike index b31edb51038c31bd3641ce847e7153e8bed76430..62a1b0464685caec44d8a0829ad8d21fcd17a68c 100644 --- a/bin/install.pike +++ b/bin/install.pike @@ -999,6 +999,84 @@ void make_master(string dest, string master, string lib_prefix) status("Finalizing",master,"done"); } +/* dump modules (and master) */ +void dump_modules() +{ + string master=combine_path(lib_prefix,"master.pike"); + mixed s1=file_stat(master); + mixed s2=file_stat(master+".o"); + mapping(string:mapping(string:string)) options = ([ + "env":getenv()-([ + "PIKE_PROGRAM_PATH":"", + "PIKE_MODULE_PATH":"", + "PIKE_INCLUDE_PATH":"", + "PIKE_MASTER":"", + ]) ]); + + + if(!s1 || !s2 || s1[3]>=s2[3] || redump_all) + { + Process.create_process( ({fakeroot(pike),"-m", + combine_path(vars->SRCDIR,"dumpmaster.pike"), + @(vars->fakeroot?({"--fakeroot="+ + vars->fakeroot}):({})), + master}), options)->wait(); + } + + if(sizeof(to_dump)) + { + rm("dumpmodule.log"); + + foreach(to_dump, string mod) + rm(mod+".o"); + + /* Dump 50 modules at a time */ + + array cmd=({fakeroot(pike) }); + + if(vars->fakeroot) + cmd+=({ + sprintf("-DPIKE_FAKEROOT=%O",vars->fakeroot), + sprintf("-DPIKE_FAKEROOT_OMIT=%O", + Array.map( ({ + getcwd(), + vars->LIBDIR_SRC, + vars->SRCDIR, + vars->TMP_BINDIR, + vars->MANDIR_SRC, + vars->TMP_LIBDIR, + vars->fakeroot, + }), globify)*":"), + "-m",combine_path(vars->TMP_LIBDIR,"master.pike") + }); + + cmd+=({ combine_path(vars->SRCDIR,"dumpmodule.pike"), + +#ifdef USE_GTK + label1?"--distquiet": +#endif + "--quiet"}); + +// werror("%O\n",cmd); + + int offset = 1; + foreach(to_dump/50.0, array delta_dump) + { + Process.create_process(cmd + + ( istty() ? + ({ + "--progress-bar", + sprintf("%d,%d", offset, sizeof(to_dump)) + }) : ({"--quiet"}) ) + + delta_dump, options)->wait(); + + offset += sizeof(delta_dump); + } + + status_clear(1); + } +} + void do_install() { pike=combine_path(exec_prefix,"pike"); @@ -1007,7 +1085,7 @@ void do_install() status1("Installing Pike in %s, please wait...\n", fakeroot(prefix)); } catch { - files_to_install = (int)Stdio.read_file("num_files_to_install"); + files_to_install = (int)Stdio.read_file(combine_path(vars->TMP_BUILDDIR,"num_files_to_install")); if(!export && files_to_install) progress_bar = @@ -1089,90 +1167,20 @@ void do_install() if(err) throw(err); + catch { + Stdio.write_file(combine_path(vars->TMP_BUILDDIR,"num_files_to_install"), + sprintf("%d\n",installed_files)); + to_export+=({ combine_path(vars->TMP_BUILDDIR,"num_files_to_install") }); + }; + + files_to_install=0; if(export) { do_export(); }else{ - string master=combine_path(lib_prefix,"master.pike"); - mixed s1=file_stat(master); - mixed s2=file_stat(master+".o"); - mapping(string:mapping(string:string)) options = ([ - "env":getenv()-([ - "PIKE_PROGRAM_PATH":"", - "PIKE_MODULE_PATH":"", - "PIKE_INCLUDE_PATH":"", - "PIKE_MASTER":"", - ]) ]); - - - if(!s1 || !s2 || s1[3]>=s2[3] || redump_all) - { - Process.create_process( ({fakeroot(pike),"-m", - combine_path(vars->SRCDIR,"dumpmaster.pike"), - @(vars->fakeroot?({"--fakeroot="+ - vars->fakeroot}):({})), - master}), options)->wait(); - } - - catch { - Stdio.write_file("num_files_to_install", - sprintf("%d\n",installed_files)); - }; - files_to_install=0; + dump_modules(); - if(sizeof(to_dump)) - { - rm("dumpmodule.log"); - - foreach(to_dump, string mod) - rm(mod+".o"); - - /* Dump 50 modules at a time */ - - array cmd=({fakeroot(pike) }); - - if(vars->fakeroot) - cmd+=({ - sprintf("-DPIKE_FAKEROOT=%O",vars->fakeroot), - sprintf("-DPIKE_FAKEROOT_OMIT=%O", - Array.map( ({ - getcwd(), - vars->LIBDIR_SRC, - vars->SRCDIR, - vars->TMP_BINDIR, - vars->MANDIR_SRC, - vars->TMP_LIBDIR, - vars->fakeroot, - }), globify)*":"), - "-m",combine_path(vars->TMP_LIBDIR,"master.pike") - }); - - cmd+=({ combine_path(vars->SRCDIR,"dumpmodule.pike"), - -#ifdef USE_GTK - label1?"--distquiet": -#endif - "--quiet"}); - -// werror("%O\n",cmd); - - int offset = 1; - foreach(to_dump/50.0, array delta_dump) - { - Process.create_process(cmd + - ( istty() ? - ({ - "--progress-bar", - sprintf("%d,%d", offset, sizeof(to_dump)) - }) : ({"--quiet"}) ) + - delta_dump, options)->wait(); - - offset += sizeof(delta_dump); - } - - status_clear(1); - } if(progress_bar) /* The last files copied does not really count (should