1
0
mirror of https://github.com/pyenv/pyenv.git synced 2025-11-08 11:33:49 -05:00

Compare commits

...

74 Commits

Author SHA1 Message Date
Anton Petrov
dcfd715603 Update pyenv---version 2021-09-20 20:08:06 +03:00
Anton Petrov
474d7cc066 Update CHANGELOG.md 2021-09-20 20:07:51 +03:00
Anton Petrov
02c44942c6 Merge pull request #2067 from native-api/readme
Update setup instructions in the Readme
2021-09-20 07:33:50 +03:00
Ivan Pozdeev
76db37dbfa Update fish instructions based on user feedback 2021-09-19 01:08:26 +03:00
Ivan Pozdeev
eb89256f59 Remove the sample code from pyenv init
since there proved to be to many cases to fit
2021-09-19 00:27:03 +03:00
Ivan Pozdeev
19f74e41f0 Update setup instructions based on user feedback 2021-09-19 00:26:48 +03:00
Ivan Pozdeev
6c74b616a5 Windows note as a separate section 2021-09-19 00:26:30 +03:00
Ivan Pozdeev
8cce6e8dd2 Add notes when to use the 2nd shell step 2021-09-19 00:26:07 +03:00
Ivan Pozdeev
03cabd88e9 Highlight MacOS note about restart 2021-09-19 00:26:07 +03:00
tillhainbach
e56962b357 allow tcl-tk as argument or try with homebrew by default Replacement for #1409 (#1646)
* feat(python-build): allow tcl-tk as argument or default to homebrew
* refactor(python-build): detect tcl-tk-libs from confugre_opts_arr
2021-09-17 14:56:53 +03:00
Ivan Pozdeev
cabdc45181 fix possible side effect 2021-09-17 03:52:52 +03:00
Ivan Pozdeev
7f45f1eb9d Merge branch 'sbin'
# Conflicts:
#	test/prefix.bats
2021-09-15 20:45:27 +03:00
Ivan Pozdeev
acc949c27b fix test 2021-09-15 20:42:41 +03:00
native-api
4f689cdf83 Allow system Python in sbin (#2065)
Arch Linux has Python is sbin as well as bin
2021-09-15 20:00:49 +03:00
Ivan Pozdeev
26134d9b38 Allow system Python in sbin
Arch Linux has Python is sbin as well as bin
2021-09-15 19:07:00 +03:00
Pamela McA'Nulty
1c90a0f864 Prevent duplicate PATH entries when bin_path/.. is the same as PYENV_ROOT (#2045) 2021-09-15 01:09:50 +03:00
Toshihiro Takushima
90d0d20508 Disable coreutils on M1 Apple Silicon with arm64 (#2020)
* Disable coreutils on arm64-apple
* Only selectively apply to the affected CPython versions

Co-authored-by: Ivan Pozdeev <vano@mail.mipt.ru>
2021-09-09 15:53:00 +03:00
Ned Batchelder
58e2087967 Add Python 3.10.0rc2 (#2053) 2021-09-08 17:28:25 +03:00
Seonghyeon Cho
a65af6570d Add space after yes/no prompt (#2040) 2021-09-07 23:35:53 +03:00
Ricardo N Feliciano
70d7749584 Add CPython v3.6.15 and v3.7.12 (#2052) 2021-09-07 23:07:40 +03:00
Víctor Molina García
9df4524c79 Add missing Python 2.6.x definitions and patches (#2051) 2021-09-06 22:37:38 +03:00
Víctor Molina García
f7450587dc Fix build of ossaudiodev in Linux/FreeBSD for Python 2.6 (#2049)
This is essentially the same fix as in pull request #2047, but it
is applied from Python 2.6.6 to 2.6.9, and for `ossaudiodev` as well
as the (deprecated) `linuxaudiodev`.
2021-09-05 21:54:57 +03:00
Víctor Molina García
22e1aa6e9d Fix build of ossaudiodev in Linux/FreeBSD for Python 3.1 (#2047)
With the normal `setup.py`, the installation of the `ossaudiodev`
module is skipped under GNU/Linux with newer kernel versions because
Python 3.1 appends the major kernel version to the result of
`build_ext.get_platform` and later `ossaudiodev` is skipped if the
major kernel version is not 2. A similar problem might occur if
installing in FreeBSD.

This problem may even occur if installing Python 3.1 in a Docker image
of an old OS (e.g. prehistoric Debian or CentOS), because the major
kernel version is still the one of the host system.

The solution is to use `str.startswith` and only check that the
platform starts with 'linux' or 'freebsd'.
2021-09-03 16:56:45 +03:00
Anton Petrov
2d64fb1cb9 Update pyenv---version 2021-08-31 08:44:12 +03:00
Anton Petrov
a85875c39e Update CHANGELOG.md 2021-08-31 08:43:56 +03:00
Anton Petrov
8db5778b12 Merge pull request #2044 from poad/master
Add CPython 3.9.7
2021-08-31 08:36:49 +03:00
Kenji Saito
c7d8a1c33d Add CPython 3.9.7 2021-08-31 08:29:43 +09:00
Ricardo N Feliciano
44b7da194b Add CPython v3.8.12 (#2043) 2021-08-30 23:39:24 +03:00
Anton Petrov
b2eb2d28d1 Merge pull request #2037 from NyaMisty/master
[Fixed] Adapt conda.bash for bash associative array
2021-08-24 13:42:02 +03:00
Anton Petrov
8b60418361 Update CHANGELOG.md 2021-08-23 10:35:08 +03:00
Anton Petrov
e9c8dfc197 Update pyenv---version 2021-08-23 10:34:26 +03:00
Sakuragawa Misty
dfeda54079 fixes checking of associative array in conda.bash 2021-08-21 04:20:23 +08:00
Anton Petrov
4f8b15fecd Merge pull request #2035 from pyenv/revert-2027-master
Revert "Adapt conda.bash for bash associative array"
2021-08-20 14:18:30 +03:00
Anton Petrov
07609cc579 Revert "Adapt conda.bash for bash associative array" 2021-08-20 09:58:18 +03:00
Anton Petrov
3738c2a282 Merge pull request #2027 from NyaMisty/master
Adapt conda.bash for bash associative array
2021-08-19 19:38:25 +03:00
Anton Petrov
9668be8850 Merge pull request #2032 from vatosarmat/master
Move man page to location where it can be automatically found by man
2021-08-19 13:29:12 +03:00
V S
dc36c300e1 Move man page to location where in can be automatically found by manpage utility without manual MANPATH setting 2021-08-19 19:55:22 +10:00
Sakuragawa Misty
351ddb1095 Adapt conda.bash for bash associative array 2021-08-10 05:54:51 +08:00
native-api
d209e0612b Merge pull request #2025 from fredrikaverpil/fix-checksums
Update checksums for CPython 3.10.0rc1
Remove 3.10.0rc1
2021-08-04 23:23:24 +03:00
Fredrik Averpil
825ef64995 Remove CPython 3.10.0b4 2021-08-04 22:22:11 +02:00
Fredrik Averpil
65588f51d9 Update checksums for CPython 3.10.0rc1 2021-08-04 22:16:34 +02:00
Anton Petrov
ab1a9d290c Merge pull request #2022 from native-api/remove_3.9.3
Remove 3.9.3
2021-08-03 21:58:21 +03:00
Anton Petrov
b40ef3c698 Merge pull request #2023 from fredrikaverpil/add-3100rc1
Add CPython 3.10.0rc1
2021-08-03 21:57:08 +03:00
Fredrik Averpil
1427f80828 Add test to CI 2021-08-03 20:10:53 +02:00
Fredrik Averpil
9db1193c2a Add CPython 3.10.0rc1 2021-08-03 20:07:38 +02:00
Ivan Pozdeev
1f906baae8 Remove 3.9.3
It has been recalled due to introducing an unexpected incompatibility:
https://www.python.org/downloads/release/python-393/
2021-08-03 06:52:44 +03:00
Anton Petrov
cef86ce462 Update pyenv---version 2021-07-25 11:54:16 +03:00
Anton Petrov
52822a3d50 Update CHANGELOG.md 2021-07-25 11:53:58 +03:00
Anton Petrov
afc8031544 Merge pull request #2019 from anton-petrov/master
Added scripts for rolling releases of Miniforge
2021-07-25 11:48:07 +03:00
Anton Petrov
c435fde088 Rename mambaforge3-pypy3-latest to mambaforge-pypy3 2021-07-25 11:38:11 +03:00
Anton Petrov
3773dfb4f1 Update and rename miniforge3-pypy3 to miniforge-pypy3 2021-07-25 11:37:22 +03:00
Anton Petrov
abe0056b5f Update and rename mambaforge3-latest to mambaforge 2021-07-25 11:34:51 +03:00
Anton Petrov
fd8854dea1 Rename miniforge3-latest to miniforge3 2021-07-25 11:34:05 +03:00
Anton Petrov
9b6377de23 Create mambaforge3-pypy3-latest 2021-07-25 11:30:59 +03:00
Anton Petrov
8c251a5e9b Rename mambaforge3 to mambaforge3-latest 2021-07-25 11:27:21 +03:00
Anton Petrov
a6d6ba8050 Rename miniforge3 to miniforge3-latest 2021-07-25 11:26:54 +03:00
Anton Petrov
fc7560bcfd Update and rename mambaforge3-latest to mambaforge3 2021-07-25 11:24:59 +03:00
Anton Petrov
56fd6c3c51 Update and rename miniforge3-latest to miniforge3 2021-07-25 11:24:31 +03:00
Anton Petrov
db82c73391 Create miniforge3-pypy3 2021-07-25 11:23:28 +03:00
Anton Petrov
d4d66b6183 Update miniforge3-latest 2021-07-25 11:12:58 +03:00
Anton Petrov
0c287ffcf7 Create mambaforge3-latest 2021-07-25 11:12:29 +03:00
Anton Petrov
af59ef0088 Create miniforge3-latest 2021-07-25 11:09:54 +03:00
David Lawson
ad8807543b Update pyston-2.3 (#2017)
The original 2.3 portable version was compiled on Ubuntu 20.04 and didn't work with older glibc.

This has been fixed and the older file has been deleted so hopefully this change is acceptable.
2021-07-22 19:28:04 +03:00
Michael Šimáček
aad74674cb Add GraalPython 21.2.0 (#2018) 2021-07-22 19:26:11 +03:00
Anton Petrov
f043f47c35 Merge pull request #2013 from nedbat/fix-3.10.0b4
fix: correct the reported version for 3.10.0b4
2021-07-20 08:14:12 +03:00
Ned Batchelder
d769f22996 fix: correct the reported version for 3.10.0b4 2021-07-19 14:40:13 -04:00
Anton Petrov
56fe98bfed Merge pull request #2012 from dmrlawson/pyston-2.3
Add Pyston 2.3
2021-07-18 20:55:42 +03:00
David Lawson
041903c640 Add Pyston 2.3 2021-07-18 18:21:01 +01:00
Anton Petrov
84a6535708 Merge pull request #2005 from nedbat/3.10.0b4
3.10.0b4
2021-07-12 07:51:57 +03:00
Ned Batchelder
93dd6f1163 Add 3.10.0b4 2021-07-11 14:02:39 -04:00
Anton Petrov
3a5a21ee05 Update pyenv---version 2021-07-03 10:10:58 +03:00
Anton Petrov
ae29f86968 Update CHANGELOG.md 2021-07-03 10:10:42 +03:00
native-api
f7754ae6a4 Remove PATH warning (#2001)
* In some cases (Ubuntu), `pyenv init -` has to be run before `pyenv init --path`.
* The warning has served its purpose by now.
2021-07-03 09:48:13 +03:00
Illia Volochii
673c73012d Add Python 3.6.14, 3.7.11, 3.8.11, and 3.9.6 (#1996) 2021-06-29 13:45:48 +03:00
77 changed files with 2263 additions and 253 deletions

View File

@@ -12,6 +12,7 @@ jobs:
- 3.7.10
- 3.8.10
- 3.9.5
- 3.10.0rc2
runs-on: Ubuntu-20.04
steps:
- uses: actions/checkout@v2

View File

@@ -1,5 +1,45 @@
## Version History
## Release 2.0.7
* Update setup instructions in the Readme (#2067)
* Allow tcl-tk as argument or try with homebrew by default (#1646)
* Allow system Python in sbin (#2065)
* Prevent addition of duplicate plugin dirs to PATH (#2045)
* Disable coreutils on M1 Apple Silicon with arm64 (#2020)
* Add Python 3.10.0rc2 (#2053)
* Add space after `yes/no` prompt (#2040)
* Add CPython v3.6.15 and v3.7.12 (#2052)
* Add missing Python 2.6.x definitions and patches (#2051)
* Fix build of ossaudiodev in Linux/FreeBSD for Python 2.6 (#2049)
* Fix build of ossaudiodev in Linux/FreeBSD for Python 3.1 (#2047)
## Release 2.0.6
* Add CPython 3.9.7 (#2044)
* Add CPython v3.8.12 (#2043)
* Adapt conda.bash for bash associative array (#2037)
## Release 2.0.5
* Move man page to location where it can be automatically found by man (#2032)
* Update checksums for CPython 3.10.0rc1 (#2025)
* Remove 3.9.3 (#2022)
* Add CPython 3.10.0rc1(#2023)
## Release 2.0.4
- Added scripts for rolling releases of Miniforge (#2019)
- Update pyston-2.3 (#2017)
- Add GraalPython 21.2.0 (#2018)
- Add CPython 3.10.0b4 (#2013), (#2005)
- Add Pyston 2.3 (#2012)
## Release 2.0.3
* Remove PATH warning (#2001)
* Add Python 3.6.14, 3.7.11, 3.8.11, and 3.9.6 (#1996)
* Miniforge minor update to 4.10.1-5 (#1992)
* Suggest that fish users init in interactive mode (#1991)
## Release 2.0.2
* Miniforge minor update to 4.10.1-5 (#1992)

288
README.md
View File

@@ -46,6 +46,10 @@ This project was forked from [rbenv](https://github.com/rbenv/rbenv) and
* [Choosing the Python Version](#choosing-the-python-version)
* [Locating the Python Installation](#locating-the-python-installation)
* **[Installation](#installation)**
* [Prerequisites](#prerequisites)
* [Homebrew in macOS](#homebrew-in-macos)
* [Windows](#windows)
* [Automatic installer](#automatic-installer)
* [Basic GitHub Checkout](#basic-github-checkout)
* [Upgrading](#upgrading)
* [Homebrew on macOS](#homebrew-on-macos)
@@ -168,11 +172,11 @@ We'd recommend to install pyenv-virtualenv as well if you have some plan to play
## Installation
### Prerequisites:
### Prerequisites
For pyenv to install python correctly you should [**install the Python build dependencies**](https://github.com/pyenv/pyenv/wiki#suggested-build-environment).
### Homebrew on macOS
### Homebrew in macOS
1. Consider installing with [Homebrew](https://brew.sh):
```sh
@@ -181,9 +185,20 @@ For pyenv to install python correctly you should [**install the Python build dep
```
2. Then follow the rest of the post-installation steps under [Basic GitHub Checkout](https://github.com/pyenv/pyenv#basic-github-checkout), starting with #2 ("Configure your shell's environment for Pyenv").
If you're on Windows, consider using @kirankotari's [`pyenv-win`](https://github.com/pyenv-win/pyenv-win) fork. (Pyenv does not work in Windows outside the Windows Subsystem for Linux.)
### The automatic installer
### Windows
Pyenv does not officially support Windows and does not work in Windows outside
the Windows Subsystem for Linux.
Moreover, even there, the Pythons it installs are not native Windows versions
but rather Linux versions run through a compatibility layer --
so you won't get Windows-specific functionality.
If you're in Windows, we recommend using @kirankotari's [`pyenv-win`](https://github.com/pyenv-win/pyenv-win) fork --
which does install native Windows Python versions.
### Automatic installer
Visit our other project:
https://github.com/pyenv/pyenv-installer
@@ -206,139 +221,156 @@ easy to fork and contribute any changes back upstream.
2. **Configure your shell's environment for Pyenv**
**Note:** The below instructions for specific shells are designed for common shell setups.
If you have an uncommon setup and they don't work for you,
use the guidance text and the [Advanced Configuration](#advanced-configuration)
**Note:** The below instructions for specific shells are designed for common shell setups;
they also install shell functions into interactive shells only.
If you have an uncommon setup and/or needs and they don't work for you,
use the [Advanced Configuration](#advanced-configuration)
section below to figure out what you need to do in your specific case.
1. **Adjust the session-wide environment for your account.** Define
the `PYENV_ROOT` environment variable to point to the path where
you cloned the Pyenv repo, add the `pyenv` command-line utility to your `PATH`,
run the output of `pyenv init --path` to enable shims.
**General MacOS note:**
Make sure that your terminal app is configured to run the shell as a login shell
(especially if you're using an alternative terminal app and/or shell).
The configuration samples for MacOS are written under this assumption and won't work otherwise.
These commands need to be added into your shell startup files in such a way
that _they are executed only once per session, by its login shell._
This typically means they need to be added into a per-user shell-specific
`~/.*profile` file, _and_ into `~/.profile`, too, so that they are also
run by GUI managers (which typically act as a `sh` login shell).
- For **Bash**:
**MacOS note:** If you installed Pyenv with Homebrew, you don't need
to add the `PYENV_ROOT=` and `PATH=` lines.
You also don't need to add commands into `~/.profile` if your shell doesn't use it.
- For **Bash**:
- **If your `~/.profile` sources `~/.bashrc` (Debian, Ubuntu, Mint):**
~~~bash
# the sed invocation inserts the lines at the start of the file
# after any initial comment lines
sed -iEe '/^([^#]|$)/ {a \
export PYENV_ROOT="$HOME/.pyenv"
a \
export PATH="$PYENV_ROOT/bin:$PATH"
a \
' -e ':a' -e '$!{n;ba};}' ~/.profile
echo 'eval "$(pyenv init --path)"' >>~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
~~~
- **If your `~/.bash_profile` sources `~/.bashrc` (Red Hat, Fedora, CentOS):**
~~~ bash
sed -iEe '/^([^#]|$)/ {a \
export PYENV_ROOT="$HOME/.pyenv"
a \
export PATH="$PYENV_ROOT/bin:$PATH"
a \
' -e ':a' -e '$!{n;ba};}' ~/.bash_profile
echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
~~~
- **If your `~/.profile` sources `~/.bashrc` (Debian, Ubuntu, Mint):**
- **If you have no `~/.bash_profile` and your `/etc/profile` sources `~/.bashrc` (SUSE):**
Put these lines into `~/.profile` _before_ the part that sources `~/.bashrc`:
~~~bash
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
~~~
~~~bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile
echo 'if command -v pyenv >/dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bashrc
~~~
And put this line at the _bottom_ of `~/.profile`:
~~~bash
eval "$(pyenv init --path)"
~~~
- **Otherwise if you have no stock `~/.profile` or `~/.bash_profile` (MacOS):**
~~~bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile
echo 'if [ -n "$PS1" -a -n "$BASH_VERSION" ]; then source ~/.bashrc; fi' >> ~/.profile
<!--This is an alternative option and needn't be replicated to `pyenv init`-->
Alternatively, for an automated installation, you can run the following:
~~~ bash
echo -e 'if shopt -q login_shell; then' \
'\n export PYENV_ROOT="$HOME/.pyenv"' \
'\n export PATH="$PYENV_ROOT/bin:$PATH"' \
'\n eval "$(pyenv init --path)"' \
'\nfi' >> ~/.bashrc
echo -e 'if [ -z "$BASH_VERSION" ]; then'\
'\n export PYENV_ROOT="$HOME/.pyenv"'\
'\n export PATH="$PYENV_ROOT/bin:$PATH"'\
'\n eval "$(pyenv init --path)"'\
'\nfi' >>~/.profile
~~~
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
~~~
**Note:** If you have `~/.bash_profile`, make sure that it too executes the above-added commands,
e.g. by copying them there or by `source`'ing `~/.profile`.
In MacOS, make sure that your terminal app runs the shell as a login shell.
- For **Zsh**:
- **Temporary environments (CI, batch jobs):**
- **MacOS, if Pyenv is installed with Homebrew:**
In CI/build environments, paths and the environment are usually already set up for you
in one of the above ways.
You may only need to install Pyenv as a shell function into the (noninteractive) shell
that runs the batch script, and only if you need subcommands that require `pyenv`
to be a shell function (e.g. `shell` and Pyenv-Virtualenv's `activate`).
~~~ zsh
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
~~~
~~~bash
echo 'eval "$(pyenv init -)"'
~~~
- **MacOS, if Pyenv is installed with a Git checkout:**
~~~ zsh
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
~~~
**General Bash warning**: There are some systems where the `BASH_ENV` variable is configured
to point to `.bashrc`. On such systems, you should almost certainly put the
`eval "$(pyenv init -)"` line into `.bash_profile`, and **not** into `.bashrc`. Otherwise, you
may observe strange behaviour, such as `pyenv` getting into an infinite loop.
See [#264](https://github.com/pyenv/pyenv/issues/264) for details.
- **Other OSes:**
- For **Zsh**:
- **MacOS, if Pyenv is installed with Homebrew:**
~~~ zsh
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
~~~
Same as for Bash above, but add the commands into both `~/.profile`
and `~/.zprofile`.
Make sure that your terminal app runs the shell as a login shell.
- **MacOS, if Pyenv is installed with a Git checkout:**
~~~ zsh
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
~~~
Make sure that your terminal app runs the shell as a login shell.
- **Other OSes:**
~~~ zsh
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
~~~
- For **Fish shell**:
Execute this interactively:
~~~ fish
set -Ux PYENV_ROOT $HOME/.pyenv
set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths
~~~
And add this to `~/.config/fish/config.fish`:
~~~ fish
status is-interactive; and pyenv init --path | source
status is-login; and pyenv init --path | source
status is-interactive; and pyenv init - | source
~~~
If Fish is not your login shell, also follow the Bash/Zsh instructions to add to `~/.profile`.
**Proxy note**: If you use a proxy, export `http_proxy` and `https_proxy`, too.
2. **Add `pyenv` into your shell** by running the output of `pyenv init -`
to enable autocompletion and all subcommands.
This command needs to run at startup of any interactive shell instance.
In an interactive login shell, it needs to run _after_ the commands
from the previous step.
- For **bash**:
~~~ bash
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
~~~
- **If your `/etc/profile` sources `~/.bashrc` (SUSE):**
~~~bash
echo 'if command -v pyenv >/dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bashrc
~~~
- For **Zsh**:
~~~ zsh
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
~~~
- For **Fish shell**:
Add this to `~/.config/fish/config.fish`:
~~~ fish
pyenv init - | source
~~~
**General warning**: There are some systems where the `BASH_ENV` variable is configured
to point to `.bashrc`. On such systems you should almost certainly put the above-mentioned line
`eval "$(pyenv init -)"` into `.bash_profile`, and **not** into `.bashrc`. Otherwise you
may observe strange behaviour, such as `pyenv` getting into an infinite loop.
See [#264](https://github.com/pyenv/pyenv/issues/264) for details.
4. **Restart your login session for the changes to take effect.**
4. **Restart your login session for the changes to profile files to take effect.**
E.g. if you're in a GUI session, you need to fully log out and log back in.
In MacOS, restarting terminal windows is enough (because MacOS runs shells
@@ -424,30 +456,52 @@ profile is doing.
`pyenv init` is the only command that crosses the line of loading
extra commands into your shell. Coming from RVM, some of you might be
opposed to this idea. Here's what `pyenv init` actually does.
Step 1 is done by `eval "$(pyenv init --path)"`, the others are done by
`eval "$(pyenv init -)"`.
opposed to this idea.
Also see the [Environment variables](#environment-variables) section
for the environment variables that control Pyenv's behavior.
1. **Sets up your shims path.** This is the only requirement for pyenv to
function properly. You can do this by hand by prepending
`$(pyenv root)/shims` to your `$PATH`.
* `eval "$(pyenv init --path)"`:
2. **Installs autocompletion.** This is entirely optional but pretty
useful. Sourcing `$(pyenv root)/completions/pyenv.bash` will set that
up. There is also a `$(pyenv root)/completions/pyenv.zsh` for Zsh
users.
1. **Sets up your shims path.** This is the only requirement for pyenv to
function properly. You can do this by hand by prepending
`$(pyenv root)/shims` to your `$PATH`.
`eval "$(pyenv init --path)"` is supposed to be run in your session's login
shell startup script -- so that all processes in the session get access to
Pyenv's functionality and it only runs once,
avoiding breaking `PATH` in nested shells
(e.g. shells started from editors/IDEs).
In Linux, GUI managers typically act as a `sh` login shell, running
`/etc/profile` and `~/.profile` at their startup. MacOS' GUI doesn't do that,
so its terminal emulator apps run their shells as login shells by default
to compensate.
3. **Rehashes shims.** From time to time you'll need to rebuild your
shim files. Doing this on init makes sure everything is up to
date. You can always run `pyenv rehash` manually.
4. **Installs the sh dispatcher.** This bit is also optional, but allows
pyenv and plugins to change variables in your current shell, making
commands like `pyenv shell` possible. The sh dispatcher doesn't do
anything crazy like override `cd` or hack your shell prompt, but if
for some reason you need `pyenv` to be a real script rather than a
shell function, you can safely skip it.
* `eval "$(pyenv init -)"`:
1. **Installs autocompletion.** This is entirely optional but pretty
useful. Sourcing `$(pyenv root)/completions/pyenv.bash` will set that
up. There is also a `$(pyenv root)/completions/pyenv.zsh` for Zsh
users.
2. **Rehashes shims.** From time to time you'll need to rebuild your
shim files. Doing this on init makes sure everything is up to
date. You can always run `pyenv rehash` manually.
3. **Installs `pyenv` into the current shell as a shell function.**
This bit is also optional, but allows
pyenv and plugins to change variables in your current shell, making
commands like `pyenv shell` possible. The sh dispatcher doesn't do
anything crazy like override `cd` or hack your shell prompt, but if
for some reason you need `pyenv` to be a real script rather than a
shell function, you can safely skip it.
`eval "$(pyenv init -)"` is supposed to run at any interactive shell's
startup (including nested shells) so that you get completion and
convenience shell functions.
To see exactly what happens under the hood for yourself, run `pyenv init -`
or `pyenv init --path`.

View File

@@ -80,9 +80,13 @@ bin_path="$(abs_dirname "$0")"
for plugin_bin in "${bin_path%/*}"/plugins/*/bin; do
PATH="${plugin_bin}:${PATH}"
done
for plugin_bin in "${PYENV_ROOT}"/plugins/*/bin; do
PATH="${plugin_bin}:${PATH}"
done
# PYENV_ROOT can be set to anything, so it may happen to be equal to the base path above,
# resulting in duplicate PATH entries
if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then
for plugin_bin in "${PYENV_ROOT}"/plugins/*/bin; do
PATH="${plugin_bin}:${PATH}"
done
fi
export PATH="${bin_path}:${PATH}"
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d"

View File

@@ -12,7 +12,7 @@
set -e
[ -n "$PYENV_DEBUG" ] && set -x
version="2.0.2"
version="2.0.7"
git_revision=""
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then

View File

@@ -61,7 +61,6 @@ function main() {
;;
"print")
init_dirs
warn_path
print_env
print_completion
print_shell_function
@@ -94,68 +93,9 @@ function help_() {
{
echo
echo '# (The below instructions are intended for common'
echo '# shell setups. See the README for more guidance'
echo '# if they don'\''t apply and/or don'\''t work for you.)'
echo '# See the README for instructions on how to set up'
echo '# your shell environment for Pyenv.'
echo
case "$shell" in
fish )
echo "# Add pyenv executable to PATH by running"
echo "# the following interactively:"
echo
echo 'set -Ux PYENV_ROOT $HOME/.pyenv'
echo 'set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths'
echo
echo "# Load pyenv automatically by appending"
echo "# the following to ~/.config/fish/config.fish:"
echo
echo 'status is-interactive; and pyenv init --path | source'
echo 'pyenv init - | source'
echo
echo "# If fish is not your login shell,"
echo "# add the following to ~/.profile:"
echo
echo 'export PYENV_ROOT="$HOME/.pyenv"'
echo 'export PATH="$PYENV_ROOT/bin:$PATH"'
echo 'eval "$(pyenv init --path)"'
echo
;;
* )
echo '# Add pyenv executable to PATH and'
echo '# enable shims by adding the following'
case "$shell" in
bash|ksh )
echo '# to ~/.profile:'
;;
* )
echo '# to ~/.profile and '"${profile}"':'
;;
esac
echo
echo 'export PYENV_ROOT="$HOME/.pyenv"'
echo 'export PATH="$PYENV_ROOT/bin:$PATH"'
echo 'eval "$(pyenv init --path)"'
echo
if [[ $shell == "bash" ]]; then
echo '# If your ~/.profile sources '"${rc}"','
echo '# the lines need to be inserted before the part'
echo '# that does that. See the README for another option.'
echo
echo '# If you have '"${profile}"', make sure that it'
echo '# also executes the above lines -- e.g. by'
echo '# copying them there or by sourcing ~/.profile'
echo
fi
echo "# Load pyenv into the shell by adding"
echo "# the following to ${rc}:"
echo
echo 'eval "$(pyenv init -)"'
echo
echo '# Make sure to restart your entire logon session'
echo '# for changes to profile files to take effect.'
echo
;;
esac
} >&2
}
@@ -175,13 +115,6 @@ function print_path() {
esac
}
function warn_path() {
if ! [[ ":${PATH}:" == *":${PYENV_ROOT}/shims:"* ]] ; then
echo 'echo '\''WARNING: `pyenv init -` no longer sets PATH.'\'
echo 'echo '\''Run `pyenv init` to see the necessary changes to make to your configuration.'\'
fi
}
function print_env() {
case "$shell" in
fish )

View File

@@ -33,7 +33,9 @@ OLDIFS="$IFS"
if PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python 2>/dev/null)" || \
PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python3 2>/dev/null)" || \
PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python2 2>/dev/null)"; then
PYENV_PREFIX_PATH="${PYTHON_PATH%/bin/*}"
shopt -s extglob
# In some distros (Arch), Python can be found in sbin as well as bin
PYENV_PREFIX_PATH="${PYTHON_PATH%/?(s)bin/*}"
PYENV_PREFIX_PATH="${PYENV_PREFIX_PATH:-/}"
else
echo "pyenv: system version not found in PATH" >&2

View File

@@ -69,7 +69,7 @@ if [ -z "$FORCE" ]; then
exit 1
fi
read -p "pyenv: remove $PREFIX? [y|N]"
read -p "pyenv: remove $PREFIX? [y|N] "
case "$REPLY" in
y | Y | yes | YES ) ;;
* ) exit 1 ;;

View File

@@ -112,6 +112,13 @@ is_mac() {
[ $# -eq 0 ] || [ "$(osx_version)" "$@" ]
}
is_arm64_apple() {
if [ "$(uname -s)" = "Darwin" ] && [ "$(uname -m)" = "arm64" ]; then
return 0
fi
return 1
}
# 9.1 -> 901
# 10.9 -> 1009
# 10.10 -> 1010
@@ -766,6 +773,7 @@ build_package_standard_build() {
local PACKAGE_CFLAGS="${package_var_name}_CFLAGS"
if [ "$package_var_name" = "PYTHON" ]; then
use_tcltk || true
use_homebrew_readline || use_freebsd_pkg || true
if is_mac -ge 1014; then
use_xcode_sdk_zlib || use_homebrew_zlib || true
@@ -1516,6 +1524,98 @@ use_xcode_sdk_zlib() {
fi
}
use_homebrew_tcltk() {
# get the version from the folder that homebrew versions
local tcltk_version_long="$(ls "$(brew --cellar tcl-tk)")"
local tcltk_version="${tcltk_version_long%.*}"
local tcltk_flags="--with-tcltk-includes=-I$tcltk_libdir/include --with-tcltk-libs=-L$tcltk_libdir/lib -ltcl$tcltk_version -ltk$tcltk_version"
echo "python-build: use tcl-tk from homebrew"
package_option python configure --with-tcltk-libs="-L$tcltk_libdir/lib -ltcl$tcltk_version -ltk$tcltk_version"
package_option python configure --with-tcltk-includes="-I$tcltk_libdir/include"
}
# FIXME: this function is a workaround for #1125
# once fixed, it should be removed.
use_custom_tcltk() {
local tcltk_ops="$1"
local tcltk_ops_flag="--with-tcltk-libs="
# get tcltk libs
local tcltk_libs="${tcltk_ops//$tcltk_ops_flag/}"
# remove tcltk-flag from configure_opts
# this allows for weird input such as
# --with-tcltk-libs=' -L/custom-tcl-tk/lib -ltcl8.6 -ltk8.4 '
PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS//"$tcltk_ops_flag"/}"
PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS//$tcltk_libs/}"
# remove quotes, because there mess up compilations
PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS//"''"/}"
PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS//'""'/}"
echo "python-build: use tcl-tk from \$PYTHON_CONFIGURE_OPTS"
# echo "PYTHON_CONFIGURE_OPTS=${PYTHON_CONFIGURE_OPTS}"
package_option python configure --with-tcltk-libs="${tcltk_libs}"
# IFS="$OLDIFS"
}
# FIXME: this function is a workaround for #1125
# once fixed, it should be removed.
# Get tcltk-flag and options from `$1`
# expects one argument containing a string of configure opts, eg. `PYTHON_CONFIGURE_OPTS`
# returns tcl_tk flag or an empty string if nothing was found.
get_tcltk_flag_from() {
IFS=$'\n'
# parse input string into array
local opts_arr=( $(xargs -n1 <<<"$1") )
# iterate through `opts_arr`, break if `--with-tcltk-libs=` was found.
for opts in ${opts_arr[@]}; do
# `--with-tcltk-libs=` must be the prefix.
if [[ "$opts" == "--with-tcltk-libs="* ]]; then
# return
echo "$opts"
break
fi
done
IFS="$OLDIFS"
}
use_tcltk() {
local tcltk_libdir="$(brew --prefix tcl-tk 2>/dev/null || true)"
local tcl_tk_libs="$(get_tcltk_flag_from "$PYTHON_CONFIGURE_OPTS")"
# if tcltk_ops_flag is in PYTHON_CONFIGURE_OPTS, use user provided tcltk
# otherwise default to homebrew-installed tcl-tk, if installed
if [[ -n "$tcl_tk_libs" ]]; then
use_custom_tcltk "$tcl_tk_libs"
elif [ -d "$tcltk_libdir" ]; then
use_homebrew_tcltk
fi
}
# CPython 3.9.1+ and 3.8.10+ have old config.sub that doesn't support "arm64" arch
# which is what Gnu uname (but not Apple uname) produces on Apple M1
# (https://github.com/pyenv/pyenv/pull/2020#issuecomment-891911842)
build_package_arm64_apple_disable_homebrew_coreutils() {
if is_arm64_apple; then
local brew_coreutils="$(brew --prefix coreutils 2>/dev/null || true)"
if [ -d "$brew_coreutils" ]; then
local after_list=()
# Bash 3 ignores IFS set for command when doing expansions so have to set it separately
IFS=':'; local -a list=(${PATH}); IFS="$OLDIFS"
for str in "${list[@]}"; do
if [[ "$str" != "$brew_coreutils"/* ]]; then
after_list+=("$str")
else
echo "python-build: excluding \`$str' from PATH"
fi
done
# Bash 3 ignores IFS set for command when doing expansions so have to set it separately
IFS=':'; export PATH="${after_list[*]}"; IFS="$OLDIFS"
fi
fi
}
build_package_enable_shared() {
package_option python configure --enable-shared
}
@@ -2053,19 +2153,6 @@ if [[ "$PYTHON_CONFIGURE_OPTS" != *"--enable-unicode="* ]]; then
fi
fi
# regex_to_match="(--with-tcltk-libs='([^']+)')"
if [[ "$PYTHON_CONFIGURE_OPTS" =~ (--with-tcltk-libs=\'([^\']+)\') ]]; then
tcltk_match="${BASH_REMATCH[1]}"
tcltk_match_quoted="${tcltk_match//--with-tcltk-libs=/}"
# remove it from PYTHON_CONFIGURE_OPTS since it will mess up compile
PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS//$tcltk_match/}"
# having issues passing the single quoted part, couldnt pass as single var and still work
package_option python configure "--with-tcltk-libs='${tcltk_match_quoted}'"
unset tcltk_match
unset tcltk_match_quoted
fi
# Unset `PIP_REQUIRE_VENV` during build (#216)
unset PIP_REQUIRE_VENV
unset PIP_REQUIRE_VIRTUALENV

View File

@@ -0,0 +1,4 @@
#require_gcc
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_package "Python-2.6" "https://www.python.org/ftp/python/2.6/Python-2.6.tgz#7c2f21a968a737a59ed0729f4b1dc154dc3aa183c20be96055186fe43c6742d0" standard verify_py26 ensurepip

View File

@@ -0,0 +1,4 @@
#require_gcc
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_package "Python-2.6.1" "https://www.python.org/ftp/python/2.6.1/Python-2.6.1.tgz#fb65e93678e1327e3e8559cc56e1e00ed8c07162b21287a3502677892c5c515c" standard verify_py26 ensurepip

View File

@@ -0,0 +1,4 @@
#require_gcc
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_package "Python-2.6.2" "https://www.python.org/ftp/python/2.6.2/Python-2.6.2.tgz#e37ecdf249f248f4fea227adbca09c778670b64fcb5e45947ec3e093cbc12c86" standard verify_py26 ensurepip

View File

@@ -0,0 +1,4 @@
#require_gcc
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_package "Python-2.6.3" "https://www.python.org/ftp/python/2.6.3/Python-2.6.3.tgz#a71b55540690425fd82ab00819aeb92c1b23cbb4730a0ccd2e25c833b22a812e" standard verify_py26 ensurepip

View File

@@ -0,0 +1,4 @@
#require_gcc
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_package "Python-2.6.4" "https://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz#1a25a47506e4165704cfe2b07c0a064b0b5762a2d18b8fbdad5af688aeacd252" standard verify_py26 ensurepip

View File

@@ -0,0 +1,4 @@
#require_gcc
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_package "Python-2.6.5" "https://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz#b331dafdce3361834fee783795d4f68ae7cf7d379e9137c2d8e8531cea615ede" standard verify_py26 ensurepip

View File

@@ -4,7 +4,7 @@ export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.10.0b3" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0b3.tar.xz#2267aed4d01015176bcfe645ac6ca36e05f0c30a76f1f9973863692f6e25cc15" standard verify_py310 copy_python_gdb ensurepip
install_package "Python-3.10.0rc2" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0rc2.tar.xz#e75b56088548b7b9ad1f2571e6f5a2315e4808cb6b5fbe8288502afc802b2f24" standard verify_py310 copy_python_gdb ensurepip
else
install_package "Python-3.10.0b3" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0b3.tgz#880f407e619aa92c831900a98c0793889c4b40008a0b5623fd829ef76c8d96be" standard verify_py310 copy_python_gdb ensurepip
install_package "Python-3.10.0rc2" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0rc2.tgz#0f8bf53dbe6f85785d502e73984aa3f12f67ac4958d9b8d8012019c35c646fe2" standard verify_py310 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,9 @@
#require_gcc
prefer_openssl11
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.6.14" "https://www.python.org/ftp/python/3.6.14/Python-3.6.14.tar.xz#2663a7a0cfbd00fc76269dce4317db0b54be53c0f4d705aabb32b87efa02d5ae" standard verify_py36 copy_python_gdb ensurepip
else
install_package "Python-3.6.14" "https://www.python.org/ftp/python/3.6.14/Python-3.6.14.tgz#70064897bc434d6eae8bcc3e5678f282b5ea776d60e695da548a1219ccfd27a5" standard verify_py36 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.6.15" "https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tar.xz#6e28d7cdd6dd513dd190e49bca3972e20fcf455090ccf2ef3f1a227614135d91" standard verify_py36 copy_python_gdb ensurepip
else
install_package "Python-3.6.15" "https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz#54570b7e339e2cfd72b29c7e2fdb47c0b7b18b7412e61de5b463fc087c13b043" standard verify_py36 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.7.11" "https://www.python.org/ftp/python/3.7.11/Python-3.7.11.tar.xz#ddb4196ab5c4f69e895920a422cb60d42b46e2de2b173ce7fd57f1435459a734" standard verify_py37 copy_python_gdb ensurepip
else
install_package "Python-3.7.11" "https://www.python.org/ftp/python/3.7.11/Python-3.7.11.tgz#b4fba32182e16485d0a6022ba83c9251e6a1c14676ec243a9a07d3722cd4661a" standard verify_py37 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.7.12" "https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tar.xz#f77bf7fb47839f213e5cbf7827281078ea90de7e72b44f10d7ef385ea8c43210" standard verify_py37 copy_python_gdb ensurepip
else
install_package "Python-3.7.12" "https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz#33b4daaf831be19219659466d12645f87ecec6eb21d4d9f9711018a7b66cce46" standard verify_py37 copy_python_gdb ensurepip
fi

View File

@@ -3,4 +3,4 @@ prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_git "Python-3.8-dev" "https://github.com/python/cpython" "3.8" standard verify_py38 copy_python_gdb ensurepip
install_git "Python-3.8-dev" "https://github.com/python/cpython" "3.8" arm64_apple_disable_homebrew_coreutils standard verify_py38 copy_python_gdb ensurepip

View File

@@ -4,7 +4,7 @@ export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.8.10" "https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tar.xz#6af24a66093dd840bcccf371d4044a3027e655cf24591ce26e48022bc79219d9" standard verify_py38 copy_python_gdb ensurepip
install_package "Python-3.8.10" "https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tar.xz#6af24a66093dd840bcccf371d4044a3027e655cf24591ce26e48022bc79219d9" arm64_apple_disable_homebrew_coreutils standard verify_py38 copy_python_gdb ensurepip
else
install_package "Python-3.8.10" "https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz#b37ac74d2cbad2590e7cd0dd2b3826c29afe89a734090a87bf8c03c45066cb65" standard verify_py38 copy_python_gdb ensurepip
install_package "Python-3.8.10" "https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz#b37ac74d2cbad2590e7cd0dd2b3826c29afe89a734090a87bf8c03c45066cb65" arm64_apple_disable_homebrew_coreutils standard verify_py38 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.8.11" "https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tar.xz#fb1a1114ebfe9e97199603c6083e20b236a0e007a2c51f29283ffb50c1420fb2" arm64_apple_disable_homebrew_coreutils standard verify_py38 copy_python_gdb ensurepip
else
install_package "Python-3.8.11" "https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tgz#b77464ea80cec14581b86aeb7fb2ff02830e0abc7bcdc752b7b4bdfcd8f3e393" arm64_apple_disable_homebrew_coreutils standard verify_py38 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.8.12" "https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz#b1d3a76420375343b5e8a22fceb1ac65b77193e9ed27146524f0a9db058728ea" standard verify_py38 copy_python_gdb ensurepip
else
install_package "Python-3.8.12" "https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz#316aa33f3b7707d041e73f246efedb297a70898c4b91f127f66dc8d80c596f1a" standard verify_py38 copy_python_gdb ensurepip
fi

View File

@@ -3,4 +3,4 @@ prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_git "Python-3.9-dev" "https://github.com/python/cpython" 3.9 standard verify_py39 copy_python_gdb ensurepip
install_git "Python-3.9-dev" "https://github.com/python/cpython" 3.9 arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip

View File

@@ -4,8 +4,8 @@ export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.1" "https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz#991c3f8ac97992f3d308fefeb03a64db462574eadbff34ce8bc5bb583d9903ff" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.1" "https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz#991c3f8ac97992f3d308fefeb03a64db462574eadbff34ce8bc5bb583d9903ff" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.1" "https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz#29cb91ba038346da0bd9ab84a0a55a845d872c341a4da6879f462e94c741f117" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.1" "https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz#29cb91ba038346da0bd9ab84a0a55a845d872c341a4da6879f462e94c741f117" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -4,8 +4,8 @@ export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1i" "https://www.openssl.org/source/old/1.1.1/openssl-1.1.1i.tar.gz#e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.2" "https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tar.xz#3c2034c54f811448f516668dce09d24008a0716c3a794dd8639b5388cbde247d" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.2" "https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tar.xz#3c2034c54f811448f516668dce09d24008a0716c3a794dd8639b5388cbde247d" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.2" "https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz#7899e8a6f7946748830d66739f2d8f2b30214dad956e56b9ba216b3de5581519" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.2" "https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz#7899e8a6f7946748830d66739f2d8f2b30214dad956e56b9ba216b3de5581519" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -1,10 +0,0 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.3" "https://www.python.org/ftp/python/3.9.3/Python-3.9.3.tar.xz#30811039c65e04c14fc698e423947e464f9316e69fb44610bd38446046bb82b5" standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.3" "https://www.python.org/ftp/python/3.9.3/Python-3.9.3.tgz#3afeb61a45b5a2e6f1c0f621bd8cf925a4ff406099fdb3d8c97b993a5f43d048" standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -4,7 +4,7 @@ export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.4" "https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tar.xz#4b0e6644a76f8df864ae24ac500a51bbf68bd098f6a173e27d3b61cdca9aa134" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.4" "https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tar.xz#4b0e6644a76f8df864ae24ac500a51bbf68bd098f6a173e27d3b61cdca9aa134" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.4" "https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz#66c4de16daa74a825cf9da9ddae1fe020b72c3854b73b1762011cc33f9e4592f" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.4" "https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz#66c4de16daa74a825cf9da9ddae1fe020b72c3854b73b1762011cc33f9e4592f" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -4,7 +4,7 @@ export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.5" "https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz#0c5a140665436ec3dbfbb79e2dfb6d192655f26ef4a29aeffcb6d1820d716d83" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.5" "https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz#0c5a140665436ec3dbfbb79e2dfb6d192655f26ef4a29aeffcb6d1820d716d83" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.5" "https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz#e0fbd5b6e1ee242524430dee3c91baf4cbbaba4a72dd1674b90fda87b713c7ab" standard verify_py39 copy_python_gdb ensurepip
install_package "Python-3.9.5" "https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz#e0fbd5b6e1ee242524430dee3c91baf4cbbaba4a72dd1674b90fda87b713c7ab" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.6" "https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz#397920af33efc5b97f2e0b57e91923512ef89fc5b3c1d21dbfc8c4828ce0108a" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.6" "https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz#d0a35182e19e416fc8eae25a3dcd4d02d4997333e4ad1f2eee6010aadc3fe866" arm64_apple_disable_homebrew_coreutils standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
#require_gcc
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.7" "https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz#f8145616e68c00041d1a6399b76387390388f8359581abc24432bb969b5e3c57" standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.7" "https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz#a838d3f9360d157040142b715db34f0218e535333696a5569dc6f854604eb9d1" standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,48 @@
# Copyright (c) 2021, 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='21.2.0'
BUILD=''
case "$(pypy_architecture 2>/dev/null || true)" in
"linux64" )
graalpython_arch="linux"
checksum="17399e168743ae8b7b3faa9870ce24213fb514a04a8966bd4bd10844baf039da"
;;
"osx64" )
graalpython_arch="macos"
checksum="b365278cba49d6e2e0c018d1f5a1e81fa0304be5fe6c086532630443c605b8c0"
;;
* )
{ echo
colorize 1 "ERROR"
echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac
if [ -n "${BUILD}" ]; then
urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}"
else
urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}"
fi
install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip

View File

@@ -0,0 +1,25 @@
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-ppc64le" )
install_script "Mambaforge-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-ppc64le.sh" "miniconda" verify_py3_latest
;;
"Linux-x86_64" )
install_script "Mambaforge-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh" "miniconda" verify_py3_latest
;;
"Linux-aarch64" )
install_script "Mambaforge-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-aarch64.sh" "miniconda" verify_py3_latest
;;
"MacOSX-arm64" )
install_script "Mambaforge-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-arm64.sh" "miniconda" verify_py3_latest
;;
"MacOSX-x86_64" )
install_script "Mambaforge-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-x86_64.sh" "miniconda" verify_py3_latest
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Mambaforge3 is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@@ -0,0 +1,22 @@
ase "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-ppc64le" )
install_script "Mambaforge-pypy3-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-Linux-ppc64le.sh" "miniconda" verify_py3_latest
;;
"Linux-x86_64" )
install_script "Mambaforge-pypy3-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-Linux-x86_64.sh" "miniconda" verify_py3_latest
;;
"Linux-aarch64" )
install_script "Mambaforge-pypy3-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-Linux-aarch64.sh" "miniconda" verify_py3_latest
;;
"MacOSX-x86_64" )
install_script "Mambaforge-pypy3-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-MacOSX-x86_64.sh" "miniconda" verify_py3_latest
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Mambaforge with PyPy3 is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@@ -0,0 +1,23 @@
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-ppc64le" )
install_script "Miniforge-pypy3-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-Linux-ppc64le.sh" "miniconda" verify_py3_latest
;;
"Linux-x86_64" )
install_script "Miniforge-pypy3-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-Linux-x86_64.sh" "miniconda" verify_py3_latest
;;
"Linux-aarch64" )
install_script "Miniforge-pypy3-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-Linux-aarch64.sh" "miniconda" verify_py3_latest
;;
"MacOSX-x86_64" )
install_script "Miniforge-pypy3-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-MacOSX-x86_64.sh" "miniconda" verify_py3_latest
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Miniforge with PyPy3 is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@@ -0,0 +1,25 @@
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-ppc64le" )
install_script "Miniforge3-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-ppc64le.sh" "miniconda" verify_py3_latest
;;
"Linux-x86_64" )
install_script "Miniforge3-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh" "miniconda" verify_py3_latest
;;
"Linux-aarch64" )
install_script "Miniforge3-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh" "miniconda" verify_py3_latest
;;
"MacOSX-arm64" )
install_script "Miniforge3-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh" "miniconda" verify_py3_latest
;;
"MacOSX-x86_64" )
install_script "Miniforge3-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-x86_64.sh" "miniconda" verify_py3_latest
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Miniforge3 is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@@ -0,0 +1,71 @@
# HG changeset patch
# User Barry Warsaw <barry@python.org>
# Date 1302190091 14400
# Node ID bd0f73a9538e05f526feaf05821e68bdcff498fa
# Parent 2e4cdaffe493e879fb5367a4aa454491de451137
Backport for Python 2.7 of issue 11715 support for building Python on
multiarch Debian/Ubuntu.
diff -r -u setup.py setup.py
--- setup.py.orig
+++ setup.py
@@ -15,6 +15,7 @@
from distutils.command.build_ext import build_ext
from distutils.command.install import install
from distutils.command.install_lib import install_lib
+from distutils.spawn import find_executable
# This global variable is used to hold the list of modules to be disabled.
disabled_module_list = []
@@ -308,10 +309,33 @@ class PyBuildExt(build_ext):
return platform
return sys.platform
+ def add_multiarch_paths(self):
+ # Debian/Ubuntu multiarch support.
+ # https://wiki.ubuntu.com/MultiarchSpec
+ if not find_executable('dpkg-architecture'):
+ return
+ tmpfile = os.path.join(self.build_temp, 'multiarch')
+ if not os.path.exists(self.build_temp):
+ os.makedirs(self.build_temp)
+ ret = os.system(
+ 'dpkg-architecture -qDEB_HOST_MULTIARCH > %s 2> /dev/null' %
+ tmpfile)
+ try:
+ if ret >> 8 == 0:
+ with open(tmpfile) as fp:
+ multiarch_path_component = fp.readline().strip()
+ add_dir_to_list(self.compiler.library_dirs,
+ '/usr/lib/' + multiarch_path_component)
+ add_dir_to_list(self.compiler.include_dirs,
+ '/usr/include/' + multiarch_path_component)
+ finally:
+ os.unlink(tmpfile)
+
def detect_modules(self):
# Ensure that /usr/local is always used
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1308,14 +1332,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,61 @@
diff -r -u ../Python-2.6.orig/Modules/readline.c ./Modules/readline.c
--- ../Python-2.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900
+++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900
@@ -174,8 +174,7 @@
if (!PyArg_ParseTuple(args, buf, &function))
return NULL;
if (function == Py_None) {
- Py_XDECREF(*hook_var);
- *hook_var = NULL;
+ Py_CLEAR(*hook_var);
}
else if (PyCallable_Check(function)) {
PyObject *tmp = *hook_var;
@@ -647,14 +646,22 @@
}
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)
+#else
+on_startup_hook()
+#endif
{
return on_hook(startup_hook);
}
#ifdef HAVE_RL_PRE_INPUT_HOOK
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)
+#else
+on_pre_input_hook()
+#endif
{
return on_hook(pre_input_hook);
}
@@ -749,7 +756,7 @@
* before calling the normal completer */
static char **
-flex_complete(char *text, int start, int end)
+flex_complete(const char *text, int start, int end)
{
Py_XDECREF(begidx);
Py_XDECREF(endidx);
@@ -783,12 +790,12 @@
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
/* Set our hook functions */
- rl_startup_hook = (Function *)on_startup_hook;
+ rl_startup_hook = on_startup_hook;
#ifdef HAVE_RL_PRE_INPUT_HOOK
- rl_pre_input_hook = (Function *)on_pre_input_hook;
+ rl_pre_input_hook = on_pre_input_hook;
#endif
/* Set our completion function */
- rl_attempted_completion_function = (CPPFunction *)flex_complete;
+ rl_attempted_completion_function = flex_complete;
/* Set Python word break characters */
rl_completer_word_break_characters =
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");

View File

@@ -0,0 +1,12 @@
diff -r -u ../Python-2.6.orig/setup.py ./setup.py
--- ../Python-2.6.orig/setup.py 2013-10-30 00:04:39.000000000 +0900
+++ ./setup.py 2014-04-03 22:28:49.122061684 +0900
@@ -1541,7 +1541,7 @@
# The versions with dots are used on Unix, and the versions without
# dots on Windows, for detection by cygwin.
tcllib = tklib = tcl_includes = tk_includes = None
- for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
+ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
'82', '8.1', '81', '8.0', '80']:
tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version)
tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version)

View File

@@ -0,0 +1,95 @@
diff -r -u ../Python-2.6.4.orig/Lib/ssl.py ./Lib/ssl.py
--- ../Python-2.6.4.orig/Lib/ssl.py 2012-04-10 15:32:06.000000000 +0000
+++ ./Lib/ssl.py 2015-12-18 14:46:36.487188331 +0000
@@ -61,18 +61,24 @@
from _ssl import SSLError
from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
-from _ssl import PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1
-from _ssl import RAND_status, RAND_egd, RAND_add
-from _ssl import \
- SSL_ERROR_ZERO_RETURN, \
- SSL_ERROR_WANT_READ, \
- SSL_ERROR_WANT_WRITE, \
- SSL_ERROR_WANT_X509_LOOKUP, \
- SSL_ERROR_SYSCALL, \
- SSL_ERROR_SSL, \
- SSL_ERROR_WANT_CONNECT, \
- SSL_ERROR_EOF, \
- SSL_ERROR_INVALID_ERROR_CODE
+from _ssl import RAND_status, RAND_add
+try:
+ from _ssl import RAND_egd
+except ImportError:
+ # LibreSSL does not provide RAND_egd
+ pass
+
+def _import_symbols(prefix):
+ for n in dir(_ssl):
+ if n.startswith(prefix):
+ globals()[n] = getattr(_ssl, n)
+
+_import_symbols('OP_')
+_import_symbols('ALERT_DESCRIPTION_')
+_import_symbols('SSL_ERROR_')
+_import_symbols('PROTOCOL_')
+
+_PROTOCOL_NAMES = dict([(value, name) for name, value in globals().items() if name.startswith('PROTOCOL_')])
from socket import socket, _fileobject
from socket import getnameinfo as _getnameinfo
@@ -394,7 +400,7 @@
d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
return base64.decodestring(d)
-def get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
+def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None):
"""Retrieve the certificate from the server at the specified address,
and return it as a PEM-encoded string.
diff -r -u ../Python-2.6.4.orig/Modules/_ssl.c ./Modules/_ssl.c
--- ../Python-2.6.4.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000
+++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000
@@ -61,8 +61,12 @@
};
enum py_ssl_version {
+#ifndef OPENSSL_NO_SSL2
PY_SSL_VERSION_SSL2,
+#endif
+#ifndef OPENSSL_NO_SSL3
PY_SSL_VERSION_SSL3,
+#endif
PY_SSL_VERSION_SSL23,
PY_SSL_VERSION_TLS1,
};
@@ -298,10 +302,14 @@
PySSL_BEGIN_ALLOW_THREADS
if (proto_version == PY_SSL_VERSION_TLS1)
self->ctx = SSL_CTX_new(TLSv1_method()); /* Set up context */
+#ifndef OPENSSL_NO_SSL3
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
+#endif
+#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
+#endif
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
PySSL_END_ALLOW_THREADS
@@ -1627,10 +1635,14 @@
PY_SSL_CERT_REQUIRED);
/* protocol versions */
+#ifndef OPENSSL_NO_SSL2
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
PY_SSL_VERSION_SSL2);
+#endif
+#ifndef OPENSSL_NO_SSL3
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
PY_SSL_VERSION_SSL3);
+#endif
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
PY_SSL_VERSION_SSL23);
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",

View File

@@ -0,0 +1,71 @@
# HG changeset patch
# User Barry Warsaw <barry@python.org>
# Date 1302190091 14400
# Node ID bd0f73a9538e05f526feaf05821e68bdcff498fa
# Parent 2e4cdaffe493e879fb5367a4aa454491de451137
Backport for Python 2.7 of issue 11715 support for building Python on
multiarch Debian/Ubuntu.
diff -r -u setup.py setup.py
--- setup.py.orig
+++ setup.py
@@ -15,6 +15,7 @@
from distutils.command.build_ext import build_ext
from distutils.command.install import install
from distutils.command.install_lib import install_lib
+from distutils.spawn import find_executable
# This global variable is used to hold the list of modules to be disabled.
disabled_module_list = []
@@ -308,10 +309,33 @@ class PyBuildExt(build_ext):
return platform
return sys.platform
+ def add_multiarch_paths(self):
+ # Debian/Ubuntu multiarch support.
+ # https://wiki.ubuntu.com/MultiarchSpec
+ if not find_executable('dpkg-architecture'):
+ return
+ tmpfile = os.path.join(self.build_temp, 'multiarch')
+ if not os.path.exists(self.build_temp):
+ os.makedirs(self.build_temp)
+ ret = os.system(
+ 'dpkg-architecture -qDEB_HOST_MULTIARCH > %s 2> /dev/null' %
+ tmpfile)
+ try:
+ if ret >> 8 == 0:
+ with open(tmpfile) as fp:
+ multiarch_path_component = fp.readline().strip()
+ add_dir_to_list(self.compiler.library_dirs,
+ '/usr/lib/' + multiarch_path_component)
+ add_dir_to_list(self.compiler.include_dirs,
+ '/usr/include/' + multiarch_path_component)
+ finally:
+ os.unlink(tmpfile)
+
def detect_modules(self):
# Ensure that /usr/local is always used
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1310,14 +1334,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,61 @@
diff -r -u ../Python-2.6.4.orig/Modules/readline.c ./Modules/readline.c
--- ../Python-2.6.4.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900
+++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900
@@ -178,8 +178,7 @@
if (!PyArg_ParseTuple(args, buf, &function))
return NULL;
if (function == Py_None) {
- Py_XDECREF(*hook_var);
- *hook_var = NULL;
+ Py_CLEAR(*hook_var);
}
else if (PyCallable_Check(function)) {
PyObject *tmp = *hook_var;
@@ -655,14 +655,22 @@
}
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)
+#else
+on_startup_hook()
+#endif
{
return on_hook(startup_hook);
}
#ifdef HAVE_RL_PRE_INPUT_HOOK
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)
+#else
+on_pre_input_hook()
+#endif
{
return on_hook(pre_input_hook);
}
@@ -757,7 +757,7 @@
* before calling the normal completer */
static char **
-flex_complete(char *text, int start, int end)
+flex_complete(const char *text, int start, int end)
{
Py_XDECREF(begidx);
Py_XDECREF(endidx);
@@ -791,12 +791,12 @@
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
/* Set our hook functions */
- rl_startup_hook = (Function *)on_startup_hook;
+ rl_startup_hook = on_startup_hook;
#ifdef HAVE_RL_PRE_INPUT_HOOK
- rl_pre_input_hook = (Function *)on_pre_input_hook;
+ rl_pre_input_hook = on_pre_input_hook;
#endif
/* Set our completion function */
- rl_attempted_completion_function = (CPPFunction *)flex_complete;
+ rl_attempted_completion_function = flex_complete;
/* Set Python word break characters */
rl_completer_word_break_characters =
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");

View File

@@ -0,0 +1,12 @@
diff -r -u ../Python-2.6.1.orig/setup.py ./setup.py
--- ../Python-2.6.1.orig/setup.py 2013-10-30 00:04:39.000000000 +0900
+++ ./setup.py 2014-04-03 22:28:49.122061684 +0900
@@ -1543,7 +1543,7 @@
# The versions with dots are used on Unix, and the versions without
# dots on Windows, for detection by cygwin.
tcllib = tklib = tcl_includes = tk_includes = None
- for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
+ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
'82', '8.1', '81', '8.0', '80']:
tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version)
tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version)

View File

@@ -0,0 +1,95 @@
diff -r -u ../Python-2.6.4.orig/Lib/ssl.py ./Lib/ssl.py
--- ../Python-2.6.4.orig/Lib/ssl.py 2012-04-10 15:32:06.000000000 +0000
+++ ./Lib/ssl.py 2015-12-18 14:46:36.487188331 +0000
@@ -61,18 +61,24 @@
from _ssl import SSLError
from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
-from _ssl import PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1
-from _ssl import RAND_status, RAND_egd, RAND_add
-from _ssl import \
- SSL_ERROR_ZERO_RETURN, \
- SSL_ERROR_WANT_READ, \
- SSL_ERROR_WANT_WRITE, \
- SSL_ERROR_WANT_X509_LOOKUP, \
- SSL_ERROR_SYSCALL, \
- SSL_ERROR_SSL, \
- SSL_ERROR_WANT_CONNECT, \
- SSL_ERROR_EOF, \
- SSL_ERROR_INVALID_ERROR_CODE
+from _ssl import RAND_status, RAND_add
+try:
+ from _ssl import RAND_egd
+except ImportError:
+ # LibreSSL does not provide RAND_egd
+ pass
+
+def _import_symbols(prefix):
+ for n in dir(_ssl):
+ if n.startswith(prefix):
+ globals()[n] = getattr(_ssl, n)
+
+_import_symbols('OP_')
+_import_symbols('ALERT_DESCRIPTION_')
+_import_symbols('SSL_ERROR_')
+_import_symbols('PROTOCOL_')
+
+_PROTOCOL_NAMES = dict([(value, name) for name, value in globals().items() if name.startswith('PROTOCOL_')])
from socket import socket, _fileobject
from socket import getnameinfo as _getnameinfo
@@ -394,7 +400,7 @@
d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
return base64.decodestring(d)
-def get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
+def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None):
"""Retrieve the certificate from the server at the specified address,
and return it as a PEM-encoded string.
diff -r -u ../Python-2.6.4.orig/Modules/_ssl.c ./Modules/_ssl.c
--- ../Python-2.6.4.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000
+++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000
@@ -61,8 +61,12 @@
};
enum py_ssl_version {
+#ifndef OPENSSL_NO_SSL2
PY_SSL_VERSION_SSL2,
+#endif
+#ifndef OPENSSL_NO_SSL3
PY_SSL_VERSION_SSL3,
+#endif
PY_SSL_VERSION_SSL23,
PY_SSL_VERSION_TLS1,
};
@@ -298,10 +302,14 @@
PySSL_BEGIN_ALLOW_THREADS
if (proto_version == PY_SSL_VERSION_TLS1)
self->ctx = SSL_CTX_new(TLSv1_method()); /* Set up context */
+#ifndef OPENSSL_NO_SSL3
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
+#endif
+#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
+#endif
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
PySSL_END_ALLOW_THREADS
@@ -1627,10 +1635,14 @@
PY_SSL_CERT_REQUIRED);
/* protocol versions */
+#ifndef OPENSSL_NO_SSL2
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
PY_SSL_VERSION_SSL2);
+#endif
+#ifndef OPENSSL_NO_SSL3
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
PY_SSL_VERSION_SSL3);
+#endif
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
PY_SSL_VERSION_SSL23);
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",

View File

@@ -0,0 +1,71 @@
# HG changeset patch
# User Barry Warsaw <barry@python.org>
# Date 1302190091 14400
# Node ID bd0f73a9538e05f526feaf05821e68bdcff498fa
# Parent 2e4cdaffe493e879fb5367a4aa454491de451137
Backport for Python 2.7 of issue 11715 support for building Python on
multiarch Debian/Ubuntu.
diff -r -u setup.py setup.py
--- setup.py.orig
+++ setup.py
@@ -15,6 +15,7 @@
from distutils.command.build_ext import build_ext
from distutils.command.install import install
from distutils.command.install_lib import install_lib
+from distutils.spawn import find_executable
# This global variable is used to hold the list of modules to be disabled.
disabled_module_list = []
@@ -308,10 +309,33 @@ class PyBuildExt(build_ext):
return platform
return sys.platform
+ def add_multiarch_paths(self):
+ # Debian/Ubuntu multiarch support.
+ # https://wiki.ubuntu.com/MultiarchSpec
+ if not find_executable('dpkg-architecture'):
+ return
+ tmpfile = os.path.join(self.build_temp, 'multiarch')
+ if not os.path.exists(self.build_temp):
+ os.makedirs(self.build_temp)
+ ret = os.system(
+ 'dpkg-architecture -qDEB_HOST_MULTIARCH > %s 2> /dev/null' %
+ tmpfile)
+ try:
+ if ret >> 8 == 0:
+ with open(tmpfile) as fp:
+ multiarch_path_component = fp.readline().strip()
+ add_dir_to_list(self.compiler.library_dirs,
+ '/usr/lib/' + multiarch_path_component)
+ add_dir_to_list(self.compiler.include_dirs,
+ '/usr/include/' + multiarch_path_component)
+ finally:
+ os.unlink(tmpfile)
+
def detect_modules(self):
# Ensure that /usr/local is always used
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1331,14 +1355,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,61 @@
diff -r -u ../Python-2.6.4.orig/Modules/readline.c ./Modules/readline.c
--- ../Python-2.6.4.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900
+++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900
@@ -178,8 +178,7 @@
if (!PyArg_ParseTuple(args, buf, &function))
return NULL;
if (function == Py_None) {
- Py_XDECREF(*hook_var);
- *hook_var = NULL;
+ Py_CLEAR(*hook_var);
}
else if (PyCallable_Check(function)) {
PyObject *tmp = *hook_var;
@@ -655,14 +654,22 @@
}
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)
+#else
+on_startup_hook()
+#endif
{
return on_hook(startup_hook);
}
#ifdef HAVE_RL_PRE_INPUT_HOOK
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)
+#else
+on_pre_input_hook()
+#endif
{
return on_hook(pre_input_hook);
}
@@ -757,7 +764,7 @@
* before calling the normal completer */
static char **
-flex_complete(char *text, int start, int end)
+flex_complete(const char *text, int start, int end)
{
Py_XDECREF(begidx);
Py_XDECREF(endidx);
@@ -791,12 +798,12 @@
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
/* Set our hook functions */
- rl_startup_hook = (Function *)on_startup_hook;
+ rl_startup_hook = on_startup_hook;
#ifdef HAVE_RL_PRE_INPUT_HOOK
- rl_pre_input_hook = (Function *)on_pre_input_hook;
+ rl_pre_input_hook = on_pre_input_hook;
#endif
/* Set our completion function */
- rl_attempted_completion_function = (CPPFunction *)flex_complete;
+ rl_attempted_completion_function = flex_complete;
/* Set Python word break characters */
rl_completer_word_break_characters =
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");

View File

@@ -0,0 +1,12 @@
diff -r -u ../Python-2.6.2.orig/setup.py ./setup.py
--- ../Python-2.6.2.orig/setup.py 2013-10-30 00:04:39.000000000 +0900
+++ ./setup.py 2014-04-03 22:28:49.122061684 +0900
@@ -1564,7 +1564,7 @@
# The versions with dots are used on Unix, and the versions without
# dots on Windows, for detection by cygwin.
tcllib = tklib = tcl_includes = tk_includes = None
- for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
+ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
'82', '8.1', '81', '8.0', '80']:
tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version)
tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version)

View File

@@ -0,0 +1,95 @@
diff -r -u ../Python-2.6.4.orig/Lib/ssl.py ./Lib/ssl.py
--- ../Python-2.6.4.orig/Lib/ssl.py 2012-04-10 15:32:06.000000000 +0000
+++ ./Lib/ssl.py 2015-12-18 14:46:36.487188331 +0000
@@ -61,18 +61,24 @@
from _ssl import SSLError
from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
-from _ssl import PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1
-from _ssl import RAND_status, RAND_egd, RAND_add
-from _ssl import \
- SSL_ERROR_ZERO_RETURN, \
- SSL_ERROR_WANT_READ, \
- SSL_ERROR_WANT_WRITE, \
- SSL_ERROR_WANT_X509_LOOKUP, \
- SSL_ERROR_SYSCALL, \
- SSL_ERROR_SSL, \
- SSL_ERROR_WANT_CONNECT, \
- SSL_ERROR_EOF, \
- SSL_ERROR_INVALID_ERROR_CODE
+from _ssl import RAND_status, RAND_add
+try:
+ from _ssl import RAND_egd
+except ImportError:
+ # LibreSSL does not provide RAND_egd
+ pass
+
+def _import_symbols(prefix):
+ for n in dir(_ssl):
+ if n.startswith(prefix):
+ globals()[n] = getattr(_ssl, n)
+
+_import_symbols('OP_')
+_import_symbols('ALERT_DESCRIPTION_')
+_import_symbols('SSL_ERROR_')
+_import_symbols('PROTOCOL_')
+
+_PROTOCOL_NAMES = dict([(value, name) for name, value in globals().items() if name.startswith('PROTOCOL_')])
from socket import socket, _fileobject
from socket import getnameinfo as _getnameinfo
@@ -394,7 +400,7 @@
d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
return base64.decodestring(d)
-def get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
+def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None):
"""Retrieve the certificate from the server at the specified address,
and return it as a PEM-encoded string.
diff -r -u ../Python-2.6.4.orig/Modules/_ssl.c ./Modules/_ssl.c
--- ../Python-2.6.4.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000
+++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000
@@ -61,8 +61,12 @@
};
enum py_ssl_version {
+#ifndef OPENSSL_NO_SSL2
PY_SSL_VERSION_SSL2,
+#endif
+#ifndef OPENSSL_NO_SSL3
PY_SSL_VERSION_SSL3,
+#endif
PY_SSL_VERSION_SSL23,
PY_SSL_VERSION_TLS1,
};
@@ -298,10 +302,14 @@
PySSL_BEGIN_ALLOW_THREADS
if (proto_version == PY_SSL_VERSION_TLS1)
self->ctx = SSL_CTX_new(TLSv1_method()); /* Set up context */
+#ifndef OPENSSL_NO_SSL3
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
+#endif
+#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
+#endif
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
PySSL_END_ALLOW_THREADS
@@ -1627,10 +1635,14 @@
PY_SSL_CERT_REQUIRED);
/* protocol versions */
+#ifndef OPENSSL_NO_SSL2
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
PY_SSL_VERSION_SSL2);
+#endif
+#ifndef OPENSSL_NO_SSL3
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
PY_SSL_VERSION_SSL3);
+#endif
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
PY_SSL_VERSION_SSL23);
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",

View File

@@ -0,0 +1,71 @@
# HG changeset patch
# User Barry Warsaw <barry@python.org>
# Date 1302190091 14400
# Node ID bd0f73a9538e05f526feaf05821e68bdcff498fa
# Parent 2e4cdaffe493e879fb5367a4aa454491de451137
Backport for Python 2.7 of issue 11715 support for building Python on
multiarch Debian/Ubuntu.
diff -r -u setup.py setup.py
--- setup.py.orig
+++ setup.py
@@ -15,6 +15,7 @@
from distutils.command.build_ext import build_ext
from distutils.command.install import install
from distutils.command.install_lib import install_lib
+from distutils.spawn import find_executable
# This global variable is used to hold the list of modules to be disabled.
disabled_module_list = []
@@ -308,10 +309,33 @@ class PyBuildExt(build_ext):
return platform
return sys.platform
+ def add_multiarch_paths(self):
+ # Debian/Ubuntu multiarch support.
+ # https://wiki.ubuntu.com/MultiarchSpec
+ if not find_executable('dpkg-architecture'):
+ return
+ tmpfile = os.path.join(self.build_temp, 'multiarch')
+ if not os.path.exists(self.build_temp):
+ os.makedirs(self.build_temp)
+ ret = os.system(
+ 'dpkg-architecture -qDEB_HOST_MULTIARCH > %s 2> /dev/null' %
+ tmpfile)
+ try:
+ if ret >> 8 == 0:
+ with open(tmpfile) as fp:
+ multiarch_path_component = fp.readline().strip()
+ add_dir_to_list(self.compiler.library_dirs,
+ '/usr/lib/' + multiarch_path_component)
+ add_dir_to_list(self.compiler.include_dirs,
+ '/usr/include/' + multiarch_path_component)
+ finally:
+ os.unlink(tmpfile)
+
def detect_modules(self):
# Ensure that /usr/local is always used
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1331,14 +1355,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,61 @@
diff -r -u ../Python-2.6.4.orig/Modules/readline.c ./Modules/readline.c
--- ../Python-2.6.4.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900
+++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900
@@ -178,8 +178,7 @@
if (!PyArg_ParseTuple(args, buf, &function))
return NULL;
if (function == Py_None) {
- Py_XDECREF(*hook_var);
- *hook_var = NULL;
+ Py_CLEAR(*hook_var);
}
else if (PyCallable_Check(function)) {
PyObject *tmp = *hook_var;
@@ -655,14 +654,22 @@
}
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)
+#else
+on_startup_hook()
+#endif
{
return on_hook(startup_hook);
}
#ifdef HAVE_RL_PRE_INPUT_HOOK
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)
+#else
+on_pre_input_hook()
+#endif
{
return on_hook(pre_input_hook);
}
@@ -757,7 +764,7 @@
* before calling the normal completer */
static char **
-flex_complete(char *text, int start, int end)
+flex_complete(const char *text, int start, int end)
{
Py_XDECREF(begidx);
Py_XDECREF(endidx);
@@ -791,12 +798,12 @@
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
/* Set our hook functions */
- rl_startup_hook = (Function *)on_startup_hook;
+ rl_startup_hook = on_startup_hook;
#ifdef HAVE_RL_PRE_INPUT_HOOK
- rl_pre_input_hook = (Function *)on_pre_input_hook;
+ rl_pre_input_hook = on_pre_input_hook;
#endif
/* Set our completion function */
- rl_attempted_completion_function = (CPPFunction *)flex_complete;
+ rl_attempted_completion_function = flex_complete;
/* Set Python word break characters */
rl_completer_word_break_characters =
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");

View File

@@ -0,0 +1,12 @@
diff -r -u ../Python-2.6.4.orig/setup.py ./setup.py
--- ../Python-2.6.4.orig/setup.py 2013-10-30 00:04:39.000000000 +0900
+++ ./setup.py 2014-04-03 22:28:49.122061684 +0900
@@ -1573,7 +1573,7 @@
# The versions with dots are used on Unix, and the versions without
# dots on Windows, for detection by cygwin.
tcllib = tklib = tcl_includes = tk_includes = None
- for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
+ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
'82', '8.1', '81', '8.0', '80']:
tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version)
tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version)

View File

@@ -0,0 +1,95 @@
diff -r -u ../Python-2.6.4.orig/Lib/ssl.py ./Lib/ssl.py
--- ../Python-2.6.4.orig/Lib/ssl.py 2012-04-10 15:32:06.000000000 +0000
+++ ./Lib/ssl.py 2015-12-18 14:46:36.487188331 +0000
@@ -61,18 +61,24 @@
from _ssl import SSLError
from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
-from _ssl import PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1
-from _ssl import RAND_status, RAND_egd, RAND_add
-from _ssl import \
- SSL_ERROR_ZERO_RETURN, \
- SSL_ERROR_WANT_READ, \
- SSL_ERROR_WANT_WRITE, \
- SSL_ERROR_WANT_X509_LOOKUP, \
- SSL_ERROR_SYSCALL, \
- SSL_ERROR_SSL, \
- SSL_ERROR_WANT_CONNECT, \
- SSL_ERROR_EOF, \
- SSL_ERROR_INVALID_ERROR_CODE
+from _ssl import RAND_status, RAND_add
+try:
+ from _ssl import RAND_egd
+except ImportError:
+ # LibreSSL does not provide RAND_egd
+ pass
+
+def _import_symbols(prefix):
+ for n in dir(_ssl):
+ if n.startswith(prefix):
+ globals()[n] = getattr(_ssl, n)
+
+_import_symbols('OP_')
+_import_symbols('ALERT_DESCRIPTION_')
+_import_symbols('SSL_ERROR_')
+_import_symbols('PROTOCOL_')
+
+_PROTOCOL_NAMES = dict([(value, name) for name, value in globals().items() if name.startswith('PROTOCOL_')])
from socket import socket, _fileobject
from socket import getnameinfo as _getnameinfo
@@ -394,7 +400,7 @@
d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
return base64.decodestring(d)
-def get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
+def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None):
"""Retrieve the certificate from the server at the specified address,
and return it as a PEM-encoded string.
diff -r -u ../Python-2.6.4.orig/Modules/_ssl.c ./Modules/_ssl.c
--- ../Python-2.6.4.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000
+++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000
@@ -61,8 +61,12 @@
};
enum py_ssl_version {
+#ifndef OPENSSL_NO_SSL2
PY_SSL_VERSION_SSL2,
+#endif
+#ifndef OPENSSL_NO_SSL3
PY_SSL_VERSION_SSL3,
+#endif
PY_SSL_VERSION_SSL23,
PY_SSL_VERSION_TLS1,
};
@@ -298,10 +302,14 @@
PySSL_BEGIN_ALLOW_THREADS
if (proto_version == PY_SSL_VERSION_TLS1)
self->ctx = SSL_CTX_new(TLSv1_method()); /* Set up context */
+#ifndef OPENSSL_NO_SSL3
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
+#endif
+#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
+#endif
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
PySSL_END_ALLOW_THREADS
@@ -1627,10 +1635,14 @@
PY_SSL_CERT_REQUIRED);
/* protocol versions */
+#ifndef OPENSSL_NO_SSL2
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
PY_SSL_VERSION_SSL2);
+#endif
+#ifndef OPENSSL_NO_SSL3
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
PY_SSL_VERSION_SSL3);
+#endif
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
PY_SSL_VERSION_SSL23);
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",

View File

@@ -0,0 +1,71 @@
# HG changeset patch
# User Barry Warsaw <barry@python.org>
# Date 1302190091 14400
# Node ID bd0f73a9538e05f526feaf05821e68bdcff498fa
# Parent 2e4cdaffe493e879fb5367a4aa454491de451137
Backport for Python 2.7 of issue 11715 support for building Python on
multiarch Debian/Ubuntu.
diff -r -u setup.py setup.py
--- setup.py.orig
+++ setup.py
@@ -15,6 +15,7 @@
from distutils.command.build_ext import build_ext
from distutils.command.install import install
from distutils.command.install_lib import install_lib
+from distutils.spawn import find_executable
# This global variable is used to hold the list of modules to be disabled.
disabled_module_list = []
@@ -308,10 +309,33 @@ class PyBuildExt(build_ext):
return platform
return sys.platform
+ def add_multiarch_paths(self):
+ # Debian/Ubuntu multiarch support.
+ # https://wiki.ubuntu.com/MultiarchSpec
+ if not find_executable('dpkg-architecture'):
+ return
+ tmpfile = os.path.join(self.build_temp, 'multiarch')
+ if not os.path.exists(self.build_temp):
+ os.makedirs(self.build_temp)
+ ret = os.system(
+ 'dpkg-architecture -qDEB_HOST_MULTIARCH > %s 2> /dev/null' %
+ tmpfile)
+ try:
+ if ret >> 8 == 0:
+ with open(tmpfile) as fp:
+ multiarch_path_component = fp.readline().strip()
+ add_dir_to_list(self.compiler.library_dirs,
+ '/usr/lib/' + multiarch_path_component)
+ add_dir_to_list(self.compiler.include_dirs,
+ '/usr/include/' + multiarch_path_component)
+ finally:
+ os.unlink(tmpfile)
+
def detect_modules(self):
# Ensure that /usr/local is always used
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1331,14 +1355,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,61 @@
diff -r -u ../Python-2.6.4.orig/Modules/readline.c ./Modules/readline.c
--- ../Python-2.6.4.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900
+++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900
@@ -178,8 +178,7 @@
if (!PyArg_ParseTuple(args, buf, &function))
return NULL;
if (function == Py_None) {
- Py_XDECREF(*hook_var);
- *hook_var = NULL;
+ Py_CLEAR(*hook_var);
}
else if (PyCallable_Check(function)) {
PyObject *tmp = *hook_var;
@@ -655,14 +654,22 @@
}
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)
+#else
+on_startup_hook()
+#endif
{
return on_hook(startup_hook);
}
#ifdef HAVE_RL_PRE_INPUT_HOOK
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)
+#else
+on_pre_input_hook()
+#endif
{
return on_hook(pre_input_hook);
}
@@ -757,7 +764,7 @@
* before calling the normal completer */
static char **
-flex_complete(char *text, int start, int end)
+flex_complete(const char *text, int start, int end)
{
Py_XDECREF(begidx);
Py_XDECREF(endidx);
@@ -791,12 +798,12 @@
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
/* Set our hook functions */
- rl_startup_hook = (Function *)on_startup_hook;
+ rl_startup_hook = on_startup_hook;
#ifdef HAVE_RL_PRE_INPUT_HOOK
- rl_pre_input_hook = (Function *)on_pre_input_hook;
+ rl_pre_input_hook = on_pre_input_hook;
#endif
/* Set our completion function */
- rl_attempted_completion_function = (CPPFunction *)flex_complete;
+ rl_attempted_completion_function = flex_complete;
/* Set Python word break characters */
rl_completer_word_break_characters =
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");

View File

@@ -0,0 +1,12 @@
diff -r -u ../Python-2.6.4.orig/setup.py ./setup.py
--- ../Python-2.6.4.orig/setup.py 2013-10-30 00:04:39.000000000 +0900
+++ ./setup.py 2014-04-03 22:28:49.122061684 +0900
@@ -1573,7 +1573,7 @@
# The versions with dots are used on Unix, and the versions without
# dots on Windows, for detection by cygwin.
tcllib = tklib = tcl_includes = tk_includes = None
- for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
+ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
'82', '8.1', '81', '8.0', '80']:
tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version)
tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version)

View File

@@ -0,0 +1,95 @@
diff -r -u ../Python-2.6.4.orig/Lib/ssl.py ./Lib/ssl.py
--- ../Python-2.6.4.orig/Lib/ssl.py 2012-04-10 15:32:06.000000000 +0000
+++ ./Lib/ssl.py 2015-12-18 14:46:36.487188331 +0000
@@ -61,18 +61,24 @@
from _ssl import SSLError
from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
-from _ssl import PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1
-from _ssl import RAND_status, RAND_egd, RAND_add
-from _ssl import \
- SSL_ERROR_ZERO_RETURN, \
- SSL_ERROR_WANT_READ, \
- SSL_ERROR_WANT_WRITE, \
- SSL_ERROR_WANT_X509_LOOKUP, \
- SSL_ERROR_SYSCALL, \
- SSL_ERROR_SSL, \
- SSL_ERROR_WANT_CONNECT, \
- SSL_ERROR_EOF, \
- SSL_ERROR_INVALID_ERROR_CODE
+from _ssl import RAND_status, RAND_add
+try:
+ from _ssl import RAND_egd
+except ImportError:
+ # LibreSSL does not provide RAND_egd
+ pass
+
+def _import_symbols(prefix):
+ for n in dir(_ssl):
+ if n.startswith(prefix):
+ globals()[n] = getattr(_ssl, n)
+
+_import_symbols('OP_')
+_import_symbols('ALERT_DESCRIPTION_')
+_import_symbols('SSL_ERROR_')
+_import_symbols('PROTOCOL_')
+
+_PROTOCOL_NAMES = dict([(value, name) for name, value in globals().items() if name.startswith('PROTOCOL_')])
from socket import socket, _fileobject
from socket import getnameinfo as _getnameinfo
@@ -394,7 +400,7 @@
d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
return base64.decodestring(d)
-def get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
+def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None):
"""Retrieve the certificate from the server at the specified address,
and return it as a PEM-encoded string.
diff -r -u ../Python-2.6.4.orig/Modules/_ssl.c ./Modules/_ssl.c
--- ../Python-2.6.4.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000
+++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000
@@ -61,8 +61,12 @@
};
enum py_ssl_version {
+#ifndef OPENSSL_NO_SSL2
PY_SSL_VERSION_SSL2,
+#endif
+#ifndef OPENSSL_NO_SSL3
PY_SSL_VERSION_SSL3,
+#endif
PY_SSL_VERSION_SSL23,
PY_SSL_VERSION_TLS1,
};
@@ -298,10 +302,14 @@
PySSL_BEGIN_ALLOW_THREADS
if (proto_version == PY_SSL_VERSION_TLS1)
self->ctx = SSL_CTX_new(TLSv1_method()); /* Set up context */
+#ifndef OPENSSL_NO_SSL3
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
+#endif
+#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
+#endif
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
PySSL_END_ALLOW_THREADS
@@ -1627,10 +1635,14 @@
PY_SSL_CERT_REQUIRED);
/* protocol versions */
+#ifndef OPENSSL_NO_SSL2
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
PY_SSL_VERSION_SSL2);
+#endif
+#ifndef OPENSSL_NO_SSL3
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
PY_SSL_VERSION_SSL3);
+#endif
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
PY_SSL_VERSION_SSL23);
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",

View File

@@ -0,0 +1,71 @@
# HG changeset patch
# User Barry Warsaw <barry@python.org>
# Date 1302190091 14400
# Node ID bd0f73a9538e05f526feaf05821e68bdcff498fa
# Parent 2e4cdaffe493e879fb5367a4aa454491de451137
Backport for Python 2.7 of issue 11715 support for building Python on
multiarch Debian/Ubuntu.
diff -r -u setup.py setup.py
--- setup.py.orig
+++ setup.py
@@ -15,6 +15,7 @@
from distutils.command.build_ext import build_ext
from distutils.command.install import install
from distutils.command.install_lib import install_lib
+from distutils.spawn import find_executable
# This global variable is used to hold the list of modules to be disabled.
disabled_module_list = []
@@ -308,10 +309,33 @@ class PyBuildExt(build_ext):
return platform
return sys.platform
+ def add_multiarch_paths(self):
+ # Debian/Ubuntu multiarch support.
+ # https://wiki.ubuntu.com/MultiarchSpec
+ if not find_executable('dpkg-architecture'):
+ return
+ tmpfile = os.path.join(self.build_temp, 'multiarch')
+ if not os.path.exists(self.build_temp):
+ os.makedirs(self.build_temp)
+ ret = os.system(
+ 'dpkg-architecture -qDEB_HOST_MULTIARCH > %s 2> /dev/null' %
+ tmpfile)
+ try:
+ if ret >> 8 == 0:
+ with open(tmpfile) as fp:
+ multiarch_path_component = fp.readline().strip()
+ add_dir_to_list(self.compiler.library_dirs,
+ '/usr/lib/' + multiarch_path_component)
+ add_dir_to_list(self.compiler.include_dirs,
+ '/usr/include/' + multiarch_path_component)
+ finally:
+ os.unlink(tmpfile)
+
def detect_modules(self):
# Ensure that /usr/local is always used
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1339,14 +1363,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,61 @@
diff -r -u ../Python-2.6.5.orig/Modules/readline.c ./Modules/readline.c
--- ../Python-2.6.5.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900
+++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900
@@ -199,8 +199,7 @@
if (!PyArg_ParseTuple(args, buf, &function))
return NULL;
if (function == Py_None) {
- Py_XDECREF(*hook_var);
- *hook_var = NULL;
+ Py_CLEAR(*hook_var);
}
else if (PyCallable_Check(function)) {
PyObject *tmp = *hook_var;
@@ -699,14 +698,22 @@
}
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)
+#else
+on_startup_hook()
+#endif
{
return on_hook(startup_hook);
}
#ifdef HAVE_RL_PRE_INPUT_HOOK
static int
+#if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)
+#else
+on_pre_input_hook()
+#endif
{
return on_hook(pre_input_hook);
}
@@ -801,7 +808,7 @@
* before calling the normal completer */
static char **
-flex_complete(char *text, int start, int end)
+flex_complete(const char *text, int start, int end)
{
#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
rl_completion_append_character ='\0';
@@ -841,12 +848,12 @@
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
/* Set our hook functions */
- rl_startup_hook = (Function *)on_startup_hook;
+ rl_startup_hook = on_startup_hook;
#ifdef HAVE_RL_PRE_INPUT_HOOK
- rl_pre_input_hook = (Function *)on_pre_input_hook;
+ rl_pre_input_hook = on_pre_input_hook;
#endif
/* Set our completion function */
- rl_attempted_completion_function = (CPPFunction *)flex_complete;
+ rl_attempted_completion_function = flex_complete;
/* Set Python word break characters */
rl_completer_word_break_characters =
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");

View File

@@ -0,0 +1,12 @@
diff -r -u ../Python-2.6.5.orig/setup.py ./setup.py
--- ../Python-2.6.5.orig/setup.py 2013-10-30 00:04:39.000000000 +0900
+++ ./setup.py 2014-04-03 22:28:49.122061684 +0900
@@ -1581,7 +1581,7 @@
# The versions with dots are used on Unix, and the versions without
# dots on Windows, for detection by cygwin.
tcllib = tklib = tcl_includes = tk_includes = None
- for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
+ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
'82', '8.1', '81', '8.0', '80']:
tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version)
tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version)

View File

@@ -0,0 +1,95 @@
diff -r -u ../Python-2.6.5.orig/Lib/ssl.py ./Lib/ssl.py
--- ../Python-2.6.5.orig/Lib/ssl.py 2012-04-10 15:32:06.000000000 +0000
+++ ./Lib/ssl.py 2015-12-18 14:46:36.487188331 +0000
@@ -61,18 +61,24 @@
from _ssl import SSLError
from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
-from _ssl import PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1
-from _ssl import RAND_status, RAND_egd, RAND_add
-from _ssl import \
- SSL_ERROR_ZERO_RETURN, \
- SSL_ERROR_WANT_READ, \
- SSL_ERROR_WANT_WRITE, \
- SSL_ERROR_WANT_X509_LOOKUP, \
- SSL_ERROR_SYSCALL, \
- SSL_ERROR_SSL, \
- SSL_ERROR_WANT_CONNECT, \
- SSL_ERROR_EOF, \
- SSL_ERROR_INVALID_ERROR_CODE
+from _ssl import RAND_status, RAND_add
+try:
+ from _ssl import RAND_egd
+except ImportError:
+ # LibreSSL does not provide RAND_egd
+ pass
+
+def _import_symbols(prefix):
+ for n in dir(_ssl):
+ if n.startswith(prefix):
+ globals()[n] = getattr(_ssl, n)
+
+_import_symbols('OP_')
+_import_symbols('ALERT_DESCRIPTION_')
+_import_symbols('SSL_ERROR_')
+_import_symbols('PROTOCOL_')
+
+_PROTOCOL_NAMES = dict([(value, name) for name, value in globals().items() if name.startswith('PROTOCOL_')])
from socket import socket, _fileobject
from socket import getnameinfo as _getnameinfo
@@ -394,7 +400,7 @@
d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
return base64.decodestring(d)
-def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
+def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None):
"""Retrieve the certificate from the server at the specified address,
and return it as a PEM-encoded string.
diff -r -u ../Python-2.6.5.orig/Modules/_ssl.c ./Modules/_ssl.c
--- ../Python-2.6.5.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000
+++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000
@@ -61,8 +61,12 @@
};
enum py_ssl_version {
+#ifndef OPENSSL_NO_SSL2
PY_SSL_VERSION_SSL2,
+#endif
+#ifndef OPENSSL_NO_SSL3
PY_SSL_VERSION_SSL3,
+#endif
PY_SSL_VERSION_SSL23,
PY_SSL_VERSION_TLS1,
};
@@ -298,10 +302,14 @@
PySSL_BEGIN_ALLOW_THREADS
if (proto_version == PY_SSL_VERSION_TLS1)
self->ctx = SSL_CTX_new(TLSv1_method()); /* Set up context */
+#ifndef OPENSSL_NO_SSL3
else if (proto_version == PY_SSL_VERSION_SSL3)
self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
+#endif
+#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
+#endif
else if (proto_version == PY_SSL_VERSION_SSL23)
self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
PySSL_END_ALLOW_THREADS
@@ -1627,10 +1635,14 @@
PY_SSL_CERT_REQUIRED);
/* protocol versions */
+#ifndef OPENSSL_NO_SSL2
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
PY_SSL_VERSION_SSL2);
+#endif
+#ifndef OPENSSL_NO_SSL3
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
PY_SSL_VERSION_SSL3);
+#endif
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
PY_SSL_VERSION_SSL23);
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",

View File

@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1443,14 +1443,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1443,14 +1443,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1443,14 +1443,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1443,14 +1443,13 @@
# Platform-specific libraries
- if platform == 'linux2':
+ if platform.startswith('linux'):
# Linux-specific modules
exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
else:
missing.append('linuxaudiodev')
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -43,3 +43,13 @@ diff -r -u ../Python-3.1/setup.py ./setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1203,8 +1203,7 @@
# End multiprocessing
# Platform-specific libraries
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -43,3 +43,13 @@ diff -r -u ../Python-3.1/setup.py ./setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1203,8 +1203,7 @@
# End multiprocessing
# Platform-specific libraries
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -43,3 +43,13 @@ diff -r -u ../Python-3.1/setup.py ./setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1207,8 +1207,7 @@
# End multiprocessing
# Platform-specific libraries
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -44,4 +44,13 @@ diff -r -u setup.py setup.py
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -1321,8 +1321,7 @@
# End multiprocessing
# Platform-specific libraries
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,12 @@
--- setup.py.orig 2012-04-10 01:25:37.000000000 +0200
+++ setup.py 2021-09-03 10:16:58.575042300 +0200
@@ -1344,8 +1344,7 @@
# End multiprocessing
# Platform-specific libraries
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,12 @@
--- setup.py.orig 2012-04-10 01:25:37.000000000 +0200
+++ setup.py 2021-09-03 10:16:58.575042300 +0200
@@ -1344,8 +1344,7 @@
# End multiprocessing
# Platform-specific libraries
- if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8'):
+ if platform.startswith('linux') or platform.startswith('freebsd'):
exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
else:
missing.append('ossaudiodev')

View File

@@ -0,0 +1,19 @@
echo
colorize 1 "WARNING"
echo ": Pyston only runs on x86_64 platforms, and only has been tested on Ubuntu"
echo "so, your mileage may vary with other Linux distributions."
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
;;
* )
{ echo
colorize 1 "ERROR"
echo ": A Pyston 2.3 binary is not available for $(pyston_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@@ -165,7 +165,7 @@ OUT
stub uname '-s : echo Linux'
stub uname '-s : echo Darwin'
stub brew "--prefix libyaml : echo '$brew_libdir'" false
stub brew "--prefix libyaml : echo '$brew_libdir'" false false
stub_make_install
install_fixture definitions/needs-yaml
@@ -192,7 +192,7 @@ OUT
# pyenv/pyenv#1026
stub uname false false
stub brew "--prefix readline : echo '$readline_libdir'"
stub brew false "--prefix readline : echo '$readline_libdir'"
stub_make_install
run_inline_definition <<DEF
@@ -222,7 +222,7 @@ OUT
# pyenv/pyenv#1026
stub uname false false
stub brew
stub brew false
stub_make_install
export PYTHON_CONFIGURE_OPTS="CPPFLAGS=-I$readline_libdir/include LDFLAGS=-L$readline_libdir/lib"
@@ -242,6 +242,68 @@ make install
OUT
}
@test "tcl-tk is linked from Homebrew" {
cached_tarball "Python-3.6.2"
# python build
tcl_tk_libdir="$TMP/homebrew-tcl-tk"
tcl_tk_version_long="8.6.10"
tcl_tk_version="${tcl_tk_version_long%.*}"
mkdir -p "$tcl_tk_libdir"
mkdir -p "$tcl_tk_libdir/$tcl_tk_version_long"
# pyenv/pyenv#1026
stub uname false false
stub brew "--prefix tcl-tk : echo '$tcl_tk_libdir'" "--cellar tcl-tk : echo '$TMP/homebrew-tcl-tk'" false
stub_make_install
run_inline_definition <<DEF
install_package "Python-3.6.2" "http://python.org/ftp/python/3.6.2/Python-3.6.2.tar.gz"
DEF
assert_success
unstub brew
unstub make
assert_build_log <<OUT
Python-3.6.2: CPPFLAGS="-I${TMP}/install/include " LDFLAGS="-L${TMP}/install/lib "
Python-3.6.2: --prefix=${TMP}/install --libdir=${TMP}/install/lib --with-tcltk-libs=-L${TMP}/homebrew-tcl-tk/lib -ltcl$tcl_tk_version -ltk$tcl_tk_version --with-tcltk-includes=-I${TMP}/homebrew-tcl-tk/include
make -j 2
make install
OUT
}
@test "tcl-tk is not linked from Homebrew when explicitly defined" {
cached_tarball "Python-3.6.2"
# python build
tcl_tk_version_long="8.6.10"
tcl_tk_version="${tcl_tk_version_long%.*}"
# pyenv/pyenv#1026
stub uname false false
stub brew false false
stub_make_install
export PYTHON_CONFIGURE_OPTS="--with-tcltk-libs='-L${TMP}/custom-tcl-tk/lib -ltcl$tcl_tk_version -ltk$tcl_tk_version'"
run_inline_definition <<DEF
install_package "Python-3.6.2" "http://python.org/ftp/python/3.6.2/Python-3.6.2.tar.gz"
DEF
assert_success
unstub brew
unstub make
assert_build_log <<OUT
Python-3.6.2: CPPFLAGS="-I${TMP}/install/include " LDFLAGS="-L${TMP}/install/lib "
Python-3.6.2: --prefix=$INSTALL_ROOT --libdir=$INSTALL_ROOT/lib --with-tcltk-libs=-L${TMP}/custom-tcl-tk/lib -ltcl8.6 -ltk8.6
make -j 2
make install
OUT
}
@test "number of CPU cores defaults to 2" {
cached_tarball "Python-3.6.2"

View File

@@ -34,14 +34,23 @@ make_shims() {
}
deregister_conda_shims() {
local shim
local shims=()
for shim in ${registered_shims}; do
if ! conda_shim "${shim}" 1>&2; then
shims[${#shims[*]}]="${shim}"
fi
done
registered_shims=" ${shims[@]} "
# adapted for Bash 4.x's associative array (#1749)
if declare -p registered_shims 2> /dev/null | grep -Eq '^(declare|typeset) \-A'; then
for shim in ${!registered_shims[*]}; do
if conda_shim "${shim}" 1>&2; then
unset registered_shims[${shim}]
fi
done
else
local shim
local shims=()
for shim in ${registered_shims}; do
if ! conda_shim "${shim}" 1>&2; then
shims[${#shims[*]}]="${shim}"
fi
done
registered_shims=" ${shims[@]} "
fi
}
if conda_exists; then

View File

@@ -53,7 +53,7 @@ OUT
@test "fish instructions" {
run pyenv-init fish
assert [ "$status" -eq 1 ]
assert_line 'pyenv init - | source'
assert_line '# See the README for instructions on how to set up'
}
@test "option to skip rehash" {
@@ -90,13 +90,6 @@ OUT
assert_line 0 "set -gx PATH '${PYENV_ROOT}/shims' \$PATH"
}
@test "prints a warning if shims not in PATH" {
export PATH="$(perl -0x3A -ls -e 'while (<>) { chomp; ($_ ne $d) && print; }' -- -d="${PYENV_ROOT}/shims" <<<"$PATH")"
run pyenv-init -
assert_success
assert_line 0 'echo '\''WARNING: `pyenv init -` no longer sets PATH.'\'
}
@test "outputs sh-compatible syntax" {
run pyenv-init - bash
assert_success

View File

@@ -24,6 +24,15 @@ load test_helper
assert_success "$PYENV_TEST_DIR"
}
#Arch has Python at sbin as well as bin
@test "prefix for sbin system" {
mkdir -p "${PYENV_TEST_DIR}/sbin"
touch "${PYENV_TEST_DIR}/sbin/python"
chmod +x "${PYENV_TEST_DIR}/sbin/python"
PATH="${PYENV_TEST_DIR}/sbin:$PATH" PYENV_VERSION="system" run pyenv-prefix
assert_success "$PYENV_TEST_DIR"
}
@test "prefix for system in /" {
mkdir -p "${BATS_TEST_DIRNAME}/libexec"
cat >"${BATS_TEST_DIRNAME}/libexec/pyenv-which" <<OUT