X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=build;h=f381c946f2e9672364178de169a361afaf584249;hp=4dba7565c4ab9e2b9dc14b9f1d21a9c730cc9ec6;hb=9590bc6b3e882cfb256507be8966917446f84e98;hpb=10aa93a09950c79d316594aa7d4bb62b64c1a60b diff --git a/build b/build index 4dba756..f381c94 100755 --- a/build +++ b/build @@ -1,9 +1,26 @@ #!/usr/bin/env ocaml -let target = ref "main.otarget" +let file_content = + let buffer = Buffer.create 128 in + begin fun f -> + Buffer.clear buffer; + try + let in_f = open_in f in + while true do + let line = input_line in_f in + Buffer.add_string buffer line; + Buffer.add_char buffer ' '; + done; + failwith "finished" + with + e -> let s = Buffer.contents buffer in s + end + +let target = ref [ ] let debug = ref false let profile = ref false let verbose = ref false +let trace = ref false let dir = Sys.getcwd () let project_root = Filename.dirname Sys.argv.(0) @@ -14,21 +31,32 @@ let () = | "-d" -> debug := true | "-p" -> profile := true | "-v" -> verbose := true - | x -> target := x + | "-t" -> trace := true + | x -> target := x :: !target done - +let otrace = if !trace then " -tag htmltrace " else "" let oprofile = if !profile then " -tag profile " else "" -let odebug = if !profile then " -tag debug " else "" -let otarget = if !target = "clean" then " -clean " else !target -let overbose = if !verbose then " -classic-display " else "" +let odebug = if !debug then " -tag debug " else "" +let clean_first = ref false let () = Sys.chdir project_root; Printf.printf "Entering directory `%s'\n%!" project_root -let cmd = Printf.sprintf "ocamlbuild -use-ocamlfind %s %s %s %s" - overbose oprofile odebug otarget -let i = Sys.command cmd +let otarget = List.fold_left (fun acc t -> + if t = "clean" || t = "-clean" then (clean_first := true; acc) + else + let t = + if Filename.check_suffix t ".otarget" then + file_content ((Filename.chop_suffix t ".otarget") ^ ".itarget") + else t + in + t ^ " " ^ acc) "" (if (!target == []) then [ "main.otarget" ] else !target) +let overbose = if !verbose then " -classic-display " else "" +let clean_cmd = if !clean_first then "ocamlbuild -clean;" else "" +let build_cmd = if otarget = "" then "" else + Printf.sprintf "ocamlbuild -use-ocamlfind %s %s %s %s %s" + overbose otrace oprofile odebug otarget +let i = Sys.command (clean_cmd ^ build_cmd) let () = Sys.chdir dir; Printf.printf "Leaving directory `%s'\n%!" project_root let _ = exit i -