#!/usr/bin/env ocaml
-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 read_lines f =
+ let lines = ref [] in
+ let in_f = open_in f in
+ try
+ while true do
+ let line = input_line in_f in
+ if String.length line != 0 then lines := line :: !lines
+ done;
+ []
+ with
+ End_of_file -> close_in in_f; List.rev !lines
+;;
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)
| "-d" -> debug := true
| "-p" -> profile := true
| "-v" -> verbose := true
+ | "-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 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 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")
+ String.concat " " (read_lines ((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 () =
- Sys.chdir project_root;
- Printf.printf "Entering directory `%s'\n%!" project_root
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"
- overbose oprofile odebug otarget
+ 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