#--*- Makefile -*--

# Build Ada programs using 'gnatmake'.

CWD := $(shell pwd)

GNATMAKE_PRG_DIR ?= programs
GNATMAKE_SRC_DIR ?= src
GNATMAKE_BIN_DIR ?= bin
GNATMAKE_OBJ_DIR ?= .obj

GNATMAKE_ADA_PROGRAMS ?= \
   $(wildcard ${GNATMAKE_PRG_DIR}/*.adb)

GNATMAKE_ADA_DEPEND ?= \
   ${GNATMAKE_ADA_PROGRAMS:${GNATMAKE_PRG_DIR}/%.adb=${GNATMAKE_PRG_DIR}/.%.d}

GNATMAKE_ADA_EXE ?= \
   ${GNATMAKE_ADA_PROGRAMS:${GNATMAKE_PRG_DIR}/%.adb=${GNATMAKE_BIN_DIR}/%}

# GNATMAKE_OPTIONS ?= -gnata
GNATMAKE_OPTIONS ?=

.PHONY: all run clean distclean mostlyclean cleanAll

all: ${GNATMAKE_ADA_EXE}

#------------------------------------------------------------------------------

include ${GNATMAKE_ADA_DEPEND}

run: ${GNATMAKE_ADA_EXE}
	for FILE in $^; do \
		( set -x; $${FILE} ) \
	done

#------------------------------------------------------------------------------

${GNATMAKE_BIN_DIR}/%: ${GNATMAKE_PRG_DIR}/%.adb
	gnatmake \
		-I${GNATMAKE_SRC_DIR} \
		-D ${GNATMAKE_OBJ_DIR} \
		-o $@ $< \
		${GNATMAKE_OPTIONS}
	${MAKE} --no-print-directory -W $< ${GNATMAKE_PRG_DIR}/.$*.d

${GNATMAKE_PRG_DIR}/.%.d: ${GNATMAKE_PRG_DIR}/%.adb
	gnatmake -I${GNATMAKE_SRC_DIR} -D ${GNATMAKE_OBJ_DIR} -M $< \
	| sed 's/^\(.*\.o\) :/${GNATMAKE_BIN_DIR}\/$* :/' \
	| sed 's:${CWD}/::' \
	> $@

#------------------------------------------------------------------------------

.PHONY: gnatmake-clean gnatmake-distclean gnatmake-mostlyclean gnatmake-cleanAll

gnatmake-clean gnatmake-mostlyclean:
	rm -f ${GNATMAKE_OBJ_DIR}/*

gnatmake-distclean gnatmake-cleanAll: gnatmake-clean
	rm -f ${GNATMAKE_ADA_DEPEND}
	rm -f ${GNATMAKE_ADA_EXE}

#------------------------------------------------------------------------------

clean: gnatmake-clean

distclean: gnatmake-distclean

mostlyclean: gnatmake-mostlyclean

cleanAll: gnatmake-cleanAll
