# Makefile for dChan library

FLAGS = -thread
OCAMLC = ../../ocamlc
OCAMLDEP = ../../tools/ocamldep
LIBS = unix.cma threads.cma

DCHAN_MLS = exist.ml debug.ml lChan.ml server.ml dChan.ml
DCHAN_MLIS = exist.mli debug.mli lChan.mli server.mli dChan.mli 
DCHAN_CMOS = $(patsubst %.ml,%.cmo, $(DCHAN_MLS))
DCHAN_CMIS = $(patsubst %.mli,%.cmi, $(DCHAN_MLIS))

TEST_MLS = test.ml 
TEST_MLIS =
TEST_CMOS = $(patsubst %.ml,%.cmo, $(TEST_MLS)) 
TEST_CMIS = $(patsubst %.ml,%.cmo, $(TEST_MLIS)) 

DCHAN = dChan.cma
TEST = test
TARGET = $(DCHAN) $(TEST)

.PHONY: all clean

all: $(TARGET) .depend

# Library
$(DCHAN) : $(DCHAN_CMOS) $(DCHAN_CMIS)
	$(OCAMLC) $(FLAGS) -a -o $(DCHAN) $(LIBS) $(DCHAN_CMOS)

# Test program
$(TEST) : $(TEST_CMOS) $(TEST_CMIS) $(DCHAN)
	$(OCAMLC) $(FLAGS) -o $(TEST) $(LIBS) $(DCHAN) $(TEST_CMOS)

# Test2 program
test2 : test2.cmo $(DCHAN)
	$(OCAMLC) $(FLAGS) -o test2 $(LIBS) $(DCHAN) test2.cmo
test3 : test3.cmo $(DCHAN)
	$(OCAMLC) $(FLAGS) -o test3 $(LIBS) $(DCHAN) test3.cmo

# Common rules
.SUFFIXES: .ml .mli .cmo .cmi

.ml.cmo:
	$(OCAMLC) $(FLAGS) -c $<

.mli.cmi:
	$(OCAMLC) $(FLAGS) -c $<

# Cleanup
clean:
	-rm *.cmi *.cmo $(TARGET) .depend

# Dependencies
.depend:
	$(OCAMLDEP) $(DCHAN_MLS) $(DCHAN_MLIS) $(TEST_MLS) $(TEST_MLIS) > .depend

-include .depend
