# Adapt the following line to your installation
POSTGRES_INCLUDE = -I /usr/include/pgsql
POSTGRES_LIB     = -lpq

# another example, when the linker does not find the library
#POSTGRES_PATH    = /usr/local/util/packages/postgresql-7.1.3
#POSTGRES_INCLUDE = -I $(POSTGRES_PATH)/include
#POSTGRES_LIB     = -L$(POSTGRES_PATH)/lib -lpq



# this package
##############
NAME = postgres
PACKAGE_NAME = postgres
LIB = postgres

RELEASE = $(shell cat RELEASE)

# Add -custom to build only statically linked version
#OCAMLMKLIB_OPTS = -custom $(POSTGRES_LIBS)
OCAMLMKLIB_OPTS = $(POSTGRES_LIB)

INCLUDES = $(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)))

INSTALL_FILES = *.cmi *.cma *.cmxa *.a *.so META
DIST_FILES = Makefile RELEASE $(OBJECTS) $(INTERFACES) $(EXTRA_DIST)
LIB_OBJECTS = $(ML_OBJS) $(ML_XOBJS) $(C_OBJS)

all: META $(INTERFACES:.mli=.cmi) lib$(LIB).a

lib$(LIB).a: $(LIB_OBJECTS)
	rm -f lib$(LIB).a
	ocamlmklib $(OCAMLMKLIB_OPTS) -verbose -o $(LIB) $(LIB_OBJECTS)


.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 *~ META


.PHONY: install
install:
	$(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)="$(LIB).cma"' >> META
	echo 'archive(native)="$(LIB).cmxa"' >> 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)
