mirror of
https://github.com/pyenv/pyenv.git
synced 2026-10-02 23:41:06 +09:00
Compare commits
No commits in common. "master" and "v2.8.6" have entirely different histories.
4
.github/actions/build-python/action.yml
vendored
4
.github/actions/build-python/action.yml
vendored
@ -20,12 +20,12 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
#prerequisites
|
||||
brew install openssl readline sqlite3 xz tcl-tk@8 libb2 zstd gdbm
|
||||
brew install openssl readline sqlite3 xz tcl-tk@8 libb2 zstd
|
||||
- if: runner.os == 'Linux'
|
||||
shell: bash
|
||||
run: |
|
||||
#prerequisites
|
||||
pyenv install-prerequisites --all
|
||||
pyenv install-prerequisites
|
||||
- shell: bash
|
||||
run: |
|
||||
#build
|
||||
|
||||
4
.github/workflows/modified_scripts_build.yml
vendored
4
.github/workflows/modified_scripts_build.yml
vendored
@ -108,7 +108,7 @@ jobs:
|
||||
echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
|
||||
- run: |
|
||||
#prerequisites
|
||||
brew install openssl readline sqlite3 xz tcl-tk@8 libb2 zstd gdbm
|
||||
brew install openssl readline sqlite3 xz tcl-tk@8 libb2 zstd
|
||||
if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then
|
||||
export PYENV_BOOTSTRAP_VERSION=pypy2.7-7
|
||||
echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV
|
||||
@ -222,7 +222,7 @@ jobs:
|
||||
echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
|
||||
- run: |
|
||||
#prerequisites
|
||||
pyenv install-prerequisites --all
|
||||
pyenv install-prerequisites
|
||||
if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then
|
||||
export PYENV_BOOTSTRAP_VERSION=pypy2.7-7
|
||||
echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV
|
||||
|
||||
24
.github/workflows/publish_binary.yml
vendored
24
.github/workflows/publish_binary.yml
vendored
@ -7,42 +7,26 @@ on:
|
||||
description: A CPython version accepted by `pyenv install`
|
||||
required: true
|
||||
type: string
|
||||
platform:
|
||||
description: Platform to build on
|
||||
required: true
|
||||
type: choice
|
||||
default: ubuntu-24.04
|
||||
options:
|
||||
- ubuntu-24.04
|
||||
- macos-15
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ${{ inputs.platform }}
|
||||
publish_ubuntu:
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
PYENV_ROOT: ${{ github.workspace }}
|
||||
VERSION: ${{ inputs.version }}
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- name: Install Ubuntu build prerequisites
|
||||
if: runner.os == 'Linux'
|
||||
- name: Install build prerequisites
|
||||
run: ./bin/pyenv install-prerequisites
|
||||
- name: Install macOS build prerequisites
|
||||
if: runner.os == 'macOS'
|
||||
run: brew install openssl readline sqlite3 xz tcl-tk@8 libb2 zstd
|
||||
- name: Build package
|
||||
env:
|
||||
PYTHON_CONFIGURE_OPTS: --enable-optimizations
|
||||
run: |
|
||||
VERSION="${VERSION%%:*}"
|
||||
if [ "$RUNNER_OS" = "macOS" ]; then
|
||||
entry="${VERSION}-${{ inputs.platform }}-$(uname -m)"
|
||||
else
|
||||
entry="$(./bin/pyenv binary package-name "$VERSION")"
|
||||
fi
|
||||
entry="$(./bin/pyenv binary package-name "$VERSION")"
|
||||
echo "entry=$entry" >> "$GITHUB_ENV"
|
||||
mkdir dist
|
||||
cd dist
|
||||
|
||||
22
CHANGELOG.md
22
CHANGELOG.md
@ -1,28 +1,6 @@
|
||||
# Version History
|
||||
|
||||
|
||||
## Release v2.8.7
|
||||
* Fix rehash repair of individually corrupted shims by @aprylewu in https://github.com/pyenv/pyenv/pull/3540
|
||||
* CI: publish Apple Silicon macOS binaries by @macayu17 in https://github.com/pyenv/pyenv/pull/3556
|
||||
* python-build: create PEP 394 symlinks for Pyston by @dmrlawson in https://github.com/pyenv/pyenv/pull/3557
|
||||
* Add GraalPy 3.13 25.4.4 by @msimacek in https://github.com/pyenv/pyenv/pull/3558
|
||||
* python-build: create PEP 394 symlinks for PyPy by @native-api in https://github.com/pyenv/pyenv/pull/3559
|
||||
* install-prerequisites: add an option for optional dependencies by @native-api in https://github.com/pyenv/pyenv/pull/3560
|
||||
* python-build: create pypy* symlinks for PyPy by @native-api in https://github.com/pyenv/pyenv/pull/3562
|
||||
* Add PyPy v7.3.23 by @exurd in https://github.com/pyenv/pyenv/pull/3553
|
||||
* Add PyPy v7.3.21 by @exurd in https://github.com/pyenv/pyenv/pull/3564
|
||||
* python-build: Add `add_pypy.py` for pypy versions by @exurd in https://github.com/pyenv/pyenv/pull/3566
|
||||
* pyenv-binary: install published CPython packages by @macayu17 in https://github.com/pyenv/pyenv/pull/3567
|
||||
* python-build: show download progress in interactive terminals by @n0tl3ss in https://github.com/pyenv/pyenv/pull/3561
|
||||
* Fix minimum macOS version check for PyPy v7.3.8+ by @exurd in https://github.com/pyenv/pyenv/pull/3570
|
||||
* Add PyPy v8.0.0 by @exurd in https://github.com/pyenv/pyenv/pull/3552
|
||||
* python-build: Speed up permission fix step by @native-api in https://github.com/pyenv/pyenv/pull/3571
|
||||
* fix(init): honor custom PYENV_ROOT in init setup tips by @r3wretrhy in https://github.com/pyenv/pyenv/pull/3569
|
||||
* tests: python-build: use helpers from core by @macayu17 in https://github.com/pyenv/pyenv/pull/3572
|
||||
* Add CPython 3.12.15, 3.13.16 by @pyenv-bot[bot] in https://github.com/pyenv/pyenv/pull/3575
|
||||
* Add CPython 3.14.8 by @pyenv-bot[bot] in https://github.com/pyenv/pyenv/pull/3574
|
||||
* Add CPython 3.10.22, 3.11.17 by @pyenv-bot[bot] in https://github.com/pyenv/pyenv/pull/3576
|
||||
|
||||
## Release v2.8.6
|
||||
* Update graalpy URLs for 25.3.4.1 by @msimacek in https://github.com/pyenv/pyenv/pull/3533
|
||||
* python-build: add build prerequisite installer by @macayu17 in https://github.com/pyenv/pyenv/pull/3532
|
||||
|
||||
15
COMMANDS.md
15
COMMANDS.md
@ -315,7 +315,7 @@ Lists all Python versions with the given command installed.
|
||||
|
||||
## `pyenv exec`
|
||||
|
||||
Usage: pyenv exec [-N|--environment] <command> [arg1 arg2...]
|
||||
Usage: pyenv exec <command> [arg1 arg2...]
|
||||
|
||||
Runs an executable by first preparing PATH so that the selected Python
|
||||
version's `bin` directory is at the front.
|
||||
@ -326,18 +326,7 @@ For example, if the currently selected Python version is 3.9.7:
|
||||
|
||||
is equivalent to:
|
||||
|
||||
PYENV_VERSION="3.9.7" PATH="$PYENV_ROOT/versions/3.9.7/bin:$PATH" pip install -r requirements.txt
|
||||
|
||||
The `--environment` option sets `PYTHONHOME` and `LD_LIBRARY_PATH` (`DYLD_LIBRARY_PATH` in macOS) in the program's environment.
|
||||
This is needed to run programs that embed Python by loading `libpython` without specifying rpath or an explicit path.
|
||||
This breaks linking for programs that expect to link to a different `libpython` with the same name as one
|
||||
in selected Python -- thus it's not done by default.
|
||||
|
||||
In macOS, System Integrity Protection (SIP) removes `DYLD_LIBRARY_PATH` from a process' environment
|
||||
upon `exec` (not `fork`) if the executable being run is protected. The protection covers preinstalled system software
|
||||
(including preinstalled shells) and does not cover user-installed apps and 3rd-party software. See
|
||||
[About System Integrity Protection on your Mac - Apple Support](https://support.apple.com/en-us/102149)
|
||||
for details.
|
||||
PATH="$PYENV_ROOT/versions/3.9.7/bin:$PATH" pip install -r requirements.txt
|
||||
|
||||
## `pyenv root`
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
version="2.8.7"
|
||||
version="2.8.6"
|
||||
git_revision=""
|
||||
|
||||
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then
|
||||
|
||||
@ -2,17 +2,7 @@
|
||||
#
|
||||
# Summary: Run an executable with the selected Python version
|
||||
#
|
||||
# Usage: pyenv exec [-N|--environment] <command> [arg1 arg2...]
|
||||
#
|
||||
# -N/--environment Set PYTHONHOME and LD_LIBRARY_PATH (DYLD_LIBRARY_PATH in macOS)
|
||||
# envvars for the running command.
|
||||
# This allows to run programs that embed Python without using rpath or
|
||||
# exact library path to libpython.
|
||||
# WARNING: For the running command and its child processes, this will
|
||||
# break linkage for programs that expect to be linked to a different
|
||||
# libpython instance with the same name!
|
||||
# WARNING: In macOS, DYLD_LIBRARY_PATH will be unset by the system for
|
||||
# processes covered by System Integrity Protection.
|
||||
# Usage: pyenv exec <command> [arg1 arg2...]
|
||||
#
|
||||
# Runs an executable by first preparing PATH so that the selected Python
|
||||
# version's `bin' directory is at the front.
|
||||
@ -28,16 +18,9 @@ set -e
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --environment
|
||||
exec pyenv-shims --short
|
||||
fi
|
||||
|
||||
unset MODIFY_ENV
|
||||
if [ "$1" = "-N" ] || [ "$1" = "--environment" ]; then
|
||||
MODIFY_ENV=true
|
||||
shift
|
||||
fi
|
||||
|
||||
PYENV_VERSION="$(pyenv-version-name -f)"
|
||||
PYENV_COMMAND="$1"
|
||||
|
||||
@ -71,27 +54,4 @@ if [ "${PYENV_BIN_PATH#${PYENV_ROOT}}" != "${PYENV_BIN_PATH}" ]; then
|
||||
# Only add to $PATH for non-system version.
|
||||
export PATH="${PYENV_BIN_PATH}:${PATH}"
|
||||
fi
|
||||
if [ -n "$MODIFY_ENV" ]; then
|
||||
|
||||
# Check if multiple Python versions are selected
|
||||
VERSIONS=$(pyenv-prefix)
|
||||
if [[ "$VERSIONS" == *:* ]]; then
|
||||
VERSION="${VERSIONS%%:*}"
|
||||
echo "pyenv: Warning: multiple Python versions are selected." \
|
||||
"Setting environment variables for the first one, (${VERSION#$PYENV_ROOT})" >&2
|
||||
else
|
||||
VERSION="$VERSIONS"
|
||||
fi
|
||||
|
||||
# Assign the correct version of PYTHONHOME
|
||||
export PYTHONHOME="$VERSION"
|
||||
case "$(uname -s)" in
|
||||
Darwin)
|
||||
export DYLD_LIBRARY_PATH="${PYTHONHOME}/lib${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}"
|
||||
;;
|
||||
*)
|
||||
export LD_LIBRARY_PATH="${PYTHONHOME}/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
exec "$PYENV_COMMAND_PATH" "$@"
|
||||
|
||||
@ -189,76 +189,8 @@ function help_() {
|
||||
} >&2
|
||||
}
|
||||
|
||||
# True when tips/install should keep the portable default root form.
|
||||
function pyenv_root_is_default() {
|
||||
[[ ${PYENV_ROOT} == "${HOME}/.pyenv" ]]
|
||||
}
|
||||
|
||||
# Escape a value for inclusion inside double quotes in a POSIX shell script.
|
||||
function escape_for_double_quoted_posix() {
|
||||
local s="$1"
|
||||
s="${s//\\/\\\\}"
|
||||
s="${s//\"/\\\"}"
|
||||
s="${s//\$/\\\$}"
|
||||
s="${s//\`/\\\`}"
|
||||
printf '%s' "$s"
|
||||
}
|
||||
|
||||
# Escape a value for inclusion inside double quotes in a fish script.
|
||||
function escape_for_double_quoted_fish() {
|
||||
local s="$1"
|
||||
s="${s//\\/\\\\}"
|
||||
s="${s//\"/\\\"}"
|
||||
s="${s//\$/\\\$}"
|
||||
printf '%s' "$s"
|
||||
}
|
||||
|
||||
# Escape a value for inclusion inside single quotes in a PowerShell script.
|
||||
function escape_for_single_quoted_pwsh() {
|
||||
local s="$1"
|
||||
# Bash 3.2 (macOS / CI docker): avoid \' in ${//} replacement —
|
||||
# it becomes a literal backslash. Double single-quotes via a var instead.
|
||||
local q="'"
|
||||
s="${s//${q}/${q}${q}}"
|
||||
printf '%s' "$s"
|
||||
}
|
||||
|
||||
# Emit the PYENV_ROOT assignment line for tips/--install (posix|fish|pwsh).
|
||||
# Portable default keeps $HOME / $Env:HOME; custom roots are quoted per target shell.
|
||||
function print_pyenv_root_assignment() {
|
||||
case "$1" in
|
||||
posix )
|
||||
if pyenv_root_is_default; then
|
||||
echo 'export PYENV_ROOT="$HOME/.pyenv"'
|
||||
else
|
||||
printf 'export PYENV_ROOT="%s"\n' "$(escape_for_double_quoted_posix "${PYENV_ROOT}")"
|
||||
fi
|
||||
;;
|
||||
fish )
|
||||
if pyenv_root_is_default; then
|
||||
# Keep master's expandable $HOME form (fish expands unquoted $HOME).
|
||||
echo 'set -Ux PYENV_ROOT $HOME/.pyenv'
|
||||
else
|
||||
printf 'set -Ux PYENV_ROOT "%s"\n' "$(escape_for_double_quoted_fish "${PYENV_ROOT}")"
|
||||
fi
|
||||
;;
|
||||
pwsh )
|
||||
if pyenv_root_is_default; then
|
||||
echo '$Env:PYENV_ROOT="$Env:HOME/.pyenv"'
|
||||
else
|
||||
# Single-quoted PowerShell literal: no $ / backtick expansion.
|
||||
printf "\$Env:PYENV_ROOT='%s'\n" "$(escape_for_single_quoted_pwsh "${PYENV_ROOT}")"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
echo "pyenv: internal error: unknown shell family for PYENV_ROOT assignment: $1" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function print_posix_shell_setup() {
|
||||
print_pyenv_root_assignment posix
|
||||
echo 'export PYENV_ROOT="$HOME/.pyenv"'
|
||||
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"'
|
||||
echo 'eval "$(pyenv init - '$shell')"'
|
||||
}
|
||||
@ -268,7 +200,7 @@ function print_fish_shell_setup() {
|
||||
}
|
||||
|
||||
function print_fish_user_path_setup() {
|
||||
print_pyenv_root_assignment fish
|
||||
echo 'set -Ux PYENV_ROOT $HOME/.pyenv'
|
||||
echo 'if functions -q fish_add_path'
|
||||
echo ' test -d $PYENV_ROOT/bin; and fish_add_path $PYENV_ROOT/bin'
|
||||
echo 'else'
|
||||
@ -277,7 +209,7 @@ function print_fish_user_path_setup() {
|
||||
}
|
||||
|
||||
function print_pwsh_shell_setup() {
|
||||
print_pyenv_root_assignment pwsh
|
||||
echo '$Env:PYENV_ROOT="$Env:HOME/.pyenv"'
|
||||
echo 'if (Test-Path -LP "$Env:PYENV_ROOT/bin" -PathType Container) {'
|
||||
echo ' $Env:PATH="$Env:PYENV_ROOT/bin:$Env:PATH" }'
|
||||
echo 'iex ((pyenv init -) -join "`n")'
|
||||
|
||||
@ -80,8 +80,10 @@ fi
|
||||
unset tested_for_other_write_errors
|
||||
|
||||
# The prototype shim file is a script that re-execs itself, passing
|
||||
# its filename and any arguments to `pyenv exec`. This file is copied
|
||||
# for every executable and then removed. It also serves as a lock.
|
||||
# its filename and any arguments to `pyenv exec`. This file is
|
||||
# hard-linked for every executable and then removed. The linking
|
||||
# technique is fast, uses less disk space than unique files, and also
|
||||
# serves as a locking mechanism.
|
||||
create_prototype_shim() {
|
||||
cat > "$PROTOTYPE_SHIM_PATH" <<SH
|
||||
#!/usr/bin/env bash
|
||||
@ -98,30 +100,18 @@ fi
|
||||
exec "$(command -v pyenv)" exec "\$program" "\$@"
|
||||
SH
|
||||
chmod +x "$PROTOTYPE_SHIM_PATH"
|
||||
local LC_ALL=C
|
||||
IFS= read -r -d '' PROTOTYPE_SHIM_CONTENTS < "$PROTOTYPE_SHIM_PATH" || true
|
||||
PROTOTYPE_SHIM_READ_SIZE=$((${#PROTOTYPE_SHIM_CONTENTS} + 1))
|
||||
}
|
||||
|
||||
# Install a shim when it is first registered, replacing an existing copy
|
||||
# if it was overwritten. Hooks can then customize it without a later
|
||||
# registration overwriting their changes.
|
||||
install_shims() {
|
||||
local shim file shim_contents
|
||||
# Count bytes consistently across Bash versions, including multibyte paths.
|
||||
local LC_ALL=C
|
||||
for shim; do
|
||||
file="${SHIM_PATH}/${shim}"
|
||||
if [[ -f "$file" || ( -L "$file" && ! -e "$file" ) ]]; then
|
||||
shim_contents=
|
||||
# Read with a builtin to avoid a subprocess per shim. A successful
|
||||
# read means a NUL or extra character was found. Limit the read in
|
||||
# case a large file was accidentally written over a shim.
|
||||
if IFS= read -r -d '' -n "$PROTOTYPE_SHIM_READ_SIZE" shim_contents 2>/dev/null < "$file" || [[ $shim_contents != "$PROTOTYPE_SHIM_CONTENTS" ]]; then
|
||||
rm -f "$file"
|
||||
fi
|
||||
# If the contents of the prototype shim file differ from the contents
|
||||
# of the first shim in the shims directory, assume pyenv has been
|
||||
# upgraded and the existing shims need to be removed.
|
||||
remove_outdated_shims() {
|
||||
local shim
|
||||
for shim in "$SHIM_PATH"/*; do
|
||||
if ! diff "$PROTOTYPE_SHIM_PATH" "$shim" >/dev/null 2>&1; then
|
||||
rm -f "$SHIM_PATH"/*
|
||||
fi
|
||||
[ -e "$file" ] || cp "$PROTOTYPE_SHIM_PATH" "$file"
|
||||
break
|
||||
done
|
||||
}
|
||||
|
||||
@ -142,10 +132,7 @@ if ((${BASH_VERSINFO[0]} > 3)); then
|
||||
|
||||
# Registers the name of a shim to be generated.
|
||||
register_shim() {
|
||||
if [[ ! ${registered_shims["$1"]} ]]; then
|
||||
install_shims "$1"
|
||||
registered_shims["$1"]=1
|
||||
fi
|
||||
registered_shims["$1"]=1
|
||||
}
|
||||
|
||||
# Install all shims registered via `make_shims` or `register_shim` directly.
|
||||
@ -175,10 +162,7 @@ else # Same for bash < 4.
|
||||
registered_shims=" "
|
||||
|
||||
register_shim() {
|
||||
if [[ "$registered_shims" != *" ${1} "* ]]; then
|
||||
install_shims "$1"
|
||||
registered_shims="${registered_shims}${1} "
|
||||
fi
|
||||
registered_shims="${registered_shims}${1} "
|
||||
}
|
||||
|
||||
install_registered_shims() {
|
||||
@ -204,6 +188,7 @@ shopt -s nullglob
|
||||
# Create the prototype shim, then register shims for all known
|
||||
# executables.
|
||||
create_prototype_shim
|
||||
remove_outdated_shims
|
||||
# shellcheck disable=SC2046
|
||||
make_shims $(pyenv-versions --executables)
|
||||
|
||||
|
||||
@ -19,25 +19,6 @@ by the `xz` package).
|
||||
|
||||
## Commands
|
||||
|
||||
### `pyenv binary install <version>`
|
||||
|
||||
Installs a matching published package from pyenv.github.io under `<version>`.
|
||||
The command selects by OS, architecture and distribution; on macOS, an archive
|
||||
built on an older major release can also be used. Available packages and their
|
||||
definition checksums are recorded in `share/pyenv-binary/versions`. Add an entry
|
||||
there when publishing a new package. The definition checks its system-library
|
||||
requirements when an `ldconfig` cache is available; otherwise, it warns and
|
||||
proceeds.
|
||||
|
||||
```sh
|
||||
pyenv binary install 3.14.7
|
||||
```
|
||||
|
||||
A definition with the selected package entry's name in a plugin's
|
||||
`share/python-build` directory overrides the published definition. The normal
|
||||
Python-Build search order applies, including `PYTHON_BUILD_DEFINITIONS`.
|
||||
Local definitions are installed without downloading the stock definition.
|
||||
|
||||
### `pyenv binary package [-v|--verbose] <version>[:<entry>] --archive-base-url <url>`
|
||||
|
||||
Installs `<version>` from source under a separate name, packages that install
|
||||
@ -74,13 +55,12 @@ pyenv binary package-name 3.12.7
|
||||
# 3.12.7-debian-12-x86_64
|
||||
```
|
||||
|
||||
### `pyenv binary save <version> [<output-dir>] [--name <name>] [--source-version <version>]`
|
||||
### `pyenv binary save <version> [<output-dir>] [--name <name>]`
|
||||
|
||||
Packs an installed version into `<version>-<platform>.tar.xz` (relative paths)
|
||||
and writes `<version>-<platform>.meta` describing the build platform (OS, arch,
|
||||
distro and libc version) and the system libraries the build links against. Use
|
||||
`--name` to set a different base name for both files. `--source-version` records
|
||||
the source version when the installed version has a different name.
|
||||
`--name` to set a different base name for both files.
|
||||
|
||||
```sh
|
||||
pyenv binary save 3.12.7 ./dist
|
||||
@ -107,12 +87,11 @@ pyenv binary generate-installer ./dist/3.12.7-linux-x86_64.meta \
|
||||
pyenv install 3.12.7-linux-x86_64
|
||||
```
|
||||
|
||||
### `pyenv binary relocate <prefix> [<build-prefix>]`
|
||||
### `pyenv binary relocate <prefix>`
|
||||
|
||||
Rewrites the rpaths of a Python tree unpacked into `<prefix>` so the interpreter
|
||||
and its extension modules load the bundled libraries from there rather than from
|
||||
the path the archive was built at. Linux and FreeBSD use `patchelf`; macOS
|
||||
requires the original `<build-prefix>`. The generated definition calls this;
|
||||
you rarely run it by hand.
|
||||
the path the archive was built at. Uses `patchelf`. The generated definition
|
||||
calls this; you rarely run it by hand.
|
||||
|
||||
Relocation is implemented for Linux, FreeBSD and macOS.
|
||||
Relocation is implemented for Linux; macOS is not wired up yet.
|
||||
|
||||
@ -1,130 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Install a published binary package
|
||||
#
|
||||
# Usage: pyenv binary install <version>
|
||||
#
|
||||
# Selects a compatible package from pyenv.github.io and installs it under
|
||||
# <version>. Ordinary `pyenv install' is unchanged.
|
||||
#
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$#" -ne 1 ]; then
|
||||
pyenv-help --usage binary-install >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
*/* | .. | . | *[[:cntrl:]]* )
|
||||
echo "pyenv-binary: invalid version name \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
requested="$1"
|
||||
os="$(uname -s)"
|
||||
arch="$(uname -m)"
|
||||
|
||||
case "$os" in
|
||||
Linux )
|
||||
if [ -r /etc/os-release ]; then
|
||||
distro="$(. /etc/os-release && printf '%s %s' "${ID:-}" "${VERSION_ID:-}")"
|
||||
elif type -p lsb_release >/dev/null; then
|
||||
distro="$(lsb_release -si) $(lsb_release -sr)"
|
||||
fi
|
||||
distro="$(printf '%s' "$distro" | tr '[:upper:]' '[:lower:]')"
|
||||
;;
|
||||
Darwin )
|
||||
distro="macos $(sw_vers -productVersion)"
|
||||
;;
|
||||
esac
|
||||
|
||||
tmpdir="$(mktemp -d)"
|
||||
trap 'rm -rf "$tmpdir"' EXIT
|
||||
base_url="https://pyenv.github.io/pythons/binaries"
|
||||
manifest_dir="$(dirname "${BASH_SOURCE[0]}")/../share/pyenv-binary/versions"
|
||||
case "$requested" in
|
||||
*.*.* ) manifests=( "$manifest_dir/${requested%.*}" ) ;;
|
||||
*.* ) manifests=( "$manifest_dir/$requested" ) ;;
|
||||
* ) manifests=( "$manifest_dir/$requested".* ) ;;
|
||||
esac
|
||||
|
||||
matches="$tmpdir/matches"
|
||||
: > "$matches"
|
||||
for manifest in "${manifests[@]}"; do
|
||||
[ -f "$manifest" ] || continue
|
||||
while IFS=$'\t' read -r source_version name target_os target_arch target_distro sha256; do
|
||||
case "$source_version" in
|
||||
"$requested" | "$requested".* ) ;;
|
||||
* ) continue ;;
|
||||
esac
|
||||
[[ "$source_version" =~ ^[0-9]+(\.[0-9]+){1,2}$ ]] || continue
|
||||
[ "$target_os" = "$os" ] && [ "$target_arch" = "$arch" ] || continue
|
||||
case "$name" in
|
||||
"" | . | .. | *[!A-Za-z0-9._-]* ) continue ;;
|
||||
esac
|
||||
case "$os" in
|
||||
Linux ) [ "$(printf '%s' "$target_distro" | tr '[:upper:]' '[:lower:]')" = "$distro" ] || continue ;;
|
||||
Darwin )
|
||||
target_version="${target_distro#macos }"
|
||||
[ "$target_version" != "$target_distro" ] || continue
|
||||
host_version="${distro#macos }"
|
||||
[[ "$target_version" =~ ^[0-9]+(\.[0-9]+){1,2}$ ]] || continue
|
||||
[[ "$host_version" =~ ^[0-9]+(\.[0-9]+){1,2}$ ]] || continue
|
||||
IFS=. read -r target_major target_minor target_patch <<< "$target_version"
|
||||
IFS=. read -r host_major host_minor host_patch <<< "$host_version"
|
||||
target_patch="${target_patch:-0}"
|
||||
host_patch="${host_patch:-0}"
|
||||
[ "$host_major" -ge "$target_major" ] || continue
|
||||
if [ "$host_major" -eq "$target_major" ]; then
|
||||
[ "$host_minor" -ge "$target_minor" ] || continue
|
||||
if [ "$host_minor" -eq "$target_minor" ]; then
|
||||
[ "$host_patch" -ge "$target_patch" ] || continue
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
* ) continue ;;
|
||||
esac
|
||||
printf '%s\t%s\t%s\n' "$source_version" "$name" "$sha256" >> "$matches"
|
||||
done < "$manifest"
|
||||
done
|
||||
|
||||
selection="$(sort -t. -k1,1nr -k2,2nr -k3,3nr "$matches" | head -n1)"
|
||||
IFS=$'\t' read -r version entry expected_sha <<< "$selection"
|
||||
if [ -z "$entry" ]; then
|
||||
echo "pyenv-binary: no binary available for $requested on $os/$arch" >&2
|
||||
exit 1
|
||||
fi
|
||||
definitions="$(pyenv-install --list --bare)" || definitions=""
|
||||
if printf '%s\n' "$definitions" | grep -qxF -- "$entry"; then
|
||||
pyenv-install "$entry:$version"
|
||||
exit
|
||||
fi
|
||||
|
||||
if ! [[ "$expected_sha" =~ ^[0-9a-fA-F]{64}$ ]]; then
|
||||
echo "pyenv-binary: invalid checksum for $entry" >&2
|
||||
exit 1
|
||||
fi
|
||||
expected_sha="$(printf '%s' "$expected_sha" | tr '[:upper:]' '[:lower:]')"
|
||||
|
||||
curl -fsSL -o "$tmpdir/$entry" "$base_url/$entry"
|
||||
if command -v sha256sum >/dev/null 2>&1; then
|
||||
actual_sha="$(sha256sum "$tmpdir/$entry")"; actual_sha="${actual_sha%% *}"
|
||||
elif command -v shasum >/dev/null 2>&1; then
|
||||
actual_sha="$(shasum -a 256 "$tmpdir/$entry")"; actual_sha="${actual_sha%% *}"
|
||||
elif command -v openssl >/dev/null 2>&1; then
|
||||
actual_sha="$(openssl dgst -sha256 "$tmpdir/$entry")"; actual_sha="${actual_sha##* }"
|
||||
else
|
||||
echo "pyenv-binary: need sha256sum, shasum or openssl to verify $entry" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ "$actual_sha" != "$expected_sha" ]; then
|
||||
echo "pyenv-binary: checksum mismatch for $entry" >&2
|
||||
exit 1
|
||||
fi
|
||||
pyenv-install "$tmpdir/$entry:$version"
|
||||
@ -77,9 +77,7 @@ esac
|
||||
|
||||
# `pyenv install' puts a `<version>:<alias>' build under versions/<alias>.
|
||||
pyenv-install ${verbose:+--verbose} "$spec"
|
||||
source_version="$(pyenv-latest -f -k "${spec%%:*}")"
|
||||
source_version="${source_version##*/}"
|
||||
pyenv-binary-save "$entry" "$PWD" --name "$entry" --source-version "$source_version"
|
||||
pyenv-binary-save "$entry" "$PWD" --name "$entry"
|
||||
|
||||
pyenv-binary-generate-installer "${entry}.meta" \
|
||||
--archive-url "${archive_base_url%/}/${entry}.tar.xz" -o "$entry"
|
||||
|
||||
@ -100,22 +100,6 @@ if [ "$(uname -s)" = "Darwin" ]; then
|
||||
while IFS= read -r so; do
|
||||
relocate_macho "$so" '@loader_path/../..'
|
||||
done < <(find "$prefix" -type f -path '*/lib/python*/lib-dynload/*.so')
|
||||
|
||||
# CPython records its installation prefix in generated scripts and build
|
||||
# metadata. Bytecode can also retain source filenames from the build tree.
|
||||
build_prefix_pattern="$(printf '%s\n' "$build_prefix" | sed 's/[][\\.^$*|]/\\&/g')"
|
||||
prefix_replacement="$(printf '%s\n' "$prefix" | sed 's/[\\&|]/\\&/g')"
|
||||
while IFS= read -r file; do
|
||||
if LC_ALL=C grep -IqF "$build_prefix" "$file"; then
|
||||
sed -i.bak "s|${build_prefix_pattern}|${prefix_replacement}|g" "$file"
|
||||
rm -f "${file}.bak"
|
||||
fi
|
||||
done < <(find "$prefix" -type f ! -name '*.pyc' ! -name '*.pyo')
|
||||
while IFS= read -r file; do
|
||||
if LC_ALL=C grep -aqF "$build_prefix" "$file"; then
|
||||
rm -f "$file"
|
||||
fi
|
||||
done < <(find "$prefix" -type f \( -name '*.pyc' -o -name '*.pyo' \))
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Summary: Save an installed Python version as a relocatable archive
|
||||
#
|
||||
# Usage: pyenv binary save <version> [<output-dir>] [--name <name>] [--source-version <version>]
|
||||
# Usage: pyenv binary save <version> [<output-dir>] [--name <name>]
|
||||
#
|
||||
# Packs an installed version into a relocatable .tar.xz (relative paths) and
|
||||
# writes a metadata file listing the build platform and the system libraries
|
||||
@ -12,7 +12,6 @@
|
||||
# <output-dir> Where to write the archive and metadata (default: `.').
|
||||
# --name <name> Use <name> as the archive and metadata base name instead of
|
||||
# <version>-<platform>.
|
||||
# --source-version <version> Record the version used to build a renamed install.
|
||||
#
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
@ -20,23 +19,18 @@ set -e
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --name
|
||||
echo --source-version
|
||||
exec pyenv-versions --bare
|
||||
fi
|
||||
|
||||
version=""
|
||||
output_dir=""
|
||||
package_name=""
|
||||
source_version=""
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--name )
|
||||
[ $# -ge 2 ] && [ -n "$2" ] || { echo "pyenv-binary: --name needs a value" >&2; exit 1; }
|
||||
package_name="$2"; shift 2 ;;
|
||||
--source-version )
|
||||
[ $# -ge 2 ] && [ -n "$2" ] && [ "${2#-}" = "$2" ] || { echo "pyenv-binary: --source-version needs a value" >&2; exit 1; }
|
||||
source_version="$2"; shift 2 ;;
|
||||
-* )
|
||||
echo "pyenv-binary: unknown option \`$1'" >&2; exit 1 ;;
|
||||
* )
|
||||
@ -55,7 +49,7 @@ done
|
||||
output_dir="${output_dir:-$PWD}"
|
||||
|
||||
if [ -z "$version" ]; then
|
||||
echo "Usage: pyenv binary save <version> [<output-dir>] [--name <name>] [--source-version <version>]" >&2
|
||||
echo "Usage: pyenv binary save <version> [<output-dir>] [--name <name>]" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -75,14 +69,6 @@ case "$package_name" in
|
||||
;;
|
||||
esac
|
||||
|
||||
source_version="${source_version:-$version}"
|
||||
case "$source_version" in
|
||||
*/* | .. | . | *[[:cntrl:]]* )
|
||||
echo "pyenv-binary: invalid source version \`${source_version}'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
prefix="${PYENV_ROOT}/versions/${version}"
|
||||
if [ ! -d "${prefix}/bin" ]; then
|
||||
echo "pyenv-binary: version \`${version}' is not installed" >&2
|
||||
@ -156,7 +142,6 @@ tar -C "$(dirname "$prefix")" -cJf "${output_dir}/${archive}" "$(basename "$pref
|
||||
{
|
||||
echo "# pyenv-binary metadata"
|
||||
echo "version=${version}"
|
||||
echo "source_version=${source_version}"
|
||||
echo "os=${os}"
|
||||
echo "arch=${arch}"
|
||||
echo "platform=${platform}"
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
source_version entry os arch distro sha256
|
||||
3.14.7 3.14.7-macos-15-arm64 Darwin arm64 macos 15.7.9 8a8ff86b520c3b5da00b49e04a5345b7a28f2f9e8da5a9ae43b8ac309e8f3e55
|
||||
3.14.7 3.14.7-ubuntu-24.04-x86_64 Linux x86_64 ubuntu 24.04 e63dbcb981ec9ba83a2bc9b4d8b369620cec4aa45394559d719c5606ee9ff718
|
||||
@ -1,203 +0,0 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
host_distro() {
|
||||
if [ -r /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
printf '%s %s' "$ID" "$VERSION_ID" | tr '[:upper:]' '[:lower:]'
|
||||
else
|
||||
printf '%s %s' "$(lsb_release -si)" "$(lsb_release -sr)" | tr '[:upper:]' '[:lower:]'
|
||||
fi
|
||||
}
|
||||
|
||||
use_manifest() {
|
||||
local plugin="${BATS_TEST_TMPDIR}/plugin"
|
||||
mkdir -p "$plugin/libexec" "$plugin/share/pyenv-binary/versions"
|
||||
cp "${BATS_TEST_DIRNAME}/../libexec/pyenv-binary-install" "$plugin/libexec/"
|
||||
PATH="$plugin/libexec:$PATH"
|
||||
printf 'source_version\tentry\tos\tarch\tdistro\tsha256\n' > "$plugin/share/pyenv-binary/versions/3.14"
|
||||
definition_sha="4c4ed1afbfdaa1e4c3bf7bbb82d730cecb7e384da91eea4f3cc093fd545524d6"
|
||||
}
|
||||
|
||||
stub_downloads() {
|
||||
create_stub curl <<'STUB'
|
||||
output=""
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
-o ) output="$2"; shift ;;
|
||||
http* ) url="$1" ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
case "$url" in
|
||||
*/3.14.7-ubuntu-24.04-x86_64 | */3.14.7-macos-15-arm64 | */3.14.10-ubuntu-24.04-x86_64 ) printf definition > "$output" ;;
|
||||
* ) exit 1 ;;
|
||||
esac
|
||||
STUB
|
||||
}
|
||||
|
||||
@test "rejects a modified published definition" {
|
||||
create_stub lsb_release 'case "$1" in -si) echo Ubuntu;; -sr) echo 24.04;; esac'
|
||||
use_manifest
|
||||
printf '3.14.7\t3.14.7-ubuntu-24.04-x86_64\tLinux\tx86_64\t%s\t%064d\n' \
|
||||
"$(host_distro)" 0 >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
stub_downloads
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
create_stub pyenv-install '[ "$1" = --list ] && exit; echo installed'
|
||||
|
||||
run pyenv-binary-install 3.14.7
|
||||
assert_failure
|
||||
[[ "$output" == *'checksum mismatch'* ]]
|
||||
}
|
||||
|
||||
@test "completion does not offer source-only versions" {
|
||||
create_stub pyenv-install 'echo 3.14.7'
|
||||
|
||||
run pyenv-binary-install --complete
|
||||
assert_success ""
|
||||
}
|
||||
|
||||
@test "a plugin definition overrides a published binary without its checksum" {
|
||||
create_stub lsb_release 'case "$1" in -si) echo Ubuntu;; -sr) echo 24.04;; esac'
|
||||
use_manifest
|
||||
export TMPDIR="$BATS_TEST_TMPDIR/temp"
|
||||
mkdir -p "$TMPDIR"
|
||||
local entry="3.14.7-ubuntu-24.04-x86_64"
|
||||
printf '3.14.7\t%s\tLinux\tx86_64\t%s\t%s\n' "$entry" \
|
||||
"$(host_distro)" "" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
create_stub curl 'touch "$BATS_TEST_TMPDIR/downloaded"; exit 1'
|
||||
PATH="${BATS_TEST_DIRNAME}/../../python-build/bin:$PATH"
|
||||
mkdir -p "$PYENV_ROOT/plugins/first/share/python-build" "$PYENV_ROOT/plugins/second/share/python-build"
|
||||
printf '%s\n' 'mkdir -p "$PREFIX_PATH"; echo first > "$PREFIX_PATH/marker"' \
|
||||
> "$PYENV_ROOT/plugins/first/share/python-build/$entry"
|
||||
echo 'exit 1' > "$PYENV_ROOT/plugins/second/share/python-build/$entry"
|
||||
|
||||
run pyenv-binary-install 3.14
|
||||
assert_success ""
|
||||
assert_equal first "$(cat "$PYENV_ROOT/versions/3.14.7/marker")"
|
||||
[ ! -e "$BATS_TEST_TMPDIR/downloaded" ]
|
||||
assert_equal "" "$(find "$TMPDIR" -mindepth 1 -maxdepth 1 -type d)"
|
||||
}
|
||||
|
||||
@test "an explicit definition path takes precedence over a plugin definition" {
|
||||
create_stub lsb_release 'case "$1" in -si) echo Ubuntu;; -sr) echo 24.04;; esac'
|
||||
use_manifest
|
||||
local entry="3.14.7-ubuntu-24.04-x86_64"
|
||||
printf '3.14.7\t%s\tLinux\tx86_64\t%s\t%s\n' "$entry" \
|
||||
"$(host_distro)" "$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
create_stub curl 'touch "$BATS_TEST_TMPDIR/downloaded"; exit 1'
|
||||
PATH="${BATS_TEST_DIRNAME}/../../python-build/bin:$PATH"
|
||||
export PYTHON_BUILD_DEFINITIONS="$BATS_TEST_TMPDIR/custom definitions"
|
||||
mkdir -p "$PYTHON_BUILD_DEFINITIONS" "$PYENV_ROOT/plugins/custom/share/python-build"
|
||||
printf '%s\n' 'mkdir -p "$PREFIX_PATH"; echo custom > "$PREFIX_PATH/marker"' \
|
||||
> "$PYTHON_BUILD_DEFINITIONS/$entry"
|
||||
echo 'exit 1' > "$PYENV_ROOT/plugins/custom/share/python-build/$entry"
|
||||
|
||||
run pyenv-binary-install 3.14.7
|
||||
assert_success ""
|
||||
assert_equal custom "$(cat "$PYENV_ROOT/versions/3.14.7/marker")"
|
||||
[ ! -e "$BATS_TEST_TMPDIR/downloaded" ]
|
||||
}
|
||||
|
||||
@test "rejects an invalid published checksum when definition lookup fails" {
|
||||
create_stub lsb_release 'case "$1" in -si) echo Ubuntu;; -sr) echo 24.04;; esac'
|
||||
use_manifest
|
||||
printf '3.14.7\t3.14.7-ubuntu-24.04-x86_64\tLinux\tx86_64\t%s\tinvalid\n' \
|
||||
"$(host_distro)" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
create_stub pyenv-install 'exit 1'
|
||||
create_stub curl 'touch "$BATS_TEST_TMPDIR/downloaded"; exit 1'
|
||||
|
||||
run pyenv-binary-install 3.14.7
|
||||
assert_failure "pyenv-binary: invalid checksum for 3.14.7-ubuntu-24.04-x86_64"
|
||||
[ ! -e "$BATS_TEST_TMPDIR/downloaded" ]
|
||||
}
|
||||
|
||||
@test "installs a matching published binary with an uppercase checksum" {
|
||||
create_stub lsb_release 'case "$1" in -si) echo Ubuntu;; -sr) echo 24.04;; esac'
|
||||
use_manifest
|
||||
local uppercase_sha="$(printf '%s' "$definition_sha" | tr '[:lower:]' '[:upper:]')"
|
||||
printf '3.14.7\t3.14.7-macos-15-arm64\tDarwin\tarm64\tmacos 15.7.9\t%s\n' \
|
||||
"$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
printf '3.14.7\t3.14.7-ubuntu-24.04-x86_64\tLinux\tx86_64\t%s\t%s\n' \
|
||||
"$(host_distro | tr '[:lower:]' '[:upper:]')" "$uppercase_sha" \
|
||||
>> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
stub_downloads
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
create_stub pyenv-install <<'STUB'
|
||||
[ "$1" = --list ] && exit
|
||||
definition="${1%:*}"
|
||||
printf '%s:%s\n' "${definition##*/}" "${1##*:}"
|
||||
cat "$definition"
|
||||
STUB
|
||||
|
||||
run pyenv-binary-install 3.14
|
||||
assert_success "3.14.7-ubuntu-24.04-x86_64:3.14.7
|
||||
definition"
|
||||
}
|
||||
|
||||
@test "a version prefix selects the latest published binary" {
|
||||
create_stub lsb_release 'case "$1" in -si) echo Ubuntu;; -sr) echo 24.04;; esac'
|
||||
use_manifest
|
||||
printf '3.14.10\t3.14.10-ubuntu-24.04-x86_64\tLinux\tx86_64\t%s\t%s\n' \
|
||||
"$(host_distro)" "$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
printf '3.14.7\t3.14.7-ubuntu-24.04-x86_64\tLinux\tx86_64\t%s\t%s\n' \
|
||||
"$(host_distro)" "$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
stub_downloads
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
create_stub pyenv-install '[ "$1" = --list ] && exit; echo "${1##*:}"'
|
||||
|
||||
run pyenv-binary-install 3.14
|
||||
assert_success "3.14.10"
|
||||
}
|
||||
|
||||
@test "fails when no published binary matches the host" {
|
||||
use_manifest
|
||||
printf '3.14.7\t3.14.7-macos-15-arm64\tDarwin\tarm64\tmacos 15.7.9\t%s\n' \
|
||||
"$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
|
||||
run pyenv-binary-install 3.14.7
|
||||
assert_failure "pyenv-binary: no binary available for 3.14.7 on Linux/x86_64"
|
||||
}
|
||||
|
||||
@test "does not select a package for another Linux release" {
|
||||
create_stub lsb_release 'case "$1" in -si) echo Ubuntu;; -sr) echo 22.04;; esac'
|
||||
use_manifest
|
||||
local other_release="ubuntu 24.04"
|
||||
[ "$(host_distro)" = "$other_release" ] && other_release="ubuntu 22.04"
|
||||
printf '3.14.7\t3.14.7-ubuntu-24.04-x86_64\tLinux\tx86_64\t%s\t%s\n' \
|
||||
"$other_release" "$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
|
||||
|
||||
run pyenv-binary-install 3.14.7
|
||||
assert_failure "pyenv-binary: no binary available for 3.14.7 on Linux/x86_64"
|
||||
}
|
||||
|
||||
@test "uses a macOS binary built on an older release" {
|
||||
use_manifest
|
||||
printf '3.14.7\t3.14.7-macos-15-arm64\tDarwin\tarm64\tmacos 15.7.9\t%s\n' \
|
||||
"$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
stub_downloads
|
||||
create_stub uname 'case "$1" in -s) echo Darwin;; -m) echo arm64;; esac'
|
||||
create_stub sw_vers 'echo 26.6.2'
|
||||
create_stub pyenv-install '[ "$1" = --list ] && exit; echo "${1##*:}"'
|
||||
|
||||
run pyenv-binary-install 3.14.7
|
||||
assert_success "3.14.7"
|
||||
}
|
||||
|
||||
@test "rejects a macOS binary built on a newer patch release" {
|
||||
use_manifest
|
||||
printf '3.14.7\t3.14.7-macos-15-arm64\tDarwin\tarm64\tmacos 15.7.9\t%s\n' \
|
||||
"$definition_sha" >> "$BATS_TEST_TMPDIR/plugin/share/pyenv-binary/versions/3.14"
|
||||
create_stub uname 'case "$1" in -s) echo Darwin;; -m) echo arm64;; esac'
|
||||
create_stub sw_vers 'echo 15.7.8'
|
||||
create_stub pyenv-install '[ "$1" = --list ] && exit; echo installed'
|
||||
|
||||
run pyenv-binary-install 3.14.7
|
||||
assert_failure "pyenv-binary: no binary available for 3.14.7 on Darwin/arm64"
|
||||
}
|
||||
@ -68,24 +68,10 @@ pyenv-install --list --bare
|
||||
assert [ -d "${PYENV_ROOT}/versions/3.12.7-debian-12-x86_64" ]
|
||||
assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64.tar.xz" ]
|
||||
assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64.meta" ]
|
||||
run grep '^source_version=' "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64.meta"
|
||||
assert_success "source_version=3.12.7"
|
||||
run grep '^ARCHIVE_URL=' "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64"
|
||||
assert_success "ARCHIVE_URL=http://example.com/binaries/3.12.7-debian-12-x86_64.tar.xz"
|
||||
}
|
||||
|
||||
@test "records the definition name when packaging from a file" {
|
||||
stub_build_environment
|
||||
cd "${BATS_TEST_TMPDIR}"
|
||||
printf 'install_package "foo"\n' > custom-python
|
||||
|
||||
run pyenv-binary-package "${BATS_TEST_TMPDIR}/custom-python:custom-build" \
|
||||
--archive-base-url http://example.com/binaries
|
||||
assert_success
|
||||
run grep '^source_version=' custom-build.meta
|
||||
assert_success "source_version=custom-python"
|
||||
}
|
||||
|
||||
@test "rejects an entry name containing a slash" {
|
||||
run pyenv-binary-package "3.12.7:foo/bar" --archive-base-url http://x/b
|
||||
assert_failure "pyenv-binary: invalid entry name \`foo/bar'"
|
||||
@ -98,7 +84,6 @@ pyenv-install --list --bare
|
||||
|
||||
@test "packages on macOS" {
|
||||
create_stub uname 'case "$1" in -s) echo Darwin;; -m) echo arm64;; esac'
|
||||
create_stub pyenv-latest 'echo 3.12.7'
|
||||
create_stub pyenv-install 'echo install'
|
||||
create_stub pyenv-binary-save 'echo save'
|
||||
create_stub pyenv-binary-generate-installer 'echo generate-installer'
|
||||
|
||||
@ -23,25 +23,11 @@ create_interpreter() {
|
||||
}
|
||||
|
||||
create_macos_tree() {
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix&target"
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix"
|
||||
local lib="${prefix}/lib/python3.12"
|
||||
local old="/build prefix/3.12.7"
|
||||
mkdir -p \
|
||||
"${prefix}/bin" \
|
||||
"${prefix}/lib/pkgconfig" \
|
||||
"${lib}/__pycache__" \
|
||||
"${lib}/lib-dynload" \
|
||||
"${lib}/site-packages/numpy"
|
||||
mkdir -p "${prefix}/bin" "${lib}/lib-dynload" "${lib}/site-packages/numpy"
|
||||
printf '#!/bin/sh\n' > "${prefix}/bin/python3.12"
|
||||
chmod +x "${prefix}/bin/python3.12"
|
||||
printf '#!%s/bin/python3.12\n' "$old" > "${prefix}/bin/pip3"
|
||||
chmod +x "${prefix}/bin/pip3"
|
||||
printf 'prefix=%s\n' "$old" > "${prefix}/lib/pkgconfig/python-3.12.pc"
|
||||
printf 'prefix=/build prefix/3x12x7\n' > "${prefix}/lib/pkgconfig/unrelated.pc"
|
||||
printf 'prefix = "%s"\n' "$old" > "${lib}/_sysconfigdata.py"
|
||||
printf '\0bytecode:%s/module.py\n' "$old" > "${lib}/__pycache__/module.cpython-312.pyc"
|
||||
printf '\0bytecode:%s/legacy.py\n' "$old" > "${lib}/legacy.pyo"
|
||||
printf '\0sourceless bytecode\n' > "${lib}/sourceless.pyc"
|
||||
touch "${prefix}/lib/libpython3.12.dylib"
|
||||
touch "${lib}/lib-dynload/_ssl.cpython-312-darwin.so"
|
||||
touch "${lib}/site-packages/numpy/_multiarray.so"
|
||||
@ -59,9 +45,6 @@ case "$1" in
|
||||
-L )
|
||||
echo "${file}:"
|
||||
case "$file" in
|
||||
*/bin/pip3 )
|
||||
exit 1
|
||||
;;
|
||||
*/bin/python3.12 )
|
||||
if [ -n "$OTOOL_RELOCATED" ]; then
|
||||
echo " @rpath/libpython3.12.dylib (compatibility version 3.12.0, current version 3.12.0)"
|
||||
@ -196,7 +179,7 @@ STUB
|
||||
}
|
||||
|
||||
@test "relocates macOS load commands without changing unrelated entries" {
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix&target"
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix"
|
||||
local old="/build prefix/3.12.7"
|
||||
local lib="${prefix}/lib/python3.12"
|
||||
create_macos_tree
|
||||
@ -214,21 +197,10 @@ STUB
|
||||
EOF
|
||||
run grep -F "${lib}/site-packages/numpy/_multiarray.so" "${BATS_TEST_TMPDIR}/otool.log"
|
||||
assert_failure
|
||||
run head -n 1 "${prefix}/bin/pip3"
|
||||
assert_output "#!${prefix}/bin/python3.12"
|
||||
run cat "${prefix}/lib/pkgconfig/python-3.12.pc"
|
||||
assert_output "prefix=${prefix}"
|
||||
run cat "${prefix}/lib/pkgconfig/unrelated.pc"
|
||||
assert_output "prefix=/build prefix/3x12x7"
|
||||
run cat "${lib}/_sysconfigdata.py"
|
||||
assert_output "prefix = \"${prefix}\""
|
||||
assert [ ! -e "${lib}/__pycache__/module.cpython-312.pyc" ]
|
||||
assert [ ! -e "${lib}/legacy.pyo" ]
|
||||
assert [ -e "${lib}/sourceless.pyc" ]
|
||||
}
|
||||
|
||||
@test "skips already relocated macOS load commands" {
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix&target"
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix"
|
||||
create_macos_tree
|
||||
stub_macos_tools
|
||||
export OTOOL_RELOCATED=1
|
||||
@ -239,7 +211,7 @@ EOF
|
||||
}
|
||||
|
||||
@test "fails when install_name_tool cannot modify a selected file" {
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix&target"
|
||||
local prefix="${BATS_TEST_TMPDIR}/prefix"
|
||||
create_macos_tree
|
||||
stub_macos_tools
|
||||
create_path_executable install_name_tool 'exit 1'
|
||||
|
||||
@ -12,7 +12,7 @@ platform() {
|
||||
|
||||
@test "fails with no version given" {
|
||||
run pyenv-binary-save
|
||||
assert_failure "Usage: pyenv binary save <version> [<output-dir>] [--name <name>] [--source-version <version>]"
|
||||
assert_failure "Usage: pyenv binary save <version> [<output-dir>] [--name <name>]"
|
||||
}
|
||||
|
||||
@test "fails for a version that is not installed" {
|
||||
@ -55,28 +55,6 @@ platform() {
|
||||
assert_success "archive=custom.tar.xz"
|
||||
}
|
||||
|
||||
@test "records the source version for a renamed build" {
|
||||
create_version "3.12.7-ubuntu-24.04-x86_64"
|
||||
local out="${BATS_TEST_TMPDIR}/dist"
|
||||
|
||||
run pyenv-binary-save "3.12.7-ubuntu-24.04-x86_64" "$out" \
|
||||
--name "3.12.7-ubuntu-24.04-x86_64" --source-version "3.12.7"
|
||||
assert_success
|
||||
run grep '^source_version=' "${out}/3.12.7-ubuntu-24.04-x86_64.meta"
|
||||
assert_success "source_version=3.12.7"
|
||||
}
|
||||
|
||||
@test "rejects an option as the source version" {
|
||||
run pyenv-binary-save "3.12.7" --source-version --name custom
|
||||
assert_failure "pyenv-binary: --source-version needs a value"
|
||||
}
|
||||
|
||||
@test "rejects control characters in the default source version" {
|
||||
run pyenv-binary-save $'3.12.7\nsource_version=other'
|
||||
assert_failure
|
||||
[[ "$output" == "pyenv-binary: invalid source version"* ]]
|
||||
}
|
||||
|
||||
@test "fails when --name has no value" {
|
||||
run pyenv-binary-save "3.12.7" --name
|
||||
assert_failure "pyenv-binary: --name needs a value"
|
||||
|
||||
@ -261,7 +261,7 @@ for i in "${!DEFINITIONS[@]}"; do
|
||||
PYENV_BOOTSTRAP_VERSION="${PYENV_RPYTHON_VERSION}"
|
||||
else
|
||||
for version in $(pyenv-versions --bare | sort -r); do
|
||||
if [[ "${version}" =~ ^(2\.7|pypy2\.7) ]]; then
|
||||
if [[ "${version}" == "2.7"* ]]; then
|
||||
PYENV_BOOTSTRAP_VERSION="$version"
|
||||
break
|
||||
fi
|
||||
@ -275,7 +275,7 @@ for i in "${!DEFINITIONS[@]}"; do
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "pyenv-install: $VERSION_NAME: PyPy requires Python 2.7 to build from source. You can specify the version to use by setting the PYENV_BOOTSTRAP_VERSION environment variable." >&2
|
||||
echo "pyenv-install: $VERSION_NAME: PyPy requires Python 2.7 to build from source." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
@ -2,16 +2,13 @@
|
||||
#
|
||||
# Summary: Install Python build prerequisites on Debian-based systems
|
||||
#
|
||||
# Usage: pyenv install-prerequisites [-a|--all]
|
||||
#
|
||||
# -a/--all Also install optional dependencies (for rarely used modules)
|
||||
# Usage: pyenv install-prerequisites
|
||||
#
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --all
|
||||
exit
|
||||
fi
|
||||
|
||||
@ -20,22 +17,11 @@ usage() {
|
||||
[ -z "$1" ] || exit "$1"
|
||||
}
|
||||
|
||||
all=
|
||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
usage 0
|
||||
fi
|
||||
|
||||
while (($#)); do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
usage 0
|
||||
;;
|
||||
-a|--all)
|
||||
all=1
|
||||
;;
|
||||
*)
|
||||
usage 1 >&2
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
[ "$#" -eq 0 ] || usage 1 >&2
|
||||
|
||||
if ! command -v apt-get >/dev/null; then
|
||||
echo "pyenv: installing build prerequisites is not supported on this system" >&2
|
||||
@ -47,9 +33,6 @@ prerequisites=(
|
||||
libsqlite3-dev curl git llvm libncurses5-dev libncursesw5-dev xz-utils
|
||||
tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libzstd-dev
|
||||
)
|
||||
optional=(
|
||||
libgdbm-dev
|
||||
)
|
||||
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
apt_get=(apt-get)
|
||||
@ -61,4 +44,4 @@ else
|
||||
fi
|
||||
|
||||
"${apt_get[@]}" update -q
|
||||
"${apt_get[@]}" install -yq "${prerequisites[@]}" ${all:+"${optional[@]}"}
|
||||
"${apt_get[@]}" install -yq "${prerequisites[@]}"
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
# -g/--debug Build a debug version
|
||||
#
|
||||
|
||||
PYTHON_BUILD_VERSION="2.8.7"
|
||||
PYTHON_BUILD_VERSION="2.8.6"
|
||||
|
||||
OLDIFS="$IFS"
|
||||
|
||||
@ -425,18 +425,6 @@ http_head_aria2c() {
|
||||
aria2c --dry-run --no-conf=true ${ARIA2_OPTS} "$1" >&4 2>&1
|
||||
}
|
||||
|
||||
# Shows interactive output of a program
|
||||
# while also logging it.
|
||||
# Usage:
|
||||
# command <switches forcing interactive output to non-terminal> 2>&1 | interactive_output; rc=${PIPESTATUS[0]}
|
||||
interactive_output() {
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
cat >> "$LOG_PATH"
|
||||
else
|
||||
tee -a "$LOG_PATH" >&3
|
||||
fi
|
||||
}
|
||||
|
||||
http_get_aria2c() {
|
||||
# aria2c always treats -o argument as a relative path
|
||||
local out dir_out;
|
||||
@ -459,26 +447,7 @@ http_get_aria2c() {
|
||||
dir_out="$HOME"
|
||||
fi
|
||||
|
||||
local aria2c_progress=
|
||||
# aria2c prints status to stdout rather than stderr.
|
||||
# As a result, when stdout is redirected, it becomes line-buffered,
|
||||
# and status messages (which are divided by CRs) are not seen
|
||||
# until a summary message with some LFs is printed.
|
||||
# So we have to print summaries often as a crutch.
|
||||
# But need to make the interval reasonable because each summary is
|
||||
# several lines long which, made too often, becomes obnoxious.
|
||||
[ -t 3 ] && aria2c_progress="--summary-interval=5"
|
||||
local cmd
|
||||
cmd=(aria2c --allow-overwrite=true --no-conf=true -d "${dir_out}" -o "${out}" ${aria2c_progress} ${ARIA2_OPTS} "$1")
|
||||
|
||||
if [ -t 3 ]; then
|
||||
"${cmd[@]}" 2>&1 | interactive_output
|
||||
ret=${PIPESTATUS[0]}
|
||||
else
|
||||
"${cmd[@]}" >&4
|
||||
ret=$?
|
||||
fi
|
||||
if [ "$ret" -eq 0 ]; then
|
||||
if aria2c --allow-overwrite=true --no-conf=true -d "${dir_out}" -o "${out}" ${ARIA2_OPTS} "$1" >&4; then
|
||||
[ -n "$2" ] || cat "${dir_out:-.}/${out}"
|
||||
else
|
||||
false
|
||||
@ -502,21 +471,7 @@ http_get_curl() {
|
||||
local curl_is_snap;
|
||||
if [[ $(command -v curl) == "/snap/"* ]]; then curl_is_snap=1; fi
|
||||
if [[ -n $2 && -n $curl_is_snap ]]; then out="$HOME/$(basename "$2")"; else out="$2"; fi
|
||||
local curl_progress=
|
||||
if [ -t 3 ]; then
|
||||
curl_progress="--no-silent"
|
||||
fi
|
||||
local cmd
|
||||
cmd=(curl -q -o "${out:--}" -sSLf ${CURL_OPTS} ${curl_progress} "$1")
|
||||
if [ -t 3 ]; then
|
||||
exec 5>&1
|
||||
"${cmd[@]}" 3>&1 1>&5 2>&3 3>&- | interactive_output
|
||||
ret=${PIPESTATUS[0]}
|
||||
exec 5>&-
|
||||
[ "$ret" -eq 0 ] || return "$ret"
|
||||
else
|
||||
"${cmd[@]}" || return $?
|
||||
fi
|
||||
curl -q -o "${out:--}" -sSLf ${CURL_OPTS} "$1" || return $?
|
||||
if [[ -n $out && -n $curl_is_snap ]]; then mv "$out" "$2"; fi
|
||||
}
|
||||
|
||||
@ -525,21 +480,7 @@ http_head_wget() {
|
||||
}
|
||||
|
||||
http_get_wget() {
|
||||
local wget_progress="-nv"
|
||||
if [ -t 3 ]; then
|
||||
wget_progress="-nv --show-progress --progress=bar:force:noscroll"
|
||||
fi
|
||||
local cmd
|
||||
cmd=(wget ${WGET_OPTS} ${wget_progress} -O "${2:--}" "$1")
|
||||
if [ -t 3 ]; then
|
||||
exec 5>&1
|
||||
"${cmd[@]}" 3>&1 1>&5 2>&3 3>&- | interactive_output
|
||||
ret=${PIPESTATUS[0]}
|
||||
exec 5>&-
|
||||
return "$ret"
|
||||
else
|
||||
"${cmd[@]}"
|
||||
fi
|
||||
wget -nv ${WGET_OPTS} -O "${2:--}" "$1"
|
||||
}
|
||||
|
||||
fetch_tarball() {
|
||||
@ -1057,29 +998,27 @@ build_package_jython_builder() {
|
||||
( cd "dist" && build_package_jython )
|
||||
}
|
||||
|
||||
build_package_pyston() {
|
||||
build_package_pyston2_2() {
|
||||
# currently supported version 2.2 and 2.3
|
||||
build_package_copy
|
||||
# Pyston tarballs provide an executable with a version-specific naming scheme
|
||||
# and `pyston` and `pyston3` symlinks to it.
|
||||
make_python_symlinks pyston
|
||||
mkdir -p "${PREFIX_PATH}/bin" "${PREFIX_PATH}/lib"
|
||||
local bin
|
||||
shopt -s nullglob
|
||||
for bin in "bin/"*; do
|
||||
if [ -f "${bin}" ] && [ -x "${bin}" ] && [ ! -L "${bin}" ]; then
|
||||
case "${bin##*/}" in
|
||||
"pyston"* )
|
||||
( cd "${PREFIX_PATH}/bin" && ln -fs "${bin##*/}" "python" )
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
shopt -u nullglob
|
||||
}
|
||||
|
||||
# Add missing `python', `pythonX' and `pythonX.Y' symlinks as per PEP 394.
|
||||
make_python_symlinks() {
|
||||
local seeder_basename version_suffix real_interpreter
|
||||
local -a interpreter_names
|
||||
seeder_basename="${1:?}"; shift
|
||||
(($#)) && interpreter_names=("$@") || interpreter_names=(python)
|
||||
|
||||
local real_interpreter
|
||||
real_interpreter=$(resolve_link "${PREFIX_PATH}/bin/$seeder_basename" || echo $seeder_basename)
|
||||
# Use syntax accepted in both Py2 and Py3. Even though current Py2 holdouts (e.g. PyPy) support e.g. print()
|
||||
version_suffix=$("${PREFIX_PATH}/bin/$seeder_basename" -c 'import sys; sys.stdout.write("%d.%d\n" % sys.version_info[:2])')
|
||||
for interpreter_name in "${interpreter_names[@]}"; do
|
||||
for name in "$interpreter_name" "$interpreter_name${version_suffix%.*}" "$interpreter_name${version_suffix}"; do
|
||||
[[ -e "${PREFIX_PATH}/bin/$name" ]] || ln -fs "${real_interpreter}" "${PREFIX_PATH}/bin/$name"
|
||||
done
|
||||
done
|
||||
build_package_pyston() {
|
||||
# currently supported version 2.3.1v2 and higher
|
||||
build_package_copy
|
||||
}
|
||||
|
||||
build_package_ironpython() {
|
||||
@ -1175,38 +1114,30 @@ pyston_architecture() {
|
||||
# Note: not used by graalpy >= 23.3.0 anymore
|
||||
build_package_graalpython() {
|
||||
build_package_copy
|
||||
make_python_symlinks graalpython
|
||||
ln -fs "${PREFIX_PATH}/bin/graalpython" "${PREFIX_PATH}/bin/python"
|
||||
}
|
||||
|
||||
build_package_pypy() {
|
||||
build_package_copy
|
||||
mkdir -p "${PREFIX_PATH}/bin" "${PREFIX_PATH}/lib"
|
||||
local bin
|
||||
shopt -s nullglob
|
||||
for bin in "bin/libpypy"*; do
|
||||
if [[ -f "${bin}" && -x "${bin}" && ! -L "${bin}" ]]; then
|
||||
ln -fs "../bin/${bin##*/}" "${PREFIX_PATH}/lib/${bin##*/}"
|
||||
fi
|
||||
done
|
||||
|
||||
# PyPy source builds may create only a pypy* executable with a version-sepecific name
|
||||
local seeder= seeder_candidate
|
||||
for seeder_candidate in "${PREFIX_PATH}/bin/"pypy*; do
|
||||
if [[ -f $seeder_candidate && -x $seeder_candidate ]]; then
|
||||
seeder="${seeder_candidate##*/}"
|
||||
break
|
||||
for bin in "bin/"*; do
|
||||
if [ -f "${bin}" ] && [ -x "${bin}" ] && [ ! -L "${bin}" ]; then
|
||||
case "${bin##*/}" in
|
||||
"libpypy"* )
|
||||
( cd "${PREFIX_PATH}/lib" && ln -fs "../bin/${bin##*/}" "${bin##*/}" )
|
||||
;;
|
||||
"pypy"* )
|
||||
( cd "${PREFIX_PATH}/bin" && ln -fs "${bin##*/}" "python" )
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
shopt -u nullglob
|
||||
[[ -n $seeder ]] || {
|
||||
echo "python-build: Cannot find a valid PyPy executable in \`${PREFIX_PATH}/bin'" >&4
|
||||
exit 1
|
||||
}
|
||||
make_python_symlinks "$seeder" pypy python
|
||||
}
|
||||
|
||||
build_package_pypy_builder() {
|
||||
use_homebrew_openssl || use_macports_openssl || true
|
||||
|
||||
if [ -f "rpython/bin/rpython" ]; then # pypy 2.x
|
||||
if [ -z "${PYPY_OPTS}" ]; then
|
||||
local PYPY_OPTS="--opt=jit --batch --make-jobs=$(num_cpu_cores)"
|
||||
@ -1330,7 +1261,7 @@ cleanup_builtin_patches() {
|
||||
|
||||
fix_directory_permissions() {
|
||||
# Ensure installed directories are not world-writable
|
||||
find "$PREFIX_PATH" -type d \( -perm -020 -o -perm -002 \) -exec chmod go-w {} \+
|
||||
find "$PREFIX_PATH" -type d \( -perm -020 -o -perm -002 \) -exec chmod go-w {} \;
|
||||
}
|
||||
|
||||
require_java7() {
|
||||
@ -1587,7 +1518,7 @@ use_homebrew() {
|
||||
if command -v brew &>/dev/null; then
|
||||
local brew_prefix="$(brew --prefix 2>/dev/null || true)"
|
||||
# /usr/local/lib:/usr/lib is the default library search path
|
||||
if [[ -n $brew_prefix && ( ( $brew_prefix != "/usr" && $brew_prefix != "/usr/local" )
|
||||
if [[ -n $brew_prefix && ( ( $brew_prefix != "/usr" && $brew_prefix != "/usr/local" )
|
||||
#when -isysroot is passed to Apple CLang, /usr/(local) are excluded from the default search path
|
||||
|| ( is_mac && osx_using_default_compiler && $CFLAGS =~ (^|\ )-isysroot\ ) ) ]]; then
|
||||
export CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-I${brew_prefix}/include"
|
||||
@ -2838,8 +2769,7 @@ else
|
||||
BUILD_PATH="$PYTHON_BUILD_BUILD_PATH"
|
||||
fi
|
||||
|
||||
# Append mode needed to be able to `tee` to it at the same time
|
||||
exec 4>> "$LOG_PATH"
|
||||
exec 4<> "$LOG_PATH" # open the log file at fd 4
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
tail -f "$LOG_PATH" &
|
||||
TAIL_PID=$!
|
||||
|
||||
@ -1,221 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Rudimentary script to add PyPY releases automagically.
|
||||
Requires requests-html.
|
||||
|
||||
Checks the PyPy download archives for new versions,
|
||||
then writes a build script for any which do not exist locally,
|
||||
saving it to plugins/python-build/share/python-build.
|
||||
|
||||
Written and tested in *CPython* 3.9.6. PyPy3 compatibility is not
|
||||
guaranteed, but it should work.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
import logging
|
||||
import re
|
||||
import sys
|
||||
|
||||
from requests_html import HTMLSession
|
||||
|
||||
# https://downloads.python.org/pypy/versions.json doesn't contain
|
||||
# checksums, so using checksums.html instead.
|
||||
# More convenient than calculating them from downloads.
|
||||
PYPY_REPO = "https://downloads.python.org/pypy/"
|
||||
PYPY_CHECKSUMS = "https://pypy.org/checksums.html"
|
||||
|
||||
here = Path(__file__).resolve()
|
||||
OUT_DIR: Path = here.parent.parent / "share" / "python-build"
|
||||
|
||||
EXCLUDED_RELEASES = [] # none for now
|
||||
|
||||
# Note: Remember to escape/unescape curly braces when editing the bash script
|
||||
SCRIPT_BIN = """
|
||||
VERSION='{version_pypy}'
|
||||
PYVER='{version_python}'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash={checksum_aarch64}
|
||||
linux32_hash={checksum_linux32}
|
||||
linux64_hash={checksum_linux64}
|
||||
osarm64_hash={checksum_osarm64}
|
||||
osx64_hash={checksum_osx64}
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {{
|
||||
local archmsg="${{1}}"
|
||||
local ver="pypy${{PYVER}}-v${{VERSION}}-src"
|
||||
local url="https://downloads.python.org/pypy/${{ver}}.tar.{file_ext}"
|
||||
{{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${{archmsg}}."
|
||||
echo "try '${{url}}' to build from source."
|
||||
echo
|
||||
}} >&2
|
||||
exit 1
|
||||
}}
|
||||
|
||||
function pypy_pkg_data {{
|
||||
# pypy architecture tag
|
||||
local ARCH="${{1}}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package' # use {file_ext}
|
||||
local pkg="${{ARCH}}" # assume matches
|
||||
local ext='tar.{file_ext}'
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${{ARCH}}" in
|
||||
'linux-aarch64' )
|
||||
hash="${{aarch64_hash}}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${{linux32_hash}}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${{linux64_hash}}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${{osarm64_hash}}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "10.15"; then
|
||||
hash="${{osx64_hash}}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${{ARCH}}, OS X < 10.15"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${{ARCH}}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${{PYVER}}-v${{VERSION}}"
|
||||
local baseurl="https://downloads.python.org/pypy/${{basever}}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${{cmd}}" "${{basever}}-${{pkg}}" "${{baseurl}}-${{pkg}}.${{ext}}#${{hash}}"
|
||||
}}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${{pd[0]}} "${{pd[1]}}" "${{pd[2]}}" 'pypy' "verify_py${{PYVER//./}}" '{ensurepip}'
|
||||
""".lstrip()
|
||||
|
||||
SCRIPT_SRC = """
|
||||
VERSION='{version_pypy}'
|
||||
PYVER='{version_python}'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash={checksum_src}
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${{PYVER}}-v${{VERSION}}-src"
|
||||
url="https://downloads.python.org/pypy/${{ver}}.tar.{file_ext}"
|
||||
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "${{ver}}" "${{url}}#${{hash}}" 'pypy_builder' "verify_py${{PYVER//./}}" '{ensurepip}'
|
||||
""".lstrip()
|
||||
|
||||
|
||||
args = None
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def main() -> bool:
|
||||
html_session = HTMLSession()
|
||||
response = html_session.get(PYPY_CHECKSUMS)
|
||||
page = response.html
|
||||
checksum_blocks = page.find("pre.literal-block")
|
||||
for csum_block in checksum_blocks:
|
||||
python_version, pypy_version = parse_pypy_ver(csum_block.text)
|
||||
py_it = f"pypy{python_version}-{pypy_version}"
|
||||
if py_it not in EXCLUDED_RELEASES:
|
||||
vbin_path = OUT_DIR.joinpath(py_it)
|
||||
vsrc_path = OUT_DIR.joinpath(py_it+"-src")
|
||||
|
||||
kwargs = None
|
||||
for ps in ((vbin_path, SCRIPT_BIN), (vsrc_path, SCRIPT_SRC)):
|
||||
if not ps[0].is_file():
|
||||
kwargs = kwargs or parse_checksums_ext(csum_block.text)
|
||||
code = ps[1].format(
|
||||
version_pypy=pypy_version,
|
||||
version_python=python_version,
|
||||
ensurepip="ensurepip" if not python_version == "2.7" else "ensurepip_lt21",
|
||||
**kwargs # which are:
|
||||
# checksum_aarch64
|
||||
# checksum_linux32
|
||||
# checksum_linux64
|
||||
# checksum_osarm64
|
||||
# checksum_osx64
|
||||
# checksum_src
|
||||
# file_ext
|
||||
)
|
||||
if not args.dry_run:
|
||||
with open(file=ps[0], mode="w", encoding="utf-8") as f:
|
||||
f.write(code)
|
||||
f.close()
|
||||
else:
|
||||
print(f"---- DRY RUN SCRIPT FOR {ps[0]} ----")
|
||||
print(code)
|
||||
|
||||
|
||||
def parse_pypy_ver(csum_block:str) -> tuple[str,str]:
|
||||
"""Gets the PyPy name from the checksum block."""
|
||||
match = re.findall(r"pypy([0-9]\.[0-9]+)\-v([0-9]\.[0-9]\.[0-9]+)", csum_block)
|
||||
match = set(match)
|
||||
if len(match) == 1:
|
||||
return match.pop()
|
||||
return ""
|
||||
|
||||
|
||||
def parse_checksums_ext(csum_block:str) -> dict:
|
||||
"""Gets the checksums and ext for each platform (excluding win64) from the checksum block."""
|
||||
chksm_ex = {
|
||||
r"aarch64": "",
|
||||
r"linux32": "",
|
||||
r"linux64": "",
|
||||
r"macos_arm64": "",
|
||||
r"macos_x86_64": "",
|
||||
r"src": "",
|
||||
}
|
||||
ext = set()
|
||||
for ex in chksm_ex:
|
||||
match = re.findall(r"([a-z0-9]+) pypy[0-9]\.[0-9]+\-v[0-9]\.[0-9]\.[0-9]+-"+ex+r".tar.(gz|bz2)", csum_block)
|
||||
chksm_ex[ex] = match[0][0]
|
||||
ext.add(match[0][1])
|
||||
# if both gz and bz2, prefer bz2
|
||||
ext = ext.pop() if len(ext) == 1 else "bz2"
|
||||
return {
|
||||
"checksum_aarch64": chksm_ex["aarch64"],
|
||||
"checksum_linux32": chksm_ex["linux32"],
|
||||
"checksum_linux64": chksm_ex["linux64"],
|
||||
"checksum_osarm64": chksm_ex["macos_arm64"],
|
||||
"checksum_osx64": chksm_ex["macos_x86_64"],
|
||||
"checksum_src": chksm_ex["src"],
|
||||
"file_ext": ext
|
||||
}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument(
|
||||
"-d", "--dry-run", action="store_true",
|
||||
help="Do not write scripts, just report them to stdout",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
#sys.excepthook seems to have no effect in Github Actions
|
||||
try:
|
||||
sys.exit(main())
|
||||
except Exception:
|
||||
logging.exception("Unhandled exception occurred")
|
||||
sys.exit(2)
|
||||
@ -1,9 +0,0 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-3.6.5" "https://github.com/openssl/openssl/releases/download/openssl-3.6.5/openssl-3.6.5.tar.gz#a2157c2830efdec3788939b00c9b0638306d3f0bbb76dc4832ee503bb397df98" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.3" "https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.22" "https://www.python.org/ftp/python/3.10.22/Python-3.10.22.tar.xz#c61fe9b1a1a7ec2a0b0388e664187c378a5325a89e3606d220abf5bdfccb2543" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.22" "https://www.python.org/ftp/python/3.10.22/Python-3.10.22.tgz#9448b34d16f8e3db0964ac3ed9fb283197747543c2c021f283ffd2c8b7287357" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
@ -1,11 +0,0 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL_RPATH=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.6.5" "https://github.com/openssl/openssl/releases/download/openssl-3.6.5/openssl-3.6.5.tar.gz#a2157c2830efdec3788939b00c9b0638306d3f0bbb76dc4832ee503bb397df98" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.3" "https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.17" "https://www.python.org/ftp/python/3.11.17/Python-3.11.17.tar.xz#bfb74ad39efae27cda510f134ab408e00f9992c56851cfc0b1cdb5646da11599" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.17" "https://www.python.org/ftp/python/3.11.17/Python-3.11.17.tgz#53cdee63ac4bf12387b7b33a53d3b1f8f4941cad73807a7b4fe91bb001ef004a" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
@ -1,11 +0,0 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL_RPATH=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.6.5" "https://github.com/openssl/openssl/releases/download/openssl-3.6.5/openssl-3.6.5.tar.gz#a2157c2830efdec3788939b00c9b0638306d3f0bbb76dc4832ee503bb397df98" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.3" "https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.12.15" "https://www.python.org/ftp/python/3.12.15/Python-3.12.15.tar.xz#c2c4321961fab0fb999d66e0cecf521c2ab3994c7992873ea99e306c1094fd5a" standard verify_py312 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.12.15" "https://www.python.org/ftp/python/3.12.15/Python-3.12.15.tgz#de1a241a519e0a3374fea98988d0b52c886743f9d953f23be8269cc7b59c5fab" standard verify_py312 copy_python_gdb ensurepip
|
||||
fi
|
||||
@ -1,11 +0,0 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL_RPATH=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.6.5" "https://github.com/openssl/openssl/releases/download/openssl-3.6.5/openssl-3.6.5.tar.gz#a2157c2830efdec3788939b00c9b0638306d3f0bbb76dc4832ee503bb397df98" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.3" "https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.13.16" "https://www.python.org/ftp/python/3.13.16/Python-3.13.16.tar.xz#f4b1bfb3c79b5bb11b8d228a12504163b4c0dab4d679828d8f5f26b6cb6ab35d" standard verify_py313 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.13.16" "https://www.python.org/ftp/python/3.13.16/Python-3.13.16.tgz#cfac63bddf956deafb1172ca131ae5dcaafd6f95056086e233fca205593ed427" standard verify_py313 copy_python_gdb ensurepip
|
||||
fi
|
||||
@ -1,2 +0,0 @@
|
||||
export PYTHON_BUILD_FREE_THREADING=1
|
||||
source "${BASH_SOURCE[0]%t}"
|
||||
@ -1,11 +0,0 @@
|
||||
prefer_openssl3_to_4
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL_RPATH=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-4.0.3" "https://github.com/openssl/openssl/releases/download/openssl-4.0.3/openssl-4.0.3.tar.gz#325b5c806167c13b40b1ffeadfe0248197c00eccc4cf123ec1e28d2d2fd216d9" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.3" "https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.14.8" "https://www.python.org/ftp/python/3.14.8/Python-3.14.8.tar.xz#c2215904f02b175596dc49351585104f4bc20341e1c47378b26a2c274360ce73" standard verify_py314 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.14.8" "https://www.python.org/ftp/python/3.14.8/Python-3.14.8.tgz#a65b20a728f169f4e66ae143f40b1bd3d33c38d770251663f627c9767b79b210" standard verify_py314 copy_python_gdb ensurepip
|
||||
fi
|
||||
@ -1,2 +0,0 @@
|
||||
export PYTHON_BUILD_FREE_THREADING=1
|
||||
source "${BASH_SOURCE[0]%t}"
|
||||
@ -1,50 +0,0 @@
|
||||
# Copyright (c) 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
# this software and associated documentation files (the "Software"), to deal in
|
||||
# the Software without restriction, including without limitation the rights to
|
||||
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
# of the Software, and to permit persons to whom the Software is furnished to do
|
||||
# so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
VERSION='25.4.4'
|
||||
RELEASE_TAG='graal-25.4.4'
|
||||
|
||||
colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo
|
||||
colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo
|
||||
colorize 1 "The GraalVM Community Edition variant of GraalPy is also available, under the name graalpy3.13-community-${VERSION}" && echo
|
||||
|
||||
|
||||
graalpy_arch="$(graalpy_architecture 2>/dev/null || true)"
|
||||
|
||||
case "$graalpy_arch" in
|
||||
"linux-amd64" )
|
||||
checksum="8b72e6e513d06976e5c8e051228d69d541fde76d05d5f907eaef4bb31db83af4"
|
||||
;;
|
||||
"linux-aarch64" )
|
||||
checksum="1323dc064583efd1d6b696d3a9f9e4b1ff8facd0f7cc2b69fe0a0bf7ef06ea1a"
|
||||
;;
|
||||
"macos-aarch64" )
|
||||
checksum="aacd819b5c3b6889b6a6275d8009ec1e8e3fe27cf7b77265710a1c9ea931bedd"
|
||||
;;
|
||||
* )
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": No binary distribution of GraalPy is available for $(uname -sm)."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
install_package "graalpy3.13-${VERSION}" "https://github.com/oracle/graalpython/releases/download/${RELEASE_TAG}/graalpy3.13-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" "copy" ensurepip
|
||||
@ -1,45 +0,0 @@
|
||||
# Copyright (c) 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
# this software and associated documentation files (the "Software"), to deal in
|
||||
# the Software without restriction, including without limitation the rights to
|
||||
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
# of the Software, and to permit persons to whom the Software is furnished to do
|
||||
# so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
VERSION='25.4.4'
|
||||
RELEASE_TAG='graal-25.4.4'
|
||||
|
||||
graalpy_arch="$(graalpy_architecture 2>/dev/null || true)"
|
||||
|
||||
case "$graalpy_arch" in
|
||||
"linux-amd64" )
|
||||
checksum="a038c8fa650f3bd17046f3cb8609b271e07b0e21fdb8527f10726beee442b93d"
|
||||
;;
|
||||
"linux-aarch64" )
|
||||
checksum="5d0fab1a2f541b387dbf3fbf6b123a5836a0bc99937076f34aeb29282ee246c1"
|
||||
;;
|
||||
"macos-aarch64" )
|
||||
checksum="dce08327e8ccb48423cc50f72a5137d4ff8c9da8ff7319525a69e2e68ac637cd"
|
||||
;;
|
||||
* )
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": No binary distribution of GraalPy is available for $(uname -sm)."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
install_package "graalpy3.13-community-${VERSION}" "https://github.com/oracle/graalpython/releases/download/${RELEASE_TAG}/graalpy3.13-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" "copy" ensurepip
|
||||
@ -1,27 +0,0 @@
|
||||
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
|
||||
From: Ivan Pozdeev <vano@mail.mipt.ru>
|
||||
Date: Fri, 26 Dec 2025 13:39:21 +0300
|
||||
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
|
||||
|
||||
---
|
||||
setup.py | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/setup.py b/setup.py
|
||||
index ad8fb81b218..5666deaf67b 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -307,8 +307,8 @@ def __init__(self, dist):
|
||||
self.failed_on_import = []
|
||||
self.missing = []
|
||||
self.disabled_configure = []
|
||||
- if '-j' in os.environ.get('MAKEFLAGS', ''):
|
||||
- self.parallel = True
|
||||
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
|
||||
+ self.parallel = int(m.group(1)) if m.group(1) else True
|
||||
|
||||
def add(self, ext):
|
||||
self.extensions.append(ext)
|
||||
--
|
||||
2.36.1.windows.1
|
||||
|
||||
@ -1,109 +0,0 @@
|
||||
From cf8eba395ddf888ce7d9e5e4a257209841aff6a4 Mon Sep 17 00:00:00 2001
|
||||
From: Ned Deily <nad@python.org>
|
||||
Date: Wed, 5 Aug 2026 10:30:17 +0300
|
||||
Subject: [PATCH] (downstream) [3.10] gh-153711: Avoid use of dup3 and pipe2
|
||||
calls introduced in macOS 27 (#155211)
|
||||
|
||||
---
|
||||
...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 +++
|
||||
configure | 23 +++++++++++++++++--
|
||||
configure.ac | 11 +++++++--
|
||||
3 files changed, 33 insertions(+), 4 deletions(-)
|
||||
create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
|
||||
diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
new file mode 100644
|
||||
index 00000000000..90804c179a4
|
||||
--- /dev/null
|
||||
+++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
@@ -0,0 +1,3 @@
|
||||
+On macOS, do not attempt to use the :manpage:`dup3(2)` and
|
||||
+:manpage:`pipe2(2)` system calls introduced in
|
||||
+macOS 27 to prevent problems when running on older systems.
|
||||
diff --git a/configure b/configure
|
||||
index 4b71c4e00f8..bfe3e819fff 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -11952,7 +11952,7 @@ fi
|
||||
|
||||
# checks for library functions
|
||||
for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
|
||||
- clock confstr close_range copy_file_range ctermid dup3 execv explicit_bzero \
|
||||
+ clock confstr close_range copy_file_range ctermid execv explicit_bzero \
|
||||
explicit_memset faccessat fchmod fchmodat fchown fchownat \
|
||||
fdwalk fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \
|
||||
futimens futimes gai_strerror getentropy \
|
||||
@@ -11962,7 +11962,7 @@ for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
|
||||
if_nameindex \
|
||||
initgroups kill killpg lchown lockf linkat lstat lutimes mmap \
|
||||
memrchr mbrtowc mkdirat mkfifo \
|
||||
- madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \
|
||||
+ madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause plock poll \
|
||||
posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \
|
||||
pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \
|
||||
readlink readlinkat readv realpath renameat \
|
||||
@@ -12005,6 +12005,25 @@ done
|
||||
|
||||
fi
|
||||
|
||||
+# macOS introduced dup3 and pipe2 in macOS 27, late in the
|
||||
+# lifetime of this version of Python. Rather than adding weaklinking
|
||||
+# support for them, just continue to ignore them.
|
||||
+if test "$ac_sys_system" != "Darwin"; then
|
||||
+ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3"
|
||||
+if test "x$ac_cv_func_dup3" = xyes
|
||||
+then :
|
||||
+ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2"
|
||||
+if test "x$ac_cv_func_pipe2" = xyes
|
||||
+then :
|
||||
+ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
+fi
|
||||
+
|
||||
ac_fn_c_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
"
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ac3be3850a9..0b88132edfb 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3708,7 +3708,7 @@ fi
|
||||
|
||||
# checks for library functions
|
||||
AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
|
||||
- clock confstr close_range copy_file_range ctermid dup3 execv explicit_bzero \
|
||||
+ clock confstr close_range copy_file_range ctermid execv explicit_bzero \
|
||||
explicit_memset faccessat fchmod fchmodat fchown fchownat \
|
||||
fdwalk fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \
|
||||
futimens futimes gai_strerror getentropy \
|
||||
@@ -3718,7 +3718,7 @@ AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
|
||||
if_nameindex \
|
||||
initgroups kill killpg lchown lockf linkat lstat lutimes mmap \
|
||||
memrchr mbrtowc mkdirat mkfifo \
|
||||
- madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \
|
||||
+ madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause plock poll \
|
||||
posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \
|
||||
pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \
|
||||
readlink readlinkat readv realpath renameat \
|
||||
@@ -3740,6 +3740,13 @@ if test "$MACHDEP" != linux; then
|
||||
AC_CHECK_FUNCS(lchmod)
|
||||
fi
|
||||
|
||||
+# macOS introduced dup3 and pipe2 in macOS 27, late in the
|
||||
+# lifetime of this version of Python. Rather than adding weaklinking
|
||||
+# support for them, just continue to ignore them.
|
||||
+if test "$ac_sys_system" != "Darwin"; then
|
||||
+ AC_CHECK_FUNCS([dup3 pipe2])
|
||||
+fi
|
||||
+
|
||||
AC_CHECK_DECL(dirfd,
|
||||
AC_DEFINE(HAVE_DIRFD, 1,
|
||||
Define if you have the 'dirfd' function or macro.), ,
|
||||
--
|
||||
2.55.0.windows.3
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
|
||||
From: Ivan Pozdeev <vano@mail.mipt.ru>
|
||||
Date: Fri, 26 Dec 2025 13:39:21 +0300
|
||||
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
|
||||
|
||||
---
|
||||
setup.py | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/setup.py b/setup.py
|
||||
index ad8fb81b218..5666deaf67b 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -307,8 +307,8 @@ def __init__(self, dist):
|
||||
self.failed_on_import = []
|
||||
self.missing = []
|
||||
self.disabled_configure = []
|
||||
- if '-j' in os.environ.get('MAKEFLAGS', ''):
|
||||
- self.parallel = True
|
||||
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
|
||||
+ self.parallel = int(m.group(1)) if m.group(1) else True
|
||||
|
||||
def add(self, ext):
|
||||
self.extensions.append(ext)
|
||||
--
|
||||
2.36.1.windows.1
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
From cc13eabc7ce08accf49656e258ba500f74a1dae8 Mon Sep 17 00:00:00 2001
|
||||
From: Ronald Oussoren <ronaldoussoren@mac.com>
|
||||
Date: Thu, 28 Dec 2023 09:42:05 +0100
|
||||
Subject: [PATCH] gh-110459: Make sure --with-openssl-rpath works on macOS
|
||||
(#113441)
|
||||
|
||||
* gh-110459: Make sure --with-openssl-rpath works on macOS
|
||||
|
||||
On macOS the `-rpath` linker flag is spelled differently
|
||||
than on on platforms.
|
||||
---
|
||||
.../macOS/2023-12-23-22-41-07.gh-issue-110459.NaMBJy.rst | 2 ++
|
||||
configure | 7 ++++++-
|
||||
configure.ac | 7 ++++++-
|
||||
3 files changed, 14 insertions(+), 2 deletions(-)
|
||||
create mode 100644 Misc/NEWS.d/next/macOS/2023-12-23-22-41-07.gh-issue-110459.NaMBJy.rst
|
||||
|
||||
diff --git a/Misc/NEWS.d/next/macOS/2023-12-23-22-41-07.gh-issue-110459.NaMBJy.rst b/Misc/NEWS.d/next/macOS/2023-12-23-22-41-07.gh-issue-110459.NaMBJy.rst
|
||||
new file mode 100644
|
||||
index 00000000000..44ffd857785
|
||||
--- /dev/null
|
||||
+++ b/Misc/NEWS.d/next/macOS/2023-12-23-22-41-07.gh-issue-110459.NaMBJy.rst
|
||||
@@ -0,0 +1,2 @@
|
||||
+Running ``configure ... --with-openssl-rpath=X/Y/Z`` no longer fails to detect
|
||||
+OpenSSL on macOS.
|
||||
diff --git a/configure b/configure
|
||||
index 7e50abc29d0..6d65d3abc18 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -27478,7 +27478,12 @@ then :
|
||||
|
||||
else $as_nop
|
||||
|
||||
- rpath_arg="-Wl,-rpath="
|
||||
+ if test "$ac_sys_system" = "Darwin"
|
||||
+ then
|
||||
+ rpath_arg="-Wl,-rpath,"
|
||||
+ else
|
||||
+ rpath_arg="-Wl,-rpath="
|
||||
+ fi
|
||||
|
||||
fi
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index e064848af9e..bfdabc4474e 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -6808,7 +6808,12 @@ AX_CHECK_OPENSSL([have_openssl=yes],[have_openssl=no])
|
||||
AS_VAR_IF([GNULD], [yes], [
|
||||
rpath_arg="-Wl,--enable-new-dtags,-rpath="
|
||||
], [
|
||||
- rpath_arg="-Wl,-rpath="
|
||||
+ if test "$ac_sys_system" = "Darwin"
|
||||
+ then
|
||||
+ rpath_arg="-Wl,-rpath,"
|
||||
+ else
|
||||
+ rpath_arg="-Wl,-rpath="
|
||||
+ fi
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([for --with-openssl-rpath])
|
||||
--
|
||||
2.46.2.windows.1
|
||||
|
||||
@ -1,109 +0,0 @@
|
||||
From 29e98f7040994fa86bf63845b00ab9a4d80f5931 Mon Sep 17 00:00:00 2001
|
||||
From: Ned Deily <nad@python.org>
|
||||
Date: Wed, 5 Aug 2026 10:30:17 +0300
|
||||
Subject: [PATCH] (downstream) [3.11] gh-153711: Avoid use of dup3 and pipe2
|
||||
calls introduced in macOS 27 (#155211)
|
||||
|
||||
---
|
||||
...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 +++
|
||||
configure | 23 +++++++++++++++++--
|
||||
configure.ac | 11 +++++++--
|
||||
3 files changed, 33 insertions(+), 4 deletions(-)
|
||||
create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
|
||||
diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
new file mode 100644
|
||||
index 00000000000..90804c179a4
|
||||
--- /dev/null
|
||||
+++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
@@ -0,0 +1,3 @@
|
||||
+On macOS, do not attempt to use the :manpage:`dup3(2)` and
|
||||
+:manpage:`pipe2(2)` system calls introduced in
|
||||
+macOS 27 to prevent problems when running on older systems.
|
||||
diff --git a/configure b/configure
|
||||
index a1ad0ae2510..76a3eec37be 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -15209,7 +15209,7 @@ fi
|
||||
# checks for library functions
|
||||
for ac_func in \
|
||||
accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \
|
||||
- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \
|
||||
+ copy_file_range ctermid dup execv explicit_bzero explicit_memset \
|
||||
faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \
|
||||
fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \
|
||||
gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \
|
||||
@@ -15219,7 +15219,7 @@ for ac_func in \
|
||||
getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \
|
||||
lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \
|
||||
mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \
|
||||
- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \
|
||||
+ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \
|
||||
pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \
|
||||
pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \
|
||||
rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \
|
||||
@@ -15262,6 +15262,25 @@ done
|
||||
|
||||
fi
|
||||
|
||||
+# macOS introduced dup3 and pipe2 in macOS 27, late in the
|
||||
+# lifetime of this version of Python. Rather than adding weaklinking
|
||||
+# support for them, just continue to ignore them.
|
||||
+if test "$ac_sys_system" != "Darwin"; then
|
||||
+ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3"
|
||||
+if test "x$ac_cv_func_dup3" = xyes
|
||||
+then :
|
||||
+ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2"
|
||||
+if test "x$ac_cv_func_pipe2" = xyes
|
||||
+then :
|
||||
+ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
+fi
|
||||
+
|
||||
ac_fn_c_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
"
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 7b4000fa9c3..44167040f3e 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4594,7 +4594,7 @@ fi
|
||||
# checks for library functions
|
||||
AC_CHECK_FUNCS([ \
|
||||
accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \
|
||||
- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \
|
||||
+ copy_file_range ctermid dup execv explicit_bzero explicit_memset \
|
||||
faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \
|
||||
fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \
|
||||
gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \
|
||||
@@ -4604,7 +4604,7 @@ AC_CHECK_FUNCS([ \
|
||||
getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \
|
||||
lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \
|
||||
mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \
|
||||
- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \
|
||||
+ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \
|
||||
pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \
|
||||
pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \
|
||||
rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \
|
||||
@@ -4626,6 +4626,13 @@ if test "$MACHDEP" != linux; then
|
||||
AC_CHECK_FUNCS(lchmod)
|
||||
fi
|
||||
|
||||
+# macOS introduced dup3 and pipe2 in macOS 27, late in the
|
||||
+# lifetime of this version of Python. Rather than adding weaklinking
|
||||
+# support for them, just continue to ignore them.
|
||||
+if test "$ac_sys_system" != "Darwin"; then
|
||||
+ AC_CHECK_FUNCS([dup3 pipe2])
|
||||
+fi
|
||||
+
|
||||
AC_CHECK_DECL(dirfd,
|
||||
AC_DEFINE(HAVE_DIRFD, 1,
|
||||
Define if you have the 'dirfd' function or macro.), ,
|
||||
--
|
||||
2.55.0.windows.3
|
||||
|
||||
@ -1,119 +0,0 @@
|
||||
From ac12d63bf188f9497f8453c0447b9bc599acbf22 Mon Sep 17 00:00:00 2001
|
||||
From: Ned Deily <nad@python.org>
|
||||
Date: Wed, 5 Aug 2026 10:30:17 +0300
|
||||
Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2
|
||||
calls introduced in macOS 27 (#155211)
|
||||
|
||||
---
|
||||
...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++
|
||||
configure | 33 +++++++++++--------
|
||||
configure.ac | 11 +++++--
|
||||
3 files changed, 32 insertions(+), 15 deletions(-)
|
||||
create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
|
||||
diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
new file mode 100644
|
||||
index 00000000000..90804c179a4
|
||||
--- /dev/null
|
||||
+++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst
|
||||
@@ -0,0 +1,3 @@
|
||||
+On macOS, do not attempt to use the :manpage:`dup3(2)` and
|
||||
+:manpage:`pipe2(2)` system calls introduced in
|
||||
+macOS 27 to prevent problems when running on older systems.
|
||||
diff --git a/configure b/configure
|
||||
index b6f90bcd8c7..b93aab935ce 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -17552,13 +17552,7 @@ fi
|
||||
ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup"
|
||||
if test "x$ac_cv_func_dup" = xyes
|
||||
then :
|
||||
- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h
|
||||
-
|
||||
-fi
|
||||
-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3"
|
||||
-if test "x$ac_cv_func_dup3" = xyes
|
||||
-then :
|
||||
- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h
|
||||
+ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv"
|
||||
@@ -18028,12 +18022,6 @@ if test "x$ac_cv_func_pipe" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h
|
||||
|
||||
-fi
|
||||
-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2"
|
||||
-if test "x$ac_cv_func_pipe2" = xyes
|
||||
-then :
|
||||
- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h
|
||||
-
|
||||
fi
|
||||
ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock"
|
||||
if test "x$ac_cv_func_plock" = xyes
|
||||
@@ -18608,6 +18596,25 @@ fi
|
||||
|
||||
fi
|
||||
|
||||
+# macOS introduced dup3 and pipe2 in macOS 27, late in the
|
||||
+# lifetime of this version of Python. Rather than adding weaklinking
|
||||
+# support for them, just continue to ignore them.
|
||||
+if test "$ac_sys_system" != "Darwin"; then
|
||||
+ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3"
|
||||
+if test "x$ac_cv_func_dup3" = xyes
|
||||
+then :
|
||||
+ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2"
|
||||
+if test "x$ac_cv_func_pipe2" = xyes
|
||||
+then :
|
||||
+ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
+fi
|
||||
+
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
|
||||
printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
|
||||
if test ${ac_cv_c_undeclared_builtin_options+y}
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ba768aea930..92049fb2889 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4860,7 +4860,7 @@ fi
|
||||
# checks for library functions
|
||||
AC_CHECK_FUNCS([ \
|
||||
accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \
|
||||
- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \
|
||||
+ copy_file_range ctermid dup execv explicit_bzero explicit_memset \
|
||||
faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \
|
||||
fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \
|
||||
gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \
|
||||
@@ -4870,7 +4870,7 @@ AC_CHECK_FUNCS([ \
|
||||
getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \
|
||||
lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \
|
||||
mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \
|
||||
- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \
|
||||
+ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \
|
||||
pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \
|
||||
pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \
|
||||
rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \
|
||||
@@ -4892,6 +4892,13 @@ if test "$MACHDEP" != linux; then
|
||||
AC_CHECK_FUNCS([lchmod])
|
||||
fi
|
||||
|
||||
+# macOS introduced dup3 and pipe2 in macOS 27, late in the
|
||||
+# lifetime of this version of Python. Rather than adding weaklinking
|
||||
+# support for them, just continue to ignore them.
|
||||
+if test "$ac_sys_system" != "Darwin"; then
|
||||
+ AC_CHECK_FUNCS([dup3 pipe2])
|
||||
+fi
|
||||
+
|
||||
AC_CHECK_DECL([dirfd],
|
||||
[AC_DEFINE([HAVE_DIRFD], [1],
|
||||
[Define if you have the 'dirfd' function or macro.])],
|
||||
--
|
||||
2.55.0.windows.3
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
||||
3.14.8
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.10'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=274342f0e75e99d60ba7a0cfb0e13792e7664163e01450d2f7f2f7825603a0ae
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.11'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=ea924da1defe9325ef760e288b04f984614e405580f5321eb6a5c8f539bd415a
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.12'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=e04dcb6286a7b4724ec3f0e50d3cc1ba8583301dd1658c06d7f37599e4201c59
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.13'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=f1e20f833cc86a097c1f1318069fc17d01c3988678c1438fe27ed567fcb5cfd0
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.14'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=98468f4cc704a2821401afdd001ebddd367e594e05a70c7767fb86f1364fb21a
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.15'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=31b41fca7280636d7818713b7a0fab8f34ece9c82cc88e51d305d43b3e6306d6
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.16'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=be44e65dd8c00d2388b2580dbe2af6a5179f951a8f4979efc74360f92f3c7e96
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.17'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=a8df5ce1650f4756933f8780870c91a0a40e7c9870d74629bf241392bcb5c2e3
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.18'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=d647cad5be915df65f44277fd051c8d52e708d22838b5cb21b2de033530acc80
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.19'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=fe89d4fd4af13f76dfe7315975003518cf176520e3ccec1544a88d174f50910e
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.20'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=f22a1be607deeaa4f9be6bc63aae09fe4fb5b990d6a23aa4e7c5960dc5d93c96
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,78 +0,0 @@
|
||||
VERSION='7.3.21'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=8aaed1e612e6874235ee9d5bd545a8dcc7b86c867d305351df37969390b0c47b
|
||||
linux32_hash=14cb624e60b3012b4e5605571ab1477cea732a04e1c1385cc492d99f427a477f
|
||||
linux64_hash=d560f4043180b0df5826396af17d060bd731e4fee34755167040924ece876f3e
|
||||
osarm64_hash=7f69e5241ba7d10015e12d5b6dc1bb65458fcdc118385eee1ae0dde4e7f75776
|
||||
osx64_hash=e73061b21fc56f16a4fa7a4a24ffe0304c3df95b249852ea56e5b39110abdd70
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {
|
||||
local archmsg="${1}"
|
||||
local ver="pypy${PYVER}-v${VERSION}-src"
|
||||
local url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${archmsg}."
|
||||
echo "try '${url}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function pypy_pkg_data {
|
||||
# pypy architecture tag
|
||||
local ARCH="${1}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package' # use bz2
|
||||
local pkg="${ARCH}" # assume matches
|
||||
local ext='tar.bz2'
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${ARCH}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${osarm64_hash}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${ARCH}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${PYVER}-v${VERSION}"
|
||||
local baseurl="https://downloads.python.org/pypy/${basever}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}"
|
||||
}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21'
|
||||
@ -1,14 +0,0 @@
|
||||
VERSION='7.3.21'
|
||||
PYVER='2.7'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash=23537c62e875ad1a3e675c64d4435eff392ea20843e20d690fd1400b79363d64
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${PYVER}-v${VERSION}-src"
|
||||
url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21'
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.22'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=49829ef97a36d50870b0a4a7d6d67c4817d98a0bbd936e7a86ac6ef615b07205
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,78 +0,0 @@
|
||||
VERSION='7.3.23'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=b0bec20c16b6ab2bd46bd4f5d6049b6070a22a53eaed437ee9ac36d842ceda74
|
||||
linux32_hash=fa6499281775ec22f4742e9dd7b31c22b8fc6a700c1cf50aebc7ef24f61461c5
|
||||
linux64_hash=7833be48244a6f4aa0720c6b98f151428291a52697da849ef6b3ca7d5bf45b96
|
||||
osarm64_hash=f83d8fce9695f598dc55187c0f6c06c367dbf76d288d2bca7dbf040e4be15f37
|
||||
osx64_hash=edbddb678c00f29c2361dbe6c6ea634f5d62e6854a775a9209c6b789bb0dc00b
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {
|
||||
local archmsg="${1}"
|
||||
local ver="pypy${PYVER}-v${VERSION}-src"
|
||||
local url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${archmsg}."
|
||||
echo "try '${url}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function pypy_pkg_data {
|
||||
# pypy architecture tag
|
||||
local ARCH="${1}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package' # use bz2
|
||||
local pkg="${ARCH}" # assume matches
|
||||
local ext='tar.bz2'
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${ARCH}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${osarm64_hash}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${ARCH}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${PYVER}-v${VERSION}"
|
||||
local baseurl="https://downloads.python.org/pypy/${basever}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}"
|
||||
}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21'
|
||||
@ -1,14 +0,0 @@
|
||||
VERSION='7.3.23'
|
||||
PYVER='2.7'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash=7aa8eaf414d25f916fe426365404759c56aa28aea6190e65967c4a45f64dc899
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${PYVER}-v${VERSION}-src"
|
||||
url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21'
|
||||
@ -1,9 +1,8 @@
|
||||
VERSION='7.3.8'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=b5edfc995d83feea8b4c8aeffccb89753b4b182f076126550bd07cc35faa6208
|
||||
aarch64_hash=ca1f8d3146c83002ee97615906b0930e821297dcce3063b5b28933a0690ef298
|
||||
linux32_hash=7c84f173bbcd73d0eb10909259d11b5cc253d4c6ea4492e6da8f2532df9b3da5
|
||||
linux64_hash=1f2e84fb539ffce233c34769d2f11647955f894be091e85419e05f48011e8940
|
||||
osx64_hash=e5c1ff39ad9916ea23e3deb8012fe42367b6b19284cf13b1a1ea2b2f53a43add
|
||||
@ -29,7 +28,7 @@ function pypy_pkg_data {
|
||||
case "${pkg}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
url="${baseurl}-aarch64-portable.tar.bz2" # diff url
|
||||
url="${baseurl}-aarch64.tar.bz2" # diff url
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
@ -40,12 +39,12 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < ${MIN_OSX_VERSION}."
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13."
|
||||
echo "try '${basesrc}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.9'
|
||||
PYVER='2.7'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=aff4e4dbab53448f662cd01acb2251571d60f836d2f48382a7d8da54ca5b3442
|
||||
@ -49,10 +48,10 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,77 +0,0 @@
|
||||
VERSION='8.0.0'
|
||||
PYVER='2.7'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=9ece5a6f575514ed38dde663e7f54e59de01c35b2df6d1ef83e25490d6b7c7b8
|
||||
linux32_hash=74d09cafbe0c85ae4c4d17d54099c6b31354235ffdd5277c01601434cc23e459
|
||||
linux64_hash=714e8c41608d0d66588c3ba48fb788dc33a1e8a865168d165585d1660beade0d
|
||||
osarm64_hash=167966aa205ca29b8d3ac6994e3d0d1741f3bf03e9e300737ed591304347c7b0
|
||||
osx64_hash=4e4f27669b27a7ff950058eb07e22687f5a04ba04220bb3df24411f07d5c0340
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {
|
||||
local archmsg="${1}"
|
||||
local ver="pypy${PYVER}-v${VERSION}-src"
|
||||
local url="https://downloads.python.org/pypy/${ver}.tar.gz"
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${archmsg}."
|
||||
echo "try '${url}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function pypy_pkg_data {
|
||||
# pypy architecture tag
|
||||
local ARCH="${1}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package'
|
||||
local pkg="${ARCH}" # assume matches
|
||||
local ext='tar.gz' # v8.0.0+ now uses gz instead of bz2
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${ARCH}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${osarm64_hash}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "10.15"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < 10.15"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${ARCH}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${PYVER}-v${VERSION}"
|
||||
local baseurl="https://downloads.python.org/pypy/${basever}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}"
|
||||
}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21'
|
||||
@ -1,12 +0,0 @@
|
||||
VERSION='8.0.0'
|
||||
PYVER='2.7'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash=e2a56b587014a97a7e6bd14ae99b55247cf2939d67a05a09e62af0afc16125cb
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${PYVER}-v${VERSION}-src"
|
||||
url="https://downloads.python.org/pypy/${ver}.tar.gz"
|
||||
|
||||
install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21'
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.12'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=26208b5a134d9860a08f74cce60960005758e82dc5f0e3566a48ed863a1f16a1
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.13'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=ac476f01c9653358404f2e4b52f62307b2f64ccdb8c96dadcbfe355824d81a63
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.14'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=fbef65dfc69dcd6006d843553d268b331f1b13dfc3938492bd35f0f477b5bcf4
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.15'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=52146fccaf64e87e71d178dda8de63c01577ec3923073dc69e1519622bcacb74
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.16'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=fc720999bc5050e1d3706b3b6445e695cf42bfc71ebc7c88ed6bb88828b1d385
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.17'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=53b6e5907df869c49e4eae7aca09fba16d150741097efb245892c1477d2395f2
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.18'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=e843aecd48eb06b625af67891b99e3440313cfb64c6851fc37df1e5572c8ef9e
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.19'
|
||||
PYVER='3.10'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=af27a589178f11198e2244ab65ca510630ba97c131d7ccc4021eb5bc58de7f57
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.18'
|
||||
PYVER='3.11'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=95bc3021cb9be2aa766ecb776c215e97ae8c0dda99dd48840b40b5b87d90bc45
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.19'
|
||||
PYVER='3.11'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=13207dbf81ce24e96da760b1b863627b77bb20b1fb4c95191e02a0b72383df74
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.20'
|
||||
PYVER='3.11'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=9347fe691a07fd9df17a1b186554fb9d9e6210178ffef19520a579ce1f9eb741
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,78 +0,0 @@
|
||||
VERSION='7.3.21'
|
||||
PYVER='3.11'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=6141f5c64dd96faf87e0a3f7f362521eadd26d5e3f851f90fc386a72208f8c18
|
||||
linux32_hash=0c449ff3f20589e331f163807a0200a9bf5dd375c95f513a0f60bf7524795f02
|
||||
linux64_hash=43f27af8ee6673932493f2696ab407321cbf79dbed94c03d8b39e603f8f5f765
|
||||
osarm64_hash=a43f97ff9f6016aac09ee75eb626d806e8ad865608e7d8bc4d3c2fc37c2b4799
|
||||
osx64_hash=60dfb37dda85d548cd6a4d7bdb12ff26e19162042001b741fd9b6a8ecee802a6
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {
|
||||
local archmsg="${1}"
|
||||
local ver="pypy${PYVER}-v${VERSION}-src"
|
||||
local url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${archmsg}."
|
||||
echo "try '${url}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function pypy_pkg_data {
|
||||
# pypy architecture tag
|
||||
local ARCH="${1}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package' # use bz2
|
||||
local pkg="${ARCH}" # assume matches
|
||||
local ext='tar.bz2'
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${ARCH}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${osarm64_hash}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${ARCH}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${PYVER}-v${VERSION}"
|
||||
local baseurl="https://downloads.python.org/pypy/${basever}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}"
|
||||
}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,14 +0,0 @@
|
||||
VERSION='7.3.21'
|
||||
PYVER='3.11'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash=e7c9d8236ef279dba51abb9e691401a6c805bbe3250c6842dc9bac98f8de688a
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${PYVER}-v${VERSION}-src"
|
||||
url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.22'
|
||||
PYVER='3.11'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=c29a8933e2084f52df74c829aa0d8f5652b9d5919f68e9fb89cab3afe35dd884
|
||||
@ -52,11 +51,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
|
||||
@ -1,78 +0,0 @@
|
||||
VERSION='7.3.23'
|
||||
PYVER='3.11'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=5433ac0ad526aeb35025ef8509bed65cd62ea35cb9e21ac649c69a5eff4eecb6
|
||||
linux32_hash=c7e2ffb173dcadbe4708a2e606e0b705474c1c33f25a09a4084f265d538172e4
|
||||
linux64_hash=16f9f56e82d1f4ec95a324c1a8cacfd78afc7f0656c0a809a18725ef4391453a
|
||||
osarm64_hash=4747b3aceba4c1c6104cddc0fe5ea302101d32955f0957347b9ecc4fbd7aed05
|
||||
osx64_hash=c95363c4e87235d11a6cec8128239c291b1eb67a752778fbcfe029a71da82b5e
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {
|
||||
local archmsg="${1}"
|
||||
local ver="pypy${PYVER}-v${VERSION}-src"
|
||||
local url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${archmsg}."
|
||||
echo "try '${url}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function pypy_pkg_data {
|
||||
# pypy architecture tag
|
||||
local ARCH="${1}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package' # use bz2
|
||||
local pkg="${ARCH}" # assume matches
|
||||
local ext='tar.bz2'
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${ARCH}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${osarm64_hash}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${ARCH}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${PYVER}-v${VERSION}"
|
||||
local baseurl="https://downloads.python.org/pypy/${basever}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}"
|
||||
}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,14 +0,0 @@
|
||||
VERSION='7.3.23'
|
||||
PYVER='3.11'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash=f15c9c41e03f3f7ecc25228c6c67427b8918f21ef2d694215994b1fade20f69b
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${PYVER}-v${VERSION}-src"
|
||||
url="https://downloads.python.org/pypy/${ver}.tar.bz2"
|
||||
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,77 +0,0 @@
|
||||
VERSION='8.0.0'
|
||||
PYVER='3.11'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=37faf1a0b00131748910ad21844a9b1b3fedd630c89b01ec98cdb1b5466ffca5
|
||||
linux32_hash=14fcf398eacffdc98db2f3b10ae9e8c9628932dc89b0958d145b9fd9c7307301
|
||||
linux64_hash=66a3657e9ddf2d62ead44d3a44b9ea2f6e7dbf28d812554cae5c982a0585bfa5
|
||||
osarm64_hash=8fb2abc4f6e3fb5d40ad5bac5092bb6dfcc5131b4a5d2663073155084b9569e4
|
||||
osx64_hash=5f295181d622147271b51281d4968cb9d11b8c639af9aacf07fd710a496b8d10
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {
|
||||
local archmsg="${1}"
|
||||
local ver="pypy${PYVER}-v${VERSION}-src"
|
||||
local url="https://downloads.python.org/pypy/${ver}.tar.gz"
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${archmsg}."
|
||||
echo "try '${url}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function pypy_pkg_data {
|
||||
# pypy architecture tag
|
||||
local ARCH="${1}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package'
|
||||
local pkg="${ARCH}" # assume matches
|
||||
local ext='tar.gz' # v8.0.0+ now uses gz instead of bz2
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${ARCH}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${osarm64_hash}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "10.15"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < 10.15"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${ARCH}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${PYVER}-v${VERSION}"
|
||||
local baseurl="https://downloads.python.org/pypy/${basever}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}"
|
||||
}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,12 +0,0 @@
|
||||
VERSION='8.0.0'
|
||||
PYVER='3.11'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash=829cef413d84383563488f0234b3cc537a8034e43fda13e0530500dad2d5dc3b
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${PYVER}-v${VERSION}-src"
|
||||
url="https://downloads.python.org/pypy/${ver}.tar.gz"
|
||||
|
||||
install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,77 +0,0 @@
|
||||
VERSION='8.0.0'
|
||||
PYVER='3.12'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=72de008683246b0c18aeb8e163dc5d022d3f19b001e8cc5c258010968f10e336
|
||||
linux32_hash=228d793e57217f2516032db2c38e593914cb222f0d41660d1d8adbb571dcd4e3
|
||||
linux64_hash=a1b4851459c2b3dffccab71cb08989534fab0839deddd34f0e6bf18add256fd7
|
||||
osarm64_hash=936ee357126058e43b374ec055495127c9187e2026144b48dca09cc2dcb9b443
|
||||
osx64_hash=6dd2909a52c205993b42f45f0e92470af54e63387a4e1f61232f9307e72f1447
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
function err_no_binary {
|
||||
local archmsg="${1}"
|
||||
local ver="pypy${PYVER}-v${VERSION}-src"
|
||||
local url="https://downloads.python.org/pypy/${ver}.tar.gz"
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for ${archmsg}."
|
||||
echo "try '${url}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function pypy_pkg_data {
|
||||
# pypy architecture tag
|
||||
local ARCH="${1}"
|
||||
|
||||
# defaults
|
||||
local cmd='install_package'
|
||||
local pkg="${ARCH}" # assume matches
|
||||
local ext='tar.gz' # v8.0.0+ now uses gz instead of bz2
|
||||
local hash='' # undefined
|
||||
|
||||
# select the hash, fix pkg if not match ARCH
|
||||
case "${ARCH}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
pkg='aarch64'
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
pkg='linux32'
|
||||
;;
|
||||
'linux64' )
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osarm64' )
|
||||
hash="${osarm64_hash}"
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "10.15"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < 10.15"
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
err_no_binary "${ARCH}"
|
||||
;;
|
||||
esac
|
||||
|
||||
local basever="pypy${PYVER}-v${VERSION}"
|
||||
local baseurl="https://downloads.python.org/pypy/${basever}"
|
||||
|
||||
# result - command, package dir, url+hash
|
||||
echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}"
|
||||
}
|
||||
|
||||
# determine command, package directory, url+hash
|
||||
declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")"
|
||||
|
||||
# install
|
||||
${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,12 +0,0 @@
|
||||
VERSION='8.0.0'
|
||||
PYVER='3.12'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
hash=eb406334e413828901034544d0033d67452c3cf2f11f77fd2daae0cd4fbb0a7b
|
||||
|
||||
### end of manual settings - following lines same for every download
|
||||
|
||||
ver="pypy${PYVER}-v${VERSION}-src"
|
||||
url="https://downloads.python.org/pypy/${ver}.tar.gz"
|
||||
|
||||
install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip'
|
||||
@ -1,9 +1,8 @@
|
||||
VERSION='7.3.8'
|
||||
PYVER='3.7'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=639c76f128a856747aee23a34276fa101a7a157ea81e76394fbaf80b97dcf2f2
|
||||
aarch64_hash=4fb2f8281f3aaca72e6fe62ecc5fc054fcc79cd061ca3e0eea730f7d82d610d4
|
||||
linux32_hash=38429ec6ea1aca391821ee4fbda7358ae86de4600146643f2af2fe2c085af839
|
||||
linux64_hash=409085db79a6d90bfcf4f576dca1538498e65937acfbe03bd4909bdc262ff378
|
||||
osx64_hash=76b8eef5b059a7e478f525615482d2a6e9feb83375e3f63c16381d80521a693f
|
||||
@ -29,7 +28,7 @@ function pypy_pkg_data {
|
||||
case "${pkg}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
url="${baseurl}-aarch64-portable.tar.bz2" # diff url
|
||||
url="${baseurl}-aarch64.tar.bz2" # diff url
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
@ -40,12 +39,12 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < ${MIN_OSX_VERSION}."
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13."
|
||||
echo "try '${basesrc}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.9'
|
||||
PYVER='3.7'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=dfc62f2c453fb851d10a1879c6e75c31ffebbf2a44d181bb06fcac4750d023fc
|
||||
@ -49,10 +48,10 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.10'
|
||||
PYVER='3.8'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=e4caa1a545f22cfee87d5b9aa6f8852347f223643ad7d2562e0b2a2f4663ad98
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.11'
|
||||
PYVER='3.8'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=9a2fa0b8d92b7830aa31774a9a76129b0ff81afbd22cd5c41fbdd9119e859f55
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
VERSION='7.3.8'
|
||||
PYVER='3.8'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=0210536e9f1841ba283c13b04783394050837bb3e6f4091c9f1bd9c7f2b94b55
|
||||
aarch64_hash=fe41df391f87239925e573e195e631a9d03d37f471eb1479790ee13ca47a28af
|
||||
linux32_hash=bea4b275decd492af6462157d293dd6fcf08a949859f8aec0959537b40afd032
|
||||
linux64_hash=089f8e3e357d6130815964ddd3507c13bd53e4976ccf0a89b5c36a9a6775a188
|
||||
osx64_hash=de1b283ff112d76395c0162a1cf11528e192bdc230ee3f1b237f7694c7518dee
|
||||
@ -29,7 +28,7 @@ function pypy_pkg_data {
|
||||
case "${pkg}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
url="${baseurl}-aarch64-portable.tar.bz2" # diff url
|
||||
url="${baseurl}-aarch64.tar.bz2" # diff url
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
@ -40,12 +39,12 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < ${MIN_OSX_VERSION}."
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13."
|
||||
echo "try '${basesrc}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.9'
|
||||
PYVER='3.8'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=5e124455e207425e80731dff317f0432fa0aba1f025845ffca813770e2447e32
|
||||
@ -49,10 +48,10 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.10'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=657a04fd9a5a992a2f116a9e7e9132ea0c578721f59139c9fb2083775f71e514
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.11'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=09175dc652ed895d98e9ad63d216812bf3ee7e398d900a9bf9eb2906ba8302b9
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.12'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=e9327fb9edaf2ad91935d5b8563ec5ff24193bddb175c1acaaf772c025af1824
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.13'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=317d7876c5825a086f854253648b967a432b993ce87695d2895d3ad6ed0d2716
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.14'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=14b842f32f60ce2d9d130971f9bcbdb6875824a0e78fac36806d267e0982179c
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.15'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=03e35fcba290454bb0ccf7ee57fb42d1e63108d10d593776a382c0a2fe355de0
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.16'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.15'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=de3f2ed3581b30555ac0dd3e4df78a262ec736a36fb2e8f28259f8539b278ef4
|
||||
@ -53,11 +52,11 @@ function pypy_pkg_data {
|
||||
pkg='macos_arm64'
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
pkg='macos_x86_64'
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
VERSION='7.3.8'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=b7282bc4484bceae5bc4cc04e05ee4faf51cb624c8fc7a69d92e5fdf0d0c96aa
|
||||
aarch64_hash=89d7ee12a8c416e83fae80af82482531fc6502321e75e5b7a0cc01d756ee5f0e
|
||||
linux32_hash=0894c468e7de758c509a602a28ef0ba4fbf197ccdf946c7853a7283d9bb2a345
|
||||
linux64_hash=129a055032bba700cd1d0acacab3659cf6b7180e25b1b2f730e792f06d5b3010
|
||||
osx64_hash=95bd88ac8d6372cd5b7b5393de7b7d5c615a0c6e42fdb1eb67f2d2d510965aee
|
||||
@ -29,7 +28,7 @@ function pypy_pkg_data {
|
||||
case "${pkg}" in
|
||||
'linux-aarch64' )
|
||||
hash="${aarch64_hash}"
|
||||
url="${baseurl}-aarch64-portable.tar.bz2" # diff url
|
||||
url="${baseurl}-aarch64.tar.bz2" # diff url
|
||||
;;
|
||||
'linux' )
|
||||
hash="${linux32_hash}"
|
||||
@ -40,12 +39,12 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < ${MIN_OSX_VERSION}."
|
||||
echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13."
|
||||
echo "try '${basesrc}' to build from source."
|
||||
echo
|
||||
} >&2
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
VERSION='7.3.9'
|
||||
PYVER='3.9'
|
||||
MIN_OSX_VERSION='10.14'
|
||||
|
||||
# https://www.pypy.org/checksums.html
|
||||
aarch64_hash=2e1ae193d98bc51439642a7618d521ea019f45b8fb226940f7e334c548d2b4b9
|
||||
@ -49,10 +48,10 @@ function pypy_pkg_data {
|
||||
hash="${linux64_hash}"
|
||||
;;
|
||||
'osx64' )
|
||||
if require_osx_version "${MIN_OSX_VERSION}"; then
|
||||
if require_osx_version "10.13"; then
|
||||
hash="${osx64_hash}"
|
||||
else
|
||||
err_no_binary "${ARCH}, OS X < ${MIN_OSX_VERSION}"
|
||||
err_no_binary "${ARCH}, OS X < 10.13"
|
||||
fi
|
||||
;;
|
||||
's390x' )
|
||||
|
||||
@ -6,7 +6,7 @@ echo
|
||||
|
||||
case "$(pyston_architecture 2>/dev/null || true)" in
|
||||
"linux64" )
|
||||
install_package "pyston_2.2" "https://github.com/pyston/pyston/releases/download/pyston_2.2/pyston_2.2_portable.tar.gz#d113cc4d1f6821c0f117f7a84978823d8ac751d7970fa7841eb994663ec5a59f" pyston verify_py38 get_pip
|
||||
install_package "pyston_2.2" "https://github.com/pyston/pyston/releases/download/pyston_2.2/pyston_2.2_portable.tar.gz#d113cc4d1f6821c0f117f7a84978823d8ac751d7970fa7841eb994663ec5a59f" "pyston2_2" verify_py38 get_pip
|
||||
;;
|
||||
* )
|
||||
{ echo
|
||||
|
||||
@ -6,7 +6,7 @@ echo
|
||||
|
||||
case "$(pyston_architecture 2>/dev/null || true)" in
|
||||
"linux64" )
|
||||
install_package "pyston_2.3" "https://github.com/pyston/pyston/releases/download/v2.3/pyston_2.3_portable-v2.tar.gz#90185e29e4a1a19562c095f2bb4e81a5d0715150fa10eca363ec1188b5ba7ee7" pyston verify_py38 get_pip
|
||||
install_package "pyston_2.3" "https://github.com/pyston/pyston/releases/download/v2.3/pyston_2.3_portable-v2.tar.gz#90185e29e4a1a19562c095f2bb4e81a5d0715150fa10eca363ec1188b5ba7ee7" "pyston2_2" verify_py38 get_pip
|
||||
;;
|
||||
* )
|
||||
{ echo
|
||||
|
||||
@ -6,7 +6,7 @@ echo
|
||||
|
||||
case "$(pyston_architecture 2>/dev/null || true)" in
|
||||
"linux64" )
|
||||
install_package "pyston_2.3.1" "https://github.com/pyston/pyston/releases/download/pyston_2.3.1/pyston_2.3.1_portable_v2.tar.gz#4e16df1eaf5f226c0629f2db1e63033454c94cb9e29f50154177819662df5b15" pyston verify_py38 get_pip
|
||||
install_package "pyston_2.3.1" "https://github.com/pyston/pyston/releases/download/pyston_2.3.1/pyston_2.3.1_portable_v2.tar.gz#4e16df1eaf5f226c0629f2db1e63033454c94cb9e29f50154177819662df5b15" "pyston" verify_py38 get_pip
|
||||
;;
|
||||
* )
|
||||
{ echo
|
||||
|
||||
@ -6,7 +6,7 @@ echo
|
||||
|
||||
case "$(pyston_architecture 2>/dev/null || true)" in
|
||||
"linux64" )
|
||||
install_package "pyston_2.3.2" "https://github.com/pyston/pyston/releases/download/pyston_2.3.2/pyston_2.3.2_portable.tar.gz#80e71dd2db504e09951ee835e04c9e1183c79412da9aa11d98a6d3f44b95bec1" pyston verify_py38 get_pip
|
||||
install_package "pyston_2.3.2" "https://github.com/pyston/pyston/releases/download/pyston_2.3.2/pyston_2.3.2_portable.tar.gz#80e71dd2db504e09951ee835e04c9e1183c79412da9aa11d98a6d3f44b95bec1" "pyston" verify_py38 get_pip
|
||||
;;
|
||||
* )
|
||||
{ echo
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
case "$(pyston_architecture 2>/dev/null || true)" in
|
||||
"linux64" )
|
||||
install_package "pyston_2.3.3_portable_amd64" "https://github.com/pyston/pyston/releases/download/pyston_2.3.3/pyston_2.3.3_portable_amd64.tar.gz#7a38e2bd2fed38e6daba4d513bae32af0d5ba6185cadf37cb1af6bcc4de0cb57" pyston verify_py38 get_pip
|
||||
install_package "pyston_2.3.3_portable_amd64" "https://github.com/pyston/pyston/releases/download/pyston_2.3.3/pyston_2.3.3_portable_amd64.tar.gz#7a38e2bd2fed38e6daba4d513bae32af0d5ba6185cadf37cb1af6bcc4de0cb57" "pyston" verify_py38 get_pip
|
||||
;;
|
||||
"linux-aarch64" )
|
||||
install_package "pyston_2.3.3_portable_arm64" "https://github.com/pyston/pyston/releases/download/pyston_2.3.3/pyston_2.3.3_portable_arm64.tar.gz#f93f55b59120f576e5755bd8f86fa38361a30ca5389dbadc68450051ee2dccb1" pyston verify_py38 get_pip
|
||||
install_package "pyston_2.3.3_portable_arm64" "https://github.com/pyston/pyston/releases/download/pyston_2.3.3/pyston_2.3.3_portable_arm64.tar.gz#f93f55b59120f576e5755bd8f86fa38361a30ca5389dbadc68450051ee2dccb1" "pyston" verify_py38 get_pip
|
||||
;;
|
||||
* )
|
||||
{ echo
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user