1 let start = Unix.gettimeofday
();;
9 let jobs, targets
, dodeplist
, dotarlist
= getopt
();;
12 match getval key
with | None
-> failwith msg
| Some s
-> s
16 match getval key
with | None
-> def
| Some s
-> s
19 let srcdir = get "src" "no source dir";;
20 let cc = getdef "cc" "cc";;
21 let ccopt = getdef "ccopt" "";;
22 let mupdflibpath = get "mupdflibpath" "no mupdf libpath";;
23 let libs = getdef "libs" "";;
29 (* Since we are using ocaml instead of gcc to compile this
30 the dep scanning passs is not done, hence this cludge *)
32 (fun s p
-> StrSet.add
(Filename.concat
srcdir p
) s
)
34 ["glfont.c"; "keysym2ucs.c"]
38 ("-cc '" ^
cc ^
"' -ccopt '" ^ flags ^
" " ^
ccopt ^
" -o " ^
o ^
"'")
41 [Filename.concat
srcdir c]
46 let ocaml1 prog flags1 flags2 mainoutput outputs inputs deps f
=
47 let flags = flags1 ^
" -o " ^
Filename.quote mainoutput
in
50 let s = String.concat
" " (map
Filename.quote
(f
())) in
51 [Run
(prog ^
" " ^
flags ^
" " ^
s ^ flags2
)]
53 let cookie _
= prog ^
flags in
54 let presentation _
= "OCAMLC " ^ mainoutput
in
55 { get_commands
= commands
57 ; get_presentation
= presentation
60 let inputs = fold_right
StrSet.add
inputs StrSet.empty
in
61 let deps = StrSet.union
inputs deps in
62 StrSet.iter
(fun output
->
63 put_build_info output
build;
64 let deps = StrSet.remove output
deps in
65 add_target output
inputs outputs
deps
69 let ocaml' prog flags1 flags2 mainoutput outputs
inputs deps =
70 ocaml1 prog flags1 flags2 mainoutput outputs
inputs deps (fun () -> inputs)
74 let so = name ^
".so" in
76 " -L" ^
mupdflibpath ^
" " ^
libs
78 let o = List.map
(fun s -> s ^
".o") objs
in
79 let libs = ["fitz"] in
81 List.fold_left
(fun set s ->
82 let l = "lib" ^
s ^
".a" in
83 let l = Filename.concat
mupdflibpath l in
89 ("-shared -lpthread -o " ^
so ^
mupdf_libs)
102 let mkhelp = Filename.concat
srcdir "mkhelp.sh" in
103 let keystoml = Filename.concat
srcdir "keystoml.ml" in
104 let keys = Filename.concat
srcdir "KEYS" in
105 let cmd = "sh " ^
mkhelp ^
" " ^
keystoml ^
" " ^
keys ^
"> help.ml" in
107 { get_commands
= (fun _ -> [Run
cmd])
108 ; get_cookie
= (fun _ ->
109 let cwd = Sys.getcwd
() in
111 let s = get_cmd_output
"git describe --tags --dirty || echo" in
114 ; get_presentation
= (fun _ -> "KEYSTOML KEYS")
117 put_build_info
"help.ml" build;
118 let sing s = StrSet.singleton
s in
123 (StrSet.add
keys (StrSet.add
mkhelp (sing keystoml)))
125 let so = bso "link" ["link"] in
129 ("-g -I +lablGL lablgl.cma str.cma unix.cma -dllpath "
132 (StrSet.singleton name
)
133 (State.dep_sort cmos
)
137 let dirname = if name
= "help" then Sys.getcwd
() else srcdir in
138 cmopp ~
flags:"-g -w A-7-6-4 -I +lablGL -thread" ~
dirname name
;
141 let cmos = so :: List.map
mkcmo ["help"; "parser"; "wsi"; "main"] in
146 run
start jobs ["help.ml"] false dotarlist
;
147 run
start jobs targets dodeplist dotarlist
;