PREFIX   ?= $(HOME)/libraries
TESTDIR   = tests
OBJDIR    = obj
LIBDIR    = lib
SRCDIR    = src
THINDIR   = thin
DOCDIR    = doc/html
GPR_FILES = gnat/*.gpr

PKGCONF = `pkg-config --cflags --libs dbus-glib-1`
TESTBIN = $(OBJDIR)/tests/rebounder
TESTPID = `pidof rebounder`

MAJOR   = 0
MINOR   = 2
VERSION = $(MAJOR).$(MINOR)
DBUSADA = libdbusada-$(VERSION)
TARBALL = $(DBUSADA).tar.bz2

SO_LIBRARY      = libdbusada.so.$(VERSION)
SO_LIBRARY_THIN = libdbusada-thin.so.$(VERSION)
LIBRARY_KIND    = dynamic

PREPARE := $(shell mkdir -p $(OBJDIR))

all: build_lib

build_lib:
	@gnatmake -p -Pd_bus_ada_lib -XVERSION="$(VERSION)" \
		-XLIBRARY_KIND="$(LIBRARY_KIND)"

build_tests:
	@gnatmake -p -Pd_bus_ada_tests

build_examples:
	@gnatmake -p -Pd_bus_ada_examples -XVERSION="$(VERSION)" \
		-XLIBRARY_KIND="$(LIBRARY_KIND)"

install: install_lib install_$(LIBRARY_KIND)

install_lib: build_lib
	install -d $(PREFIX)/include/dbus-ada/thin
	install -d $(PREFIX)/lib/dbus-ada/thin
	install -d $(PREFIX)/lib/gnat
	install -m 644 $(SRCDIR)/*.ad[bs] $(PREFIX)/include/dbus-ada
	install -m 644 $(THINDIR)/*.ad[bs] $(PREFIX)/include/dbus-ada/thin
	install -m 444 $(LIBDIR)/*.ali $(PREFIX)/lib/dbus-ada
	install -m 444 $(LIBDIR)/thin/*.ali $(PREFIX)/lib/dbus-ada/thin
	install -m 644 $(GPR_FILES) $(PREFIX)/lib/gnat

install_static:
	install -m 444 $(LIBDIR)/libdbusada.a $(PREFIX)/lib/dbus-ada
	install -m 444 $(LIBDIR)/thin/libdbusada-thin.a $(PREFIX)/lib/dbus-ada/thin

install_dynamic:
	install -m 444 $(LIBDIR)/$(SO_LIBRARY) $(PREFIX)/lib/dbus-ada
	install -m 444 $(LIBDIR)/thin/$(SO_LIBRARY_THIN) $(PREFIX)/lib/dbus-ada/thin
	cd $(PREFIX)/lib/dbus-ada && \
	ln -sf $(SO_LIBRARY) libdbusada.so && \
	ln -sf $(SO_LIBRARY) libdbusada.so.$(MAJOR)
	cd $(PREFIX)/lib/dbus-ada/thin && \
	ln -sf $(SO_LIBRARY_THIN) libdbusada-thin.so && \
	ln -sf $(SO_LIBRARY_THIN) libdbusada-thin.so.$(MAJOR)

tests: build_tests $(TESTBIN)
	@$(TESTBIN) &
	@$(OBJDIR)/tests/runner || true
	@kill $(TESTPID)

examples: build_examples

$(TESTBIN): $(TESTDIR)/c/dbus-rebound.c
	gcc $? $(PKGCONF) -o $@

doc:
	@$(MAKE) -C doc

clean:
	@rm -rf $(OBJDIR)
	@rm -rf $(LIBDIR)
	@rm -rf $(DOCDIR)

dist:
	@echo "Creating release tarball $(TARBALL) ... "
	@git archive --format=tar HEAD --prefix $(DBUSADA)/ | bzip2 > $(TARBALL)

.PHONY: build_examples build_lib build_tests dist doc install install_dynamic \
	install_lib install_static tests
