PYENV_ROOT = $(HOME)/.pyenv
NVM_DIR = $(HOME)/.nvm
VERBOSE := 0

pyenv_targets := $(addprefix pyenv3, 9 10 11 12 13)
nvm_targets := $(addprefix nvm, 19 20 21 22 23)

all: $(pyenv_targets) $(nvm_targets)

pyenv: $(PYENV_ROOT)
nvm: $(NVM_DIR)

$(PYENV_ROOT):
	curl -fsSL https://pyenv.run | bash

export PYENV_ROOT := $(PYENV_ROOT)
export PATH := $(PYENV_ROOT)/bin:$(PATH)
$(pyenv_targets): $(PYENV_ROOT)
	export version="3.$$(echo "$@" | sed 's|^pyenv3||')"; \
	sh -cx "pyenv install $(if $(filter-out 1,$(VERBOSE)),,-v) $$version"; \
	rm -v $(PYENV_ROOT)/shims/*; \
	sh -cx "cd $(PYENV_ROOT)/shims; ln -s "../versions/$$(basename "$$(pyenv prefix $$version)")/bin/*" ."

$(NVM_DIR):
	mkdir -p $(NVM_DIR)
	curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# build node target, create a directory for symbolicly linking the targeted node versions binaries and link them

export NVM_DIR := $(NVM_DIR)
$(nvm_targets): $(NVM_DIR)
	@export version="$$(echo "$@" | sed 's|^nvm||')"; \
	sh -c ". $(NVM_DIR)/nvm.sh; nvm install -s "$$version"" && \
	mkdir -vp $(NVM_DIR)/shims && cd $(NVM_DIR)/shims; \
	sh -cx pwd; \
	export rversion=$$(sh -c ". $(NVM_DIR)/nvm.sh; nvm version "$$version""); \
	for path in ../versions/node/$$rversion/bin/*; do \
	    ln -vsf "$$path" .; \
	    ln -vsf "$$path" ./$$(basename "$$path")$$version; \
	done
	
