7 let jobs, targets
, dodeplist
, dotarlist
= getopt
();;
10 match getval
"src" with
11 | None
-> failwith
"no source dir"
16 cmo
"-g -I +lablGL -thread" [srcdir] srcdir "apc";
18 "-ccopt '-Wall -o ml_apc.o'"
20 (StrSet.singleton
"ml_apc.o")
21 [Filename.concat
srcdir "ml_apc.c"]
25 "-custom -thread -g -I +lablGL lablgl.cma lablglut.cma unix.cma threads.cma"
27 (StrSet.singleton
"apc")
28 ["ml_apc.o"; "apc.cmo"]
32 let moddir = Filename.concat
srcdir "mod" in
33 let modconts = Sys.readdir
moddir in
34 let deps = Array.fold_left
(fun deps s
->
35 if String.length s
> 0 && s
.[0] != '
.'
37 let src = Filename.concat
moddir s
in
38 add_target s
(StrSet.singleton
src) (StrSet.singleton s
) (StrSet.singleton
src);
40 let c = [Run
("cp " ^
Filename.quote
src ^
" " ^
Filename.quote s
)] in
43 State.put_build_info s
build;
47 ) StrSet.empty
modconts
50 let c = [Run
("make")] in
53 add_phony
"mod" deps [];
54 State.put_build_info
"mod" build;
60 let start = Unix.gettimeofday
() in
64 List.iter
State.print_deps targets
68 let built = Unix.handle_unix_error
Build.path path
in
72 then print_endline
(path ^
" has been built")
73 else print_endline
("nothing to be done for " ^ path
)
80 let rec loop i tids
= if i
= jobs then tids
else
81 let tid = Thread.create
(fun () -> iter
build targets
) () in
82 loop (succ i
) (tid :: tids
)
84 let tids = loop 0 [] in
88 Cache.save
!State.Config.cache
;
89 let stop = Unix.gettimeofday
() in
90 Format.eprintf
"build took %f seconds@." (stop -. start);