# $Id: Makefile,v 1.10 2006/11/24 09:43:15 rich Exp $

include Makefile.config

# To enable support for Extlib, also uncomment 'open ExtList' at the top
# of file csv.ml.

OCAMLCINCS	:=
#OCAMLCINCS	:= -package extlib
OCAMLCFLAGS	:= -g
OCAMLCLIBS	:=
#OCAMLCLIBS	:= -linkpkg

OCAMLOPTINCS	:= $(OCAMLCINCS)
OCAMLOPTFLAGS	:=
OCAMLOPTLIBS	:=
#OCAMLOPTLIBS	:= -linkpkg

OBJS		:= csv.cmo
XOBJS		:= $(OBJS:.cmo=.cmx)

OCAMLDOCFLAGS := -html -stars -sort $(OCAMLCINCS)

all: csv.cma csv.cmxa example csvtool

csv.cma: $(OBJS)
	ocamlfind ocamlc $(OCAMLCINCS) $(OCAMLCFLAGS) -a -o $@ $^

csv.cmxa: $(XOBJS)
	ocamlfind ocamlopt $(OCAMLOPTINCS) $(OCAMLOPTFLAGS) -a -o $@ $^

example: csv.cma example.ml
	ocamlfind ocamlc $(OCAMLCINCS) $(OCAMLCFLAGS) $(OCAMLCLIBS) $^ -o $@

test:	csv.cma test.ml
	ocamlfind ocamlc $^ -o $@
	./test

csvtool: csv.cmxa csvtool.ml
	ocamlfind ocamlopt $(OCAMLOPTINCS) $(OCAMLOPTFLAGS) $(OCAMLOPTLIBS) $^ -o $@

# Common rules for building OCaml objects.

.mli.cmi:
	ocamlfind ocamlc $(OCAMLCFLAGS) $(OCAMLCINCS) -c $<
.ml.cmo:
	ocamlfind ocamlc $(OCAMLCFLAGS) $(OCAMLCINCS) -c $<
.ml.cmx:
	ocamlfind ocamlopt $(OCAMLOPTFLAGS) $(OCAMLOPTINCS) -c $<

.SUFFIXES:	.cmo .cmi .cmx .ml .mli

# Clean.

clean:
	rm -f *.cmi *.cmo *.cmx *.cma *.cmxa *.o *.a *~ core csvtool example

# Dependencies.

depend: .depend

.depend: $(wildcard *.mli) $(wildcard *.ml)
	rm -f .depend
	ocamldep $^ > $@

ifeq ($(wildcard .depend),.depend)
include .depend
endif

# Build a distribution.

dist:
	$(MAKE) check-manifest
	rm -rf $(PACKAGE)-$(VERSION)
	mkdir $(PACKAGE)-$(VERSION)
	tar -cf - -T MANIFEST | tar -C $(PACKAGE)-$(VERSION) -xf -
	tar zcf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION)
	rm -rf $(PACKAGE)-$(VERSION)
	ls -l $(PACKAGE)-$(VERSION).tar.gz

check-manifest:
	@for d in `find -type d -name CVS | grep -v '^\./debian/'`; \
	do \
	b=`dirname $$d`/; \
	awk -F/ '$$1 != "D" {print $$2}' $$d/Entries | \
	sed -e "s|^|$$b|" -e "s|^\./||"; \
	done | sort > .check-manifest; \
	sort MANIFEST > .orig-manifest; \
	diff -u .orig-manifest .check-manifest; rv=$$?; \
	rm -f .orig-manifest .check-manifest; \
	exit $$rv

# Developer documentation (in html/ subdirectory).

doc:
	rm -rf html
	mkdir html
	-ocamlfind ocamldoc $(OCAMLDOCFLAGS) -d html csv.ml{i,}

.PHONY: depend dist check-manifest doc
