# Adapt the following line to your installation
POSTGRES_INCLUDE = /usr/include/pgsql
#POSTGRES_INCLUDE = /usr/local/util/packages/postgresql-7.0.2/include

# if the libpq.a file is not found by the linker, fix the following line
# to specify the directory, e.g.:  
#LIBS = -ccopt -L/usr/local/util/packages/postgresql-7.0.2/lib \
# -ccopt -R/usr/local/util/packages/postgresql-7.0.2/lib \
# -cclib -lpq

LIBS = -cclib -lpq


# this package
##############
NAME = postgres
PACKAGE_NAME = postgres
RELEASE = $(shell cat RELEASE)

INCLUDES = -I $(POSTGRES_INCLUDE)
ARCHIVE = postgres
CLIB = mlpostgres
OBJECTS = postgres.ml libpq_stub.c
INTERFACES = postgres.mli
DESCRIPTION = Bindings for PostgreSQL
EXTRA_DIST = README LGPL Changes tests

default: all

# dependencies
postgres.cmo: postgres.cmi 
postgres.cmx: postgres.cmi 

# generic stuff
###############

OCAMLC = ocamlc
OCAMLOPT = ocamlopt
OCAMLFIND = ocamlfind

ML_OBJS = $(patsubst %.ml,%.cmo, $(filter %.ml, $(OBJECTS)))
ML_XOBJS = $(ML_OBJS:.cmo=.cmx)
C_OBJS  = $(patsubst %.c,%.o, $(filter %.c, $(OBJECTS)))

ML_ARCHIVE = $(ARCHIVE).cma
ML_XARCHIVE = $(ARCHIVE).cmxa

C_ARCHIVE = lib$(CLIB).a


INSTALL_FILES = META $(ML_ARCHIVE) $(ML_XARCHIVE) $(ARCHIVE).a $(INTERFACES) $(INTERFACES:.mli=.cmi) $(C_ARCHIVE)

DIST_FILES = Makefile RELEASE $(OBJECTS) $(INTERFACES) $(EXTRA_DIST)

all: $(INSTALL_FILES)


$(ML_ARCHIVE): $(ML_OBJS) $(C_ARCHIVE)
	$(OCAMLC) -custom -linkall -a -o $@ $(LIBS) -cclib -l$(CLIB) $(ML_OBJS)

$(ML_XARCHIVE): $(ML_XOBJS) $(C_ARCHIVE)
	$(OCAMLOPT) -linkall -a -o $@ $(LIBS) -cclib -l$(CLIB) $(ML_XOBJS)

$(C_ARCHIVE): $(C_OBJS)
	rm -f $(C_ARCHIVE)
	ar rc $(C_ARCHIVE) $(C_OBJS)
	ranlib $(C_ARCHIVE)


toplevel: $(ML_ARCHIVE)
	ocamlmktop -o $@ -linkall $(ML_ARCHIVE)



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

.c.o:
	$(OCAMLC) -c $(INCLUDES) $<

.ml.cmx:
	$(OCAMLOPT) -c $<

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

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

.PHONY: clean
clean:
	rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa *~ toplevel META


.PHONY: install
install: $(INSTALL_FILES)
	$(OCAMLFIND) install $(PACKAGE_NAME) $(INSTALL_FILES)

.PHONY: uninstall
uninstall:
	$(OCAMLFIND) remove $(PACKAGE_NAME)

META: RELEASE
	rm -f META
	echo 'name="$(NAME)"' >> META
	echo 'version="$(RELEASE)"' >> META
	echo 'description="$(DESCRIPTION)"' >> META
	echo 'archive(byte)="$(ML_ARCHIVE)"' >> META
	echo 'archive(native)="$(ML_XARCHIVE)"' >> META

# for the package maintainer

.PHONY: release
release:
	date +%Y%m%d > RELEASE

DISTDIR = $(NAME)-$(RELEASE)

.PHONY: dist
dist:
	rm -Rf $(DISTDIR)
	mkdir $(DISTDIR)
	(mkdir dists) || true
	cp -R $(DIST_FILES) $(DISTDIR)
	rm -rf $(DISTDIR)/tests/CVS
	tar czf dists/$(DISTDIR).tar.gz $(DISTDIR)
	rm -Rf $(DISTDIR)
