1 # ------------------------------
3 # ------------------------------
5 if $(not $(defined PREFIX))
10 if $(not $(defined ENABLE_DEBUG))
16 if $(not $(defined ENABLE_NATIVE))
19 value $(ENABLE_NATIVE)
21 if $(file-exists VERSION)
22 VERSION=$(shell head -1 VERSION)
31 if $(not $(OCAMLFIND_EXISTS))
32 eprintln('This project requires ocamlfind, but is was not found.')
33 eprintln('You need to install ocamlfind and run "omake --configure".')
36 # behavior as traditional cpp
37 CPPFLAGS=-traditional-cpp
39 OCAML_WARN_FLAGS=-w A -warn-error A
40 OCAMLFLAGS=$`(OCAML_WARN_FLAGS)
42 .PHONY: all install config clean package
43 # ------------------------------
45 # ------------------------------
48 rm -f *.cm[aiox] *.o *.omc *.opt *.run *~ $(argv) *.cmxa *.a *.spot *.spit *.annot *-runner
50 public.AddDepend(target,files) =
53 echo "$(target) : $(files)"
55 # ------------------------------
57 # ------------------------------
58 public.UseCamlp4(files) =
59 protected.CAMLP4CMO = $(addprefix $(ROOT)/camlp4/,$(addsuffix .cmo,$(files)))
60 OCAMLPPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
61 OCAMLDEPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
64 .SCANNER: scan-ocaml-%.ml: %.ml $(CAMLP4CMO)
66 # ------------------------------
68 # ------------------------------
69 public.MyOCamlPackage(name, files) =
70 # XXX: JYH: these variables should be marked private in 0.9.9
71 protected.OFILES = $(addsuffix $(EXT_OBJ), $(files))
72 protected.CMOFILES = $(addsuffix .cmo, $(files))
73 protected.CMXFILES = $(addsuffix .cmx, $(files))
75 protected.OBJ = $(file $(name)$(EXT_OBJ))
76 protected.CMO = $(file $(name).cmo)
77 protected.CMX = $(file $(name).cmx)
78 protected.CMI = $(file $(name).cmi)
79 protected.MLI = $(file $(name).mli)
81 protected.BYTE_TARGETS = $(CMO)
82 protected.NATIVE_TARGETS = $(CMX) $(OBJ)
84 protected.TARGETS = $(CMI)
86 TARGETS += $(NATIVE_TARGETS)
90 TARGETS += $(BYTE_TARGETS)
96 protected.BYTE_DEPS = $(CMOFILES)
97 if $(and $(not $(NATIVE_ENABLED)), $(target-exists $(MLI)))
101 BYTE_TARGETS += $(CMI)
104 protected.NATIVE_DEPS = $(CMXFILES) $(OFILES)
105 if $(target-exists $(MLI))
106 NATIVE_DEPS += $(CMI)
109 NATIVE_TARGETS += $(CMI)
112 if $(target-exists $(MLI))
113 $(CMI): $(MLI) :scanner: scan-ocaml-$(name).mli
115 elseif $(NATIVE_ENABLED)
116 $(NATIVE_TARGETS) $(CMI): $(NATIVE_DEPS)
117 $(OCAMLFIND) $(OCAMLOPTLINK) $(LAZY_OCAMLFINDFLAGS) $(PREFIXED_OCAMLPACKS) $(OCAMLFLAGS) \
118 $(OCAMLOPTFLAGS) $(OCAML_LIB_FLAGS) -pack -o $(CMX) $(OCamlLinkSort $(CMXFILES))
120 $(BYTE_TARGETS) $(CMI): $(BYTE_DEPS)
121 $(OCAMLFIND) $(OCAMLC) $(LAZY_OCAMLFINDFLAGS) $(PREFIXED_OCAMLPACKS) $(OCAMLFLAGS) \
122 $(OCAMLCFLAGS) $(OCAML_LIB_FLAGS) -pack -o $(CMO) $(OCamlLinkSort $(CMOFILES))
126 # ------------------------------
128 # ------------------------------
132 public.OUnitTest(name,files) =
133 protected.test_file = $(addsuffix Test,$(name))
134 protected.target = $(addsuffix -runner,$(test_file))
135 protected.src_files = $(addprefix $(OUNIT_SRC_DIR),$(files))
137 .PHONY: check check-$(name) clean check-detail-$(name) check-detail
138 OCamlProgram($(target), $(test_file) $(src_files) $(OUNIT_LIBS))
140 check-$(name): $(target)
141 $(addprefix ./,$(target))
143 check-detail-$(name): $(target)
144 ($(addprefix ./,$(target)) -verbose ; true) | tee -a $(ROOT)/unittest.log
147 check-detail: check-detail-$(name)
151 # ------------------------------
153 # ------------------------------
156 @echo "(* CAUTION: this is a generated file. If you edit it, all changes will be lost! *)" > $@
157 $(CPP) $(CPPFLAGS) $*.mlip >> $@
160 .SCANNER: %.mli : %.mlip
161 $(CPP) $(CPPFLAGS) -M $< ; true
165 @echo "(* CAUTION: this is a generated file. If you edit it, all changes will be lost! *)" > $@
166 $(CPP) $(CPPFLAGS) $*.mlp >> $@
169 .SCANNER: %.ml : %.mlp
170 $(CPP) $(CPPFLAGS) -M $< /dev/null ; true
172 # ------------------------------
174 # ------------------------------
175 config: OMakefile.config config.ml
177 .INCLUDE: OMakefile.config
178 if $(mem config,$(TARGETS))
180 if $(and $(defined RELATIVE),$(RELATIVE))
181 echo LIB_DIR=$(PREFIX) >> $@
182 echo SHARE_DIR=$(PREFIX) >> $@
183 echo BIN_DIR=$(PREFIX) >> $@
185 if $(not $(defined LIB_DIR))
186 echo LIB_DIR=$(PREFIX)/lib/habc >> $@
188 echo LIB_DIR=$(LIB_DIR) >> $@
189 if $(not $(defined SHARE_DIR))
190 echo SHARE_DIR=$(PREFIX)/share/habc >> $@
192 echo SHARE_DIR=$(SHARE_DIR) >> $@
193 if $(not $(defined BIN_DIR))
194 echo BIN_DIR=$(PREFIX)/bin >> $@
196 echo BIN_DIR=$(BIN_DIR) >> $@
198 if $(shell-success-null ocamlc$(if $(OCAMLC_OPT_EXISTS), .opt) -annot)
199 @echo "static.OCAMLFLAGS +=-annot" >> $@
201 @echo "static.OCAMLFLAGS +=-dtypes" >> $@
203 @echo "static.OCAMLFLAGS +=-g" >> $@
205 @echo "static.NATIVE_ENABLED = true" >> $@
206 @echo "static.BYTE_ENABLED = false" >> $@
208 @echo "static.NATIVE_ENABLED = false" >> $@
209 @echo "static.BYTE_ENABLED = true" >> $@
212 if $(not $(file-exists OMakefile.config))
213 @echo "Please refer to the installation instructions in file README.mkdn."
214 @echo "If you've just unpacked the distribution, something like"
215 @echo " omake config"
217 @echo " omake install"
218 @echo "should work. But see the file README.mkdn for more details."
221 if $(mem config,$(TARGETS))
223 echo 'let version = "$(VERSION)"' >> $@
224 if $(and $(defined RELATIVE),$(RELATIVE))
225 @echo 'let bin_dir = Str.global_replace (Str.regexp "\\\\") "/" (Filename.dirname Sys.executable_name)' >> $@
226 @echo 'let share_dir = bin_dir' >> $@
227 @echo 'let lib_dir = bin_dir' >> $@
229 @echo 'let bin_dir = "$(ocaml-escaped $(BIN_DIR))"' >> $@
230 @echo 'let share_dir = "$(ocaml-escaped $(SHARE_DIR))"' >> $@
231 @echo 'let lib_dir = "$(ocaml-escaped $(LIB_DIR))"' >> $@
232 @echo 'let default_includes = [lib_dir;"."]' >> $@
233 @echo 'let default_template = share_dir ^ "/template.xml"' >> $@
234 @echo 'let path_sep="$(PATHSEP)"' >> $@
235 @echo 'let exe="$(EXE)"' >> $@
238 ################################################
239 OCAMLINCLUDES += $(ROOT)
240 .SUBDIRS: scm driver base lib camlp4 swflib link
242 # ------------------------------
244 # ------------------------------
246 public.CopyFrom(paths) =
248 foreach(path,$(paths))
249 protected.PROG = $(basename $(path))
251 ln-or-cp $(file $(path)) $(PROG)
258 PROGRAM = $(CopyFrom scm/habc-scm$(EXE) driver/habc$(EXE) link/habc-link$(EXE))
260 all: config $(PROGRAM) lib
264 # ------------------------------
266 # ------------------------------
270 mkdir -p $(SHARE_DIR)
271 mkdir -p $(SHARE_DIR)/example
272 $(INSTALL) $(PROGRAM) $(BIN_DIR)
273 $(INSTALL) share/habc/* $(SHARE_DIR)
274 $(INSTALL) example/* $(SHARE_DIR)/example/
275 $(INSTALL) lib/habc/* $(LIB_DIR)
276 if $(or $(equal Win32,$(OSTYPE)),$(equal Cygwin,$(OSTYPE)))
277 $(INSTALL) win32/swfmill/* $(BIN_DIR)/
278 $(INSTALL) README.mkdn $(BIN_DIR)/
280 # ------------------------------
282 # ------------------------------
284 ocaml-clean *.abc $(PROGRAM)
287 git archive --format=tar --prefix=habc-$(shell cat VERSION)-src/ HEAD | gzip > habc-$(shell cat VERSION)-src.tar.gz