#
HASH_FOUND = yes
ifneq ($(SHA512),)
  HASH_TYPE = sha512
  HASH_TOOL ?= $(SHA512SUM)
else ifneq ($(SHA256),)
  HASH_TYPE = sha256
  HASH_TOOL ?= $(SHA256SUM)
else
  HASH_FOUND = no
  HASH_TYPE = sha512
  HASH_TOOL = sha512sum
endif

SED_FLAG = -i
ifeq ($(NATIVE_OS), osx)
  HASH_TOOL = $(SHASUM) -a $(shell echo $(HASH_TYPE) | sed 's/^sha//')
  SED_FLAG = -i ''
endif

# non-depends builds might not set this, use defaults
ifeq ($(HASH_TOOL),)
  HASH_TOOL = sha512sum
  HASH_TOOL_FLAGS = -c --status
endif

HASH_SUM = $($(shell echo $(HASH_TYPE) | tr  '[:lower:]' '[:upper:]'))

.PHONY: $(TARBALLS_LOCATION)/$(ARCHIVE).$(HASH_TYPE)
all: $(TARBALLS_LOCATION)/$(ARCHIVE).$(HASH_TYPE)

$(TARBALLS_LOCATION)/$(ARCHIVE):
	cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)

$(TARBALLS_LOCATION)/$(ARCHIVE).$(HASH_TYPE): $(TARBALLS_LOCATION)/$(ARCHIVE)
ifeq ($(HASH_FOUND),no)
	cd $(TARBALLS_LOCATION); $(HASH_TOOL) $(ARCHIVE) > $(ARCHIVE).$(HASH_TYPE)
	$(HASH_TYPE)=$$(cat $(TARBALLS_LOCATION)/$(ARCHIVE).$(HASH_TYPE) | cut -d ' ' -f 1) && \
          sed $(SED_FLAG) -e "s/#SHA512#/SHA512=$${sha512}/" -e "s/#SHA256#/SHA256=$${sha256}/" Makefile
endif
ifeq ($(HASH_FOUND),yes)
#	we really need 2 spaces between sha hash and file name!
#	if the hash sum doesn't match we retry up to 3 times, add verbose curl output for diagnostics on retries
# if we fail 3 times, cleanup anything downloaded (eg bad tar)
	@cd $(TARBALLS_LOCATION); echo "$(HASH_SUM)  $(ARCHIVE)" > $(ARCHIVE).$(HASH_TYPE) && $(HASH_TOOL) $(HASH_TOOL_FLAGS) $(ARCHIVE).$(HASH_TYPE) \
          || {\
            echo "Error: failed to verify hash sum of $(ARCHIVE), expected type: $(HASH_TYPE) value $(HASH_SUM), retrying.." ;\
            tries=1 ;\
            while [ $$tries -le 3 ]; do \
              echo "download $(ARCHIVE) retry $$tries" ;\
              rm $(TARBALLS_LOCATION)/$(ARCHIVE) ;\
              sleep 3 ;\
              $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) -v $(BASE_URL)/$(ARCHIVE) ;\
              $(HASH_TOOL) $(HASH_TOOL_FLAGS) $(ARCHIVE).$(HASH_TYPE) && exit 0 || tries=$$((tries + 1)) ;\
            done ;\
            rm $(TARBALLS_LOCATION)/$(ARCHIVE) ;\
            exit 1 ;\
          }
endif