| 1 | #!/usr/bin/env bash |
| 2 | # Provision one bare Python per `requires-python` entry (or per argument) and |
| 3 | # print their paths as ":"-separated DEEPGEMM_PYTHON_INTERPRETERS. Skip this |
| 4 | # entirely if you already have interpreter paths. |
| 5 | # |
| 6 | # Usage: |
| 7 | # export DEEPGEMM_PYTHON_INTERPRETERS=$(tools/setup_deepgemm_pythons.sh) |
| 8 | # python setup.py bdist_wheel --dist-dir=dist --py-limited-api=cp38 |
| 9 | # |
| 10 | # Optional: DEEPGEMM_VENV_PREFIX (default: /tmp/dgenv). |
| 11 | set -euo pipefail |
| 12 | |
| 13 | if [ "$#" -eq 0 ]; then |
| 14 | # Derive the matrix from `requires-python = ">=3.X,<3.Y"` in pyproject.toml. |
| 15 | pyproject="$(dirname "$0")/../pyproject.toml" |
| 16 | spec=$(grep -E '^requires-python' "$pyproject" \ |
| 17 | | grep -oE '>=3\.[0-9]+,<3\.[0-9]+') |
| 18 | lo=${spec#>=3.}; lo=${lo%%,*} |
| 19 | hi=${spec##*<3.} |
| 20 | readarray -t versions < <(seq "$lo" $((hi - 1)) | sed 's/^/3./') |
| 21 | set -- "${versions[@]}" |
| 22 | fi |
| 23 | |
| 24 | prefix="${DEEPGEMM_VENV_PREFIX:-/tmp/dgenv}" |
| 25 | mkdir -p "$prefix" |
| 26 | |
| 27 | paths="" |
| 28 | for V in "$@"; do |
| 29 | venv="$prefix/$V" |
| 30 | # uv-managed Python ensures Python.h is present; system 3.X-dev packages |
| 31 | # on the manylinux / Ubuntu build bases are not always installed. |
| 32 | [ -x "$venv/bin/python" ] || \ |
| 33 | uv venv --python "$V" "$venv" --python-preference only-managed --seed \ |
| 34 | >/dev/null |
| 35 | paths="$paths:$venv/bin/python" |
| 36 | done |
| 37 | echo "${paths#:}" |