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   = 4
REV     = 2
VERSION = $(MAJOR).$(MINOR).$(REV)
DBUSADA = libdbusada-$(VERSION)
TARBALL = $(DBUSADA).tar.bz2

SO_LIBRARY   = libdbusada.so.$(VERSION)
LIBRARY_KIND = dynamic

NUM_CPUS ?= 1

# GNAT_BUILDER_FLAGS, ADAFLAGS and LDFLAGS may be overridden in the
# environment or on the command line.
GNAT_BUILDER_FLAGS ?= -R -j$(NUM_CPUS)

# GMAKE_OPTS should not be overridden because -p is essential.
GMAKE_OPTS = -p ${GNAT_BUILDER_FLAGS} \
  $(foreach v,ADAFLAGS LDFLAGS VERSION,"-X$(v)=$($(v))")

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

all: build_lib

build_lib:
	gprbuild $(GMAKE_OPTS) -Pd_bus_ada_lib -XLIBRARY_KIND=$(LIBRARY_KIND)

build_tests:
	gprbuild $(GMAKE_OPTS) -Pd_bus_ada_tests -XLIBRARY_KIND=static

build_examples:
	gprbuild $(GMAKE_OPTS) -Pd_bus_ada_examples -XLIBRARY_KIND=static

install: install_lib install_$(LIBRARY_KIND)

install_lib: build_lib
	install -d $(PREFIX)/include/dbus-ada
	install -d $(PREFIX)/lib/dbus-ada
	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
	install -m 444 $(LIBDIR)/$(LIBRARY_KIND)/*.ali $(PREFIX)/lib/dbus-ada
	install -m 644 $(GPR_FILES) $(PREFIX)/lib/gnat

install_static:
	install -m 644 $(LIBDIR)/$(LIBRARY_KIND)/libdbusada.a $(PREFIX)/lib

install_dynamic:
	install -m 644 $(LIBDIR)/$(LIBRARY_KIND)/$(SO_LIBRARY) $(PREFIX)/lib
	cd $(PREFIX)/lib && ln -sf $(SO_LIBRARY) libdbusada.so

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: doc tests
