diff --git a/Makefile_python/Makefile b/Makefile_python/Makefile new file mode 100644 index 0000000..c7ceeee --- /dev/null +++ b/Makefile_python/Makefile @@ -0,0 +1,32 @@ +#NIH: https://ricardoanderegg.com/posts/makefile-python-project-tricks/ + +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c +# .DELETE_ON_ERROR: +MAKEFLAGS = --warn-undefined-variables +MAKEFLAGS += --no-builtin-rules + + +# Override PWD so that it's always based on the location of the file and **NOT** +# based on where the shell is when calling `make`. This is useful if `make` +# is called like `make -C ` +PWD := $(realpath $(dir $(abspath $(firstword $(MAKEFILE_LIST))))) + +WORKTREE_ROOT := $(shell git rev-parse --show-toplevel 2> /dev/null) + + +# Using $$() instead of $(shell) to run evaluation only when it's accessed +# https://unix.stackexchange.com/a/687206 +py = $$(if [ -d $(PWD)/'.venv' ]; then echo $(PWD)/".venv/bin/python3"; else echo "python3"; fi) +pip = $(py) -m pip + +.DEFAULT_GOAL := help +.PHONY: help +help: ## Display this help section + @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z\$$/]+.*:.*?##\s/ {printf "\033[36m%-38s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) + +.venv: requirements.txt ## Build the virtual environment + $(py) -m venv .venv + $(pip) install -U pip setuptools wheel build + $(pip) install -U -r requirements.txt + touch .venv