v1.01
[apc.git] / OMakeroot
blob98de870764bd2311c820d2d024973f677950ea2f
1 OMakeFlags (-w)
3 .ORDER: .caml-order
4 .caml-order: %.cmi: %.cmo
5 .caml-order: %.cmx: %.cmo
7 caml-sort(files) =
8     return $(file-sort .caml-order, $(files))
10 collect-includes(flags) =
11     dirs[] =
12     next = false
13     foreach (f, $(flags))
14         if $(next)
15             dirs += $f
16             next = false
17             export
18         else
19             f = $(string $f)
20             l = $(f.length)
21             if $(and $(gt $l, 1), \
22                      $(and $(equal $(f.nth 0), -), \
23                            $(equal $(f.nth 1), I)))
24                 if $(gt $l, 2)
25                     dirs += $(removeprefix -I, $f)
26                     export
27                 else
28                     next = true
29                     export
30                 export
31             export
32         export
33     return $(dirs)
35 Shell. +=
36     pr-list(argv) =
37         foreach(a, $(argv))
38             println($a)
40     eecho(argv) =
41         eprintln($(string $(argv)))
43     cmo-scan(argv) =
44         emacs-helper = directory $"`"$(absname $(dirof $<))\'
45         eecho "make[0]: Entering $(emacs-helper)"
46         cd $(dirof $<)
47         ocamldep $(depflags) $(basename $<)
48         eecho "make[0]: Leaving $(emacs-helper)"
50     cmx-scan(argv) =
51         emacs-helper = directory $"`"$(absname $(dirof $<))\'
52         eecho "make[0]: Entering $(emacs-helper)"
53         cd $(dirof $<)
54         ocamldep $(depflags) $(basename $<)
55         eecho "make[0]: Leaving $(emacs-helper)"
57 ocamlc(name, flags) =
58     s = $(name).ml
59     i = $(name).mli
60     o = $(name).cmo
61     I = $(name).cmi
63     depflags = $(mapprefix -I, $(collect-includes $(flags)))
65     .SCANNER: %.cmo.scan: %.ml
66         cmo-scan
68     if $(file-exists $i)
69         .SCANNER: %.cmi.scan: %.mli
70             cmo-scan
72         $o: $I
73         $I: $i :scanner: $I.scan
74             ocamlc $(flags) -c -o $I $(absname $i)
76         $o: $s :scanner: $o.scan
77             ocamlc $(flags) -c -o $o $(absname $s)
78     else
79         $o $I: $s :scanner: $o.scan
80             ocamlc $(flags) -c -o $o $(absname $s)
82 ocamlopt(name, flags) =
83     s = $(name).ml
84     i = $(name).mli
85     o = $(name).cmx
86     I = $(name).cmi
87     O = $(name).o
89     depflags = $(mapprefix -I, $(collect-includes $(flags)))
91     .SCANNER: %.cmx.scan: %.ml
92         cmx-scan
94     if $(file-exists $i)
95         .SCANNER: %.cmi.scan: %.mli
96             cmx-scan
98 #        $o: $I
99 #        $I: $i :scanner: $I.scan
100 #            ocamlopt $(flags) -c -o $I $(absname $i)
102         $o $O: $s :scanner: $o.scan
103             ocamlopt $(flags) -c -o $o $(absname $s)
104     else
105         $o $O: $s :scanner: $o.scan
106             ocamlopt $(flags) -c -o $o $(absname $s)
108 Mocamlc(names, flags) =
109     foreach (n, $(names))
110         ocamlc ($n, $(flags))
112 Mocamlopt(names, flags) =
113     foreach (n, $(names))
114         ocamlopt ($n, $(flags))
116 cc(name, flags) =
117     s = $(name).c
118     o = $(name).o
120     .SCANNER: %.o.scan: %.c
121         gcc $(flags) -MM -MT $* $<
123     $o: $s :scanner: $o.scan
124         gcc $(flags) -c -o $@ $<
126 ocamlcc(name, flags) =
127     s = $(name).c
128     o = $(name).o
130     .SCANNER: %.o.scan: %.c
131         ocamlc -ccopt "$(flags) -MM -MT $o" -cc gcc $<
133     $o: $s :scanner: $o.scan
134         ocamlc -ccopt "$(flags) -o $o" -cc gcc $<
136 Mcc(names, flags) =
137     foreach (n, $(names))
138         cc($n, $(flags))
140 Mocamlcc(names, flags) =
141     foreach (n, $(names))
142         ocamlcc($n, $(flags))
144 if $(not $(defined srcdir))
145     srcdir = $(absname $(dirof OMakeroot))
146     export srcdir
148 mkdir -p build
149 add-project-directories (build .)
150 vmount ($(srcdir), build)
151 .SUBDIRS: build