#
# \brief  Checkout Pistachio and additional needed tools (kickstart)
# \author Stefan Kalkowski
# \date   2011-07-15
#

VERBOSE     = @
ECHO        = @echo
GIT_URI     = https://github.com/l4ka/pistachio.git
GIT_REV     = 76bac3d926dc707c6a3243b38c1505d2b5b6537b
CONTRIB_DIR = contrib
SHELL       = bash
PATCHES     = $(shell find patches -name *.patch)

#
# Utility to check if a tool is installed
#
check_tool = $(if $(shell which $(1)),,$(error Need to have '$(1)' installed.))

$(call check_tool,git)
$(call check_tool,patch)
$(call check_tool,sed)
$(call check_tool,autoheader)
$(call check_tool,autoconf)

#
# Determine python version to use for CML2
#
PYTHON2 := $(notdir $(lastword $(shell which python2 $(addprefix python2.,4 5 6 7 8))))
ifeq ($(PYTHON2),)
prepare: python_not_installed
python_not_installed:
	$(ECHO) "Error: CML2 Configuration System needs Python 2 to be installed"
	@false;
endif

#
# Print help information by default
#
help::
	$(ECHO)
	$(ECHO) "Check out upstream source code of Pistachio"
	$(ECHO)
	$(ECHO) "The source code will be located at the '$(CONTRIB_DIR)/' directory."
	$(ECHO)
	$(ECHO) "--- available commands ---"
	$(ECHO) "prepare - checkout upstream source codes"
	$(ECHO) "clean   - remove upstream source codes"
	$(ECHO)

$(CONTRIB_DIR):
	$(VERBOSE)git clone $(GIT_URI) contrib

prepare: $(CONTRIB_DIR)
	$(VERBOSE)cd $(CONTRIB_DIR); git fetch;  git reset --hard $(GIT_REV)
	$(ECHO) "applying patches to '$(CONTRIB_DIR)/'"
	$(VERBOSE)for i in $(PATCHES); do patch -d $(CONTRIB_DIR) -p1 < $$i; done
	@# use GCC front end for as linker for the pistachio user land
	$(VERBOSE)sed -i "/LD=/s/^.*$$/LD=\$$(CC)/" $(CONTRIB_DIR)/user/config.mk.in
	@# add '-Wl,' prefix to '-melf_*' linker options
	$(VERBOSE)sed -i "s/-melf_/-Wl,-melf_/" `grep -rl melf_ $(CONTRIB_DIR)/user`
	$(VERBOSE)for i in cmlcompile.py cmlconfigure.py configtrans.py; do \
		sed -i "s/env python/env $(PYTHON2)/" $(CONTRIB_DIR)/contrib/cml2/$$i; done
	$(VERBOSE)cd $(CONTRIB_DIR)/user; autoheader; autoconf;

clean::
	$(VERBOSE)rm -rf $(CONTRIB_DIR)