X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitamakeLib.ml;h=55029914ec12e1089f11c7af245b5fe0277ff29c;hb=8ab7608b1f6e6c4babea0f9d0a771e350d481229;hp=534f2dc7383acba7ad01bac7a2b11dd3334112d3;hpb=3e86f296f53e98401b281ce96fc7ba545dbd05b4;p=helm.git diff --git a/helm/matita/matitamakeLib.ml b/helm/matita/matitamakeLib.ml index 534f2dc73..55029914e 100644 --- a/helm/matita/matitamakeLib.ml +++ b/helm/matita/matitamakeLib.ml @@ -125,12 +125,10 @@ let rebuild_makefile development = let rm = BuildTimeConf.runtime_base_dir ^ "/matitaclean" ^ am_i_opt () in let mm = BuildTimeConf.runtime_base_dir ^ "/matitadep" ^ am_i_opt () in let df = pool () ^ development.name ^ "/depend" in - let dfs = pool () ^ development.name ^ "/depend.short" in let template = Pcre.replace ~pat:"@ROOT@" ~templ:development.root template in let template = Pcre.replace ~pat:"@CC@" ~templ:cc template in let template = Pcre.replace ~pat:"@DEP@" ~templ:mm template in let template = Pcre.replace ~pat:"@DEPFILE@" ~templ:df template in - let template = Pcre.replace ~pat:"@DEPFILESHORT@" ~templ:dfs template in let template = Pcre.replace ~pat:"@CLEAN@" ~templ:rm template in MatitaMisc.output_file template makefilepath @@ -175,8 +173,6 @@ let call_make development target make = let build_development ?(target="all") development = call_make development target make -exception CHILD_DEAD - (* not really good vt100 *) let vt100 s = let rex = Pcre.regexp "\\[[0-9;]+m" in @@ -213,10 +209,8 @@ let mk_maker refresh_cb = let out_r,out_w = Unix.pipe () in let err_r,err_w = Unix.pipe () in let pid = ref ~-1 in + ignore(Sys.signal Sys.sigchld (Sys.Signal_ignore)); try - let _ = - Sys.signal Sys.sigchld (Sys.Signal_handle (fun _ -> raise CHILD_DEAD)) - in let argv = Array.of_list ("make"::args) in pid := Unix.create_process "make" argv Unix.stdin out_w err_w; Unix.close out_w; @@ -226,7 +220,9 @@ let mk_maker refresh_cb = | f::tl -> let len = Unix.read f buf 0 1024 in if len = 0 then - raise CHILD_DEAD; + raise + (Unix.Unix_error + (Unix.EPIPE,"read","len = 0 (matita internal)")); vt100 (String.sub buf 0 len); aux tl | _ -> () @@ -237,11 +233,9 @@ let mk_maker refresh_cb = refresh_cb () done; true - with CHILD_DEAD -> - ignore(Sys.signal Sys.sigchld (Sys.Signal_ignore)); - let _, status = Unix.waitpid [] !pid in - match status with | Unix.WEXITED 0 -> true | _ -> false) - + with + | Unix.Unix_error (_,"read",_) + | Unix.Unix_error (_,"select",_) -> true) let build_development_in_bg ?(target="all") refresh_cb development = call_make development target (mk_maker refresh_cb) @@ -253,7 +247,7 @@ let clean_development development = let clean_development_in_bg refresh_cb development = call_make development "clean" (mk_maker refresh_cb) -let destroy_development development = +let destroy_development_aux development clean_development = let delete_development development = let unlink file = try @@ -273,7 +267,6 @@ let destroy_development development = unlink (makefile_for_development development); unlink (pool () ^ development.name ^ rootfile); unlink (pool () ^ development.name ^ "/depend"); - unlink (pool () ^ development.name ^ "/depend.short"); rmdir (pool () ^ development.name); developments := List.filter (fun d -> d.name <> development.name) !developments @@ -284,6 +277,12 @@ let destroy_development development = logger `Warning "This may cause garbage." end; delete_development development + +let destroy_development development = + destroy_development_aux development clean_development + +let destroy_development_in_bg refresh development = + destroy_development_aux development (clean_development_in_bg refresh) let root_for_development development = development.root let name_for_development development = development.name