-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMakefile
118 lines (92 loc) · 3.2 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
.PHONY: all
all:
SHELL = /bin/bash
CYAN=\033[0;36m
RED=\033[0;31m
ORANGE=\033[38;5;208m
WHITE=\033[1;37m
RST=\033[0m
NAME := pydpkg
PYMAJOR := 3
PYREV := 11
PYPATCH := 8
PYVERSION := ${PYMAJOR}.${PYREV}.${PYPATCH}
PYENV := ${HOME}/.pyenv/versions/${PYVERSION}
VENV_NAME := ${NAME}-${PYVERSION}
VENV := ${PYENV}/envs/${VENV_NAME}
PYTHON_BIN := ${VENV}/bin/python
POETRY_BIN := ${VENV}/bin/poetry
EGGLINK := ${VENV}/lib/python${PYMAJOR}.${PYREV}/site-packages/${NAME}.egg-link
export VIRTUAL_ENV := ${VENV}
export PYENV_VERSION := ${VENV_NAME}
# delberately smash this so we keep arm64-homebrew (/opt/homebrew) out of our field of view
export PATH = ${VENV}/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
uname_m := $(shell uname -m)
uname_s := $(shell uname -s)
ifeq ($(uname_s),Darwin)
PYENV_BIN := /usr/local/bin/pyenv
BREW_SSL := /usr/local/opt/openssl@1.1
BREW_READLINE := /usr/local/opt/readline
export LDFLAGS = -L${BREW_SSL}/lib -L${BREW_READLINE}/lib
export CFLAGS = -I${BREW_SSL}/include -I${BREW_READLINE}/include
export CPPFLAGS = -I${BREW_SSL}/include -I${BREW_READLINE}/include
ifeq ($(uname_m),arm64)
ARCH_PREFIX := arch -x86_64
endif
${BREW_READLINE}:
${ARCH_PREFIX} brew install readline
${BREW_SSL}:
${ARCH_PREFIX} brew install openssl@1.1
else
PYENV_BIN := ${HOME}/.pyenv/bin/pyenv
${BREW_READLINE}: .PHONY
${BREW_SSL}: .PHONY
endif
${PYENV}: ${BREW_SSL} ${BREW_READLINE} ${PYENV_BIN}
${ARCH_PREFIX} ${PYENV_BIN} install -s ${PYVERSION}
${VENV}: ${PYENV}
${ARCH_PREFIX} ${PYENV_BIN} virtualenv ${PYVERSION} ${VENV_NAME}
${ARCH_PREFIX} ${PYTHON_BIN} -m pip install -U pip setuptools wheel
${ARCH_PREFIX} ${PYTHON_BIN} -m pip install -U poetry
${ARCH_PREFIX} ${POETRY_BIN} config virtualenvs.create false --local
${ARCH_PREFIX} ${POETRY_BIN} config virtualenvs.in-project false --local
.python-version: ${VENV}
echo ${PYVERSION}/envs/${VENV_NAME} >.python-version
poetry.lock:
${ARCH_PREFIX} ${POETRY_BIN} lock
${EGGLINK}: poetry.lock
${ARCH_PREFIX} ${POETRY_BIN} install
touch ${EGGLINK}
setup: .python-version ${EGGLINK}
clean:
@echo -e "${ORANGE}*** Removing untracked files with git-clean --fdx!${RST}"
git clean -fdx -e '*.ipynb'
nuke: clean
@echo -e "${RED}*** Nuking your virtualenv: ${WHITE}${VENV_NAME}${RST}"
rm -f .python-version
${PYENV_BIN} uninstall -f ${VENV_NAME}
rm -rf ${VENV_DIR}
# usually there's no reason to uninstall python itself, and reinstalling
# it is so very very slow
tacnuke: nuke
@echo -e "${RED}*** Nuking your python distribution to bedrock: ${WHITE}${PYVERSION}${RST}"
${PYENV_BIN} uninstall -f ${PYVERSION}
update: pyproject.toml
${ARCH_PREFIX} ${POETRY_BIN} lock
${ARCH_PREFIX} ${POETRY_BIN} install
${ARCH_PREFIX} ${POETRY_BIN} update
format: setup
${ARCH_PREFIX} ${POETRY_BIN} run ruff format
format-check: setup
${ARCH_PREFIX} ${POETRY_BIN} run ruff format --check
pytest: setup
@echo "Running unit tests"
${ARCH_PREFIX} ${POETRY_BIN} run pytest -p no:warnings tests
ruff: setup
@echo "Linting code style with ruff..."
${ARCH_PREFIX} ${POETRY_BIN} run ruff check
test: ruff pytest
@echo "Running all tests"
install: setup
est:
@echo 'I am loved, I am valued, I am giving the Foundation fifteen thousand dollars.'