1be54afc032d7307cc80546d18c1d209f9c240b1
[tatoo.git] / build
1 #!/usr/bin/env ocaml
2
3 let file_content =
4   let buffer = Buffer.create 128 in
5   begin fun f ->
6     Buffer.clear buffer;
7     try
8       let in_f = open_in f in
9       while true do
10         let line = input_line in_f in
11         Buffer.add_string buffer line;
12         Buffer.add_char buffer ' ';
13       done;
14       failwith "finished"
15     with
16       e -> let s = Buffer.contents buffer in s
17   end
18
19 let target = ref [ ]
20 let debug = ref false
21 let profile = ref false
22 let verbose = ref false
23
24 let dir = Sys.getcwd ()
25 let project_root = Filename.dirname Sys.argv.(0)
26
27 let () =
28   for i = 1 to Array.length Sys.argv - 1 do
29     match Sys.argv.(i) with
30     | "-d" -> debug := true
31     | "-p" -> profile := true
32     | "-v" -> verbose := true
33     | x -> target := x :: !target
34   done
35
36 let oprofile = if !profile then " -tag profile " else ""
37 let odebug = if !profile then " -tag debug " else ""
38 let clean_first = ref false
39 let otarget = List.fold_left (fun acc t ->
40   if t = "clean" || t = "-clean" then (clean_first := true; acc)
41   else
42     let t =
43       if Filename.check_suffix t ".otarget" then
44         file_content ((Filename.chop_suffix t ".otarget") ^ ".itarget")
45       else t
46     in
47     t ^ " " ^ acc) "" (if (!target == []) then [ "main.otarget" ] else !target)
48 let overbose = if !verbose then " -classic-display " else ""
49 let () =
50   Sys.chdir project_root;
51   Printf.printf "Entering directory `%s'\n%!" project_root
52 let clean_cmd = if !clean_first then "ocamlbuild -clean;" else ""
53 let build_cmd = if otarget = "" then "" else
54     Printf.sprintf "ocamlbuild -use-ocamlfind %s %s %s %s"
55       overbose  oprofile  odebug otarget
56 let i = Sys.command  (clean_cmd ^ build_cmd)
57 let () = Sys.chdir dir;
58   Printf.printf "Leaving directory `%s'\n%!" project_root
59 let _ = exit i