SHELL=/bin/bash

VARIABLES_AT_MAKEFILE_START := $(.VARIABLES)

HEX2BINSOURCETREE:=$(shell cat hex2bin_srctree.ref || echo ERROR)
HEX2BINBUILDTREE:=$(HEX2BINSOURCETREE)

ifdef PREFIX_BIN
HEX2BININSTALLTREE:=$(PREFIX_BIN)
else
HEX2BININSTALLTREE:=$(HEX2BINSOURCETREE).installtree/bin
$(warning PREFIX not set, will install to local tree)
endif
     
TARGETS=build_config.inc

default: $(TARGETS)

test:
	@echo -e "HEX2BINSOURCETREE=\\t$(HEX2BINSOURCETREE)"
	@echo -e "HEX2BINBUILDTREE=\\t$(HEX2BINBUILDTREE)"
	@echo -e "HEX2BININSTALLTREE=\\t$(HEX2BININSTALLTREE)"

$(HEX2BINBUILDTREE)/.built: hex2bin_srctree.ref
	@echo "************************************************************************"
	@echo "**************** Building in : $$(cat $<)"
	@echo "************************************************************************"
	$(MAKE) -C $$(cat "$<")
	touch $@
	@echo "************************************************************************"
	@echo "**************** Build success in : $$(cat $<)"
	@echo "************************************************************************"

.PHONY: install

install: $(HEX2BINBUILDTREE)/.built
	@echo "************************************************************************"
	@echo "**************** Installing in : $(<D)"
	@echo "************************************************************************"
	install -s -D -v --target-directory=$(PREFIX_BIN) $(<D)/hex2bin $(<D)/hex2bin
	@echo "************************************************************************"
	@echo "**************** Install success in : $(<D)"
	@echo "************************************************************************"

build_config.inc: $(HEX2BINBUILDTREE)/.built
	(set -eu ; \
	{ \
	echo "# with bash do SOURCE this file to get a working hex2bin config." ; \
	cd "$(<D)" ; \
	echo "export PATH=\"\$${PATH}:$$PWD\"" ; \
	} >$@ ; )

clean:
	-rm -f *~
	-$(MAKE) -C $(HEX2BINBUILDTREE) clean
	-rm -f $(HEX2BINBUILDTREE)/.built

mrproper: clean
	-rm -f build_config.inc
	-rm -rf $(HEX2BINSOURCETREE) $(HEX2BINBUILDTREE) $(HEX2BININSTALLTREE) *.ref

distclean: mrproper
# we do nothing more but our caller does

########################################################################
# Debug the makefile
########################################################################
$(foreach v,                                        \
  $(sort $(filter-out $(VARIABLES_AT_MAKEFILE_START) VARIABLES_AT_MAKEFILE_START,$(.VARIABLES))), \
  $(info $(v) = $($(v))))
