ifdef OPT 
CMO = .cmo
CMA = .cma
COMP = ocamlc
else
CMO = .cmx
CMA = .cmxa
COMP = ocamlopt
endif

#MAKE = nmake -f Makefile.nt
#EXE = .exe
MAKE = make
EXE = #.exe

opt : 
	$(MAKE) OPT=yes all

OBJS = a.cmi b.cmi add/c.cmi a$(CMO) b$(CMO) add/c$(CMO) 

.SUFFIXES: .cmo .cmi .cmx .ml .mli 
.ml.cmo:
	ocamlc -I add -c $<
.ml.cmx:
	ocamlopt -I add -c $<
.mli.cmi:
	ocamlc -I add -c $<

all : emrg$(EXE) x$(CMA) clean_objs appl$(EXE)


# Create the emrg utitlity
#
emrg$(EXE) : emrg.cmo
	ocamlc -o emrg$(EXE) emrg.cmo

# create the ML file (x.ml) out of the implementation
# files
x.ml : $(OBJS)
	emrg$(EXE) -copy -ml a.ml b.ml add/c.ml -o x.ml 

# create the MLI file (x.mli) out of the mli files
#
x.mli :
	emrg$(EXE) -mli a.mli b.mli add/c.mli -o x.mli 

# compile
x.cmi : x.mli
x$(CMO) : x.ml

# Create the library
#
x$(CMA) : $(OBJS) x.cmi x$(CMO) 
	$(COMP) -a -o x$(CMA) a$(CMO) b$(CMO) add/c$(CMO) x$(CMO) 

# remove the stand alone files (a.cm*, b.cm*)
#
clean_objs : 
	rm -f a.cm* b.cm* add/*.cm*

# Compile the application
#
appl$(EXE) : x$(CMA) appl$(CMO) 
	$(COMP) -o appl$(EXE) x$(CMA) appl$(CMO) 

clean : 
	rm -f *.cm* *.obj *.o *.exe emrg appl
	rm -f x.ml x.mli

realclean : clean
	rm -f *~ add/*~ *.tar *.tar.gz
	chmod 644 *
	chmod 755 add

depend : 
	ocamldep *.ml *.mli > .depend

tar : 
	rm -f *.tar.gz
	tar -cf emrg.tar *
	gzip -f emrg.tar

include .depend

