mirror of
https://github.com/pyenv/pyenv.git
synced 2025-11-08 19:43:48 -05:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcfd715603 | ||
|
|
474d7cc066 | ||
|
|
02c44942c6 | ||
|
|
76db37dbfa | ||
|
|
eb89256f59 | ||
|
|
19f74e41f0 | ||
|
|
6c74b616a5 | ||
|
|
8cce6e8dd2 | ||
|
|
03cabd88e9 | ||
|
|
e56962b357 | ||
|
|
cabdc45181 | ||
|
|
7f45f1eb9d | ||
|
|
acc949c27b | ||
|
|
4f689cdf83 | ||
|
|
26134d9b38 | ||
|
|
1c90a0f864 | ||
|
|
90d0d20508 | ||
|
|
58e2087967 | ||
|
|
a65af6570d | ||
|
|
70d7749584 | ||
|
|
9df4524c79 | ||
|
|
f7450587dc | ||
|
|
22e1aa6e9d |
2
.github/workflows/ubuntu_tests.yml
vendored
2
.github/workflows/ubuntu_tests.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
|||||||
- 3.7.10
|
- 3.7.10
|
||||||
- 3.8.10
|
- 3.8.10
|
||||||
- 3.9.5
|
- 3.9.5
|
||||||
- 3.10.0rc1
|
- 3.10.0rc2
|
||||||
runs-on: Ubuntu-20.04
|
runs-on: Ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|||||||
13
CHANGELOG.md
13
CHANGELOG.md
@@ -1,5 +1,18 @@
|
|||||||
## Version History
|
## 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
|
## Release 2.0.6
|
||||||
* Add CPython 3.9.7 (#2044)
|
* Add CPython 3.9.7 (#2044)
|
||||||
* Add CPython v3.8.12 (#2043)
|
* Add CPython v3.8.12 (#2043)
|
||||||
|
|||||||
228
README.md
228
README.md
@@ -46,6 +46,10 @@ This project was forked from [rbenv](https://github.com/rbenv/rbenv) and
|
|||||||
* [Choosing the Python Version](#choosing-the-python-version)
|
* [Choosing the Python Version](#choosing-the-python-version)
|
||||||
* [Locating the Python Installation](#locating-the-python-installation)
|
* [Locating the Python Installation](#locating-the-python-installation)
|
||||||
* **[Installation](#installation)**
|
* **[Installation](#installation)**
|
||||||
|
* [Prerequisites](#prerequisites)
|
||||||
|
* [Homebrew in macOS](#homebrew-in-macos)
|
||||||
|
* [Windows](#windows)
|
||||||
|
* [Automatic installer](#automatic-installer)
|
||||||
* [Basic GitHub Checkout](#basic-github-checkout)
|
* [Basic GitHub Checkout](#basic-github-checkout)
|
||||||
* [Upgrading](#upgrading)
|
* [Upgrading](#upgrading)
|
||||||
* [Homebrew on macOS](#homebrew-on-macos)
|
* [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
|
## 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).
|
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):
|
1. Consider installing with [Homebrew](https://brew.sh):
|
||||||
```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").
|
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:
|
Visit our other project:
|
||||||
https://github.com/pyenv/pyenv-installer
|
https://github.com/pyenv/pyenv-installer
|
||||||
@@ -206,64 +221,94 @@ easy to fork and contribute any changes back upstream.
|
|||||||
|
|
||||||
2. **Configure your shell's environment for Pyenv**
|
2. **Configure your shell's environment for Pyenv**
|
||||||
|
|
||||||
**Note:** The below instructions for specific shells are designed for common shell setups.
|
**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,
|
they also install shell functions into interactive shells only.
|
||||||
use the guidance text and the [Advanced Configuration](#advanced-configuration)
|
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.
|
section below to figure out what you need to do in your specific case.
|
||||||
|
|
||||||
1. **Adjust the session-wide environment for your account.** Define
|
**General MacOS note:**
|
||||||
the `PYENV_ROOT` environment variable to point to the path where
|
Make sure that your terminal app is configured to run the shell as a login shell
|
||||||
you cloned the Pyenv repo, add the `pyenv` command-line utility to your `PATH`,
|
(especially if you're using an alternative terminal app and/or shell).
|
||||||
run the output of `pyenv init --path` to enable shims.
|
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).
|
|
||||||
|
|
||||||
**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**:
|
- 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 you have no `~/.bash_profile` and your `/etc/profile` sources `~/.bashrc` (SUSE):**
|
||||||
|
|
||||||
~~~bash
|
~~~bash
|
||||||
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
|
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
|
||||||
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
|
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
|
||||||
echo 'eval "$(pyenv init --path)"' >> ~/.profile
|
echo 'eval "$(pyenv init --path)"' >> ~/.profile
|
||||||
|
|
||||||
|
echo 'if command -v pyenv >/dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bashrc
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
- **If your `~/.profile` sources `~/.bashrc` (Debian, Ubuntu, Mint):**
|
- **Otherwise if you have no stock `~/.profile` or `~/.bash_profile` (MacOS):**
|
||||||
|
|
||||||
Put these lines into `~/.profile` _before_ the part that sources `~/.bashrc`:
|
|
||||||
~~~bash
|
~~~bash
|
||||||
export PYENV_ROOT="$HOME/.pyenv"
|
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
|
||||||
export PATH="$PYENV_ROOT/bin:$PATH"
|
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
|
||||||
|
|
||||||
|
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
And put this line at the _bottom_ of `~/.profile`:
|
In MacOS, make sure that your terminal app runs the shell as a login shell.
|
||||||
|
|
||||||
|
- **Temporary environments (CI, batch jobs):**
|
||||||
|
|
||||||
|
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`).
|
||||||
|
|
||||||
~~~bash
|
~~~bash
|
||||||
eval "$(pyenv init --path)"
|
echo 'eval "$(pyenv init -)"'
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
<!--This is an alternative option and needn't be replicated to `pyenv init`-->
|
**General Bash warning**: There are some systems where the `BASH_ENV` variable is configured
|
||||||
Alternatively, for an automated installation, you can run the following:
|
to point to `.bashrc`. On such systems, you should almost certainly put the
|
||||||
~~~ bash
|
`eval "$(pyenv init -)"` line into `.bash_profile`, and **not** into `.bashrc`. Otherwise, you
|
||||||
echo -e 'if shopt -q login_shell; then' \
|
may observe strange behaviour, such as `pyenv` getting into an infinite loop.
|
||||||
'\n export PYENV_ROOT="$HOME/.pyenv"' \
|
See [#264](https://github.com/pyenv/pyenv/issues/264) for details.
|
||||||
'\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
|
|
||||||
~~~
|
|
||||||
|
|
||||||
**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`.
|
|
||||||
|
|
||||||
- For **Zsh**:
|
- For **Zsh**:
|
||||||
|
|
||||||
@@ -271,74 +316,61 @@ easy to fork and contribute any changes back upstream.
|
|||||||
|
|
||||||
~~~ zsh
|
~~~ zsh
|
||||||
echo 'eval "$(pyenv init --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.
|
||||||
|
|
||||||
|
|
||||||
- **MacOS, if Pyenv is installed with a Git checkout:**
|
- **MacOS, if Pyenv is installed with a Git checkout:**
|
||||||
|
|
||||||
~~~ zsh
|
~~~ zsh
|
||||||
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
|
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
|
||||||
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
|
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
|
||||||
echo 'eval "$(pyenv init --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:**
|
- **Other OSes:**
|
||||||
|
|
||||||
Same as for Bash above, but add the commands into both `~/.profile`
|
~~~ zsh
|
||||||
and `~/.zprofile`.
|
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**:
|
- For **Fish shell**:
|
||||||
|
|
||||||
Execute this interactively:
|
Execute this interactively:
|
||||||
|
|
||||||
~~~ fish
|
~~~ fish
|
||||||
set -Ux PYENV_ROOT $HOME/.pyenv
|
set -Ux PYENV_ROOT $HOME/.pyenv
|
||||||
set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths
|
set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
And add this to `~/.config/fish/config.fish`:
|
And add this to `~/.config/fish/config.fish`:
|
||||||
|
|
||||||
~~~ 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`.
|
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.
|
**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.
|
4. **Restart your login session for the changes to profile files to take effect.**
|
||||||
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.**
|
|
||||||
E.g. if you're in a GUI session, you need to fully log out and log back in.
|
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
|
In MacOS, restarting terminal windows is enough (because MacOS runs shells
|
||||||
@@ -424,31 +456,53 @@ profile is doing.
|
|||||||
|
|
||||||
`pyenv init` is the only command that crosses the line of loading
|
`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
|
extra commands into your shell. Coming from RVM, some of you might be
|
||||||
opposed to this idea. Here's what `pyenv init` actually does.
|
opposed to this idea.
|
||||||
Step 1 is done by `eval "$(pyenv init --path)"`, the others are done by
|
|
||||||
`eval "$(pyenv init -)"`.
|
|
||||||
|
|
||||||
|
Also see the [Environment variables](#environment-variables) section
|
||||||
|
for the environment variables that control Pyenv's behavior.
|
||||||
|
|
||||||
|
|
||||||
|
* `eval "$(pyenv init --path)"`:
|
||||||
|
|
||||||
1. **Sets up your shims path.** This is the only requirement for pyenv to
|
1. **Sets up your shims path.** This is the only requirement for pyenv to
|
||||||
function properly. You can do this by hand by prepending
|
function properly. You can do this by hand by prepending
|
||||||
`$(pyenv root)/shims` to your `$PATH`.
|
`$(pyenv root)/shims` to your `$PATH`.
|
||||||
|
|
||||||
2. **Installs autocompletion.** This is entirely optional but pretty
|
`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.
|
||||||
|
|
||||||
|
|
||||||
|
* `eval "$(pyenv init -)"`:
|
||||||
|
|
||||||
|
1. **Installs autocompletion.** This is entirely optional but pretty
|
||||||
useful. Sourcing `$(pyenv root)/completions/pyenv.bash` will set that
|
useful. Sourcing `$(pyenv root)/completions/pyenv.bash` will set that
|
||||||
up. There is also a `$(pyenv root)/completions/pyenv.zsh` for Zsh
|
up. There is also a `$(pyenv root)/completions/pyenv.zsh` for Zsh
|
||||||
users.
|
users.
|
||||||
|
|
||||||
3. **Rehashes shims.** From time to time you'll need to rebuild your
|
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
|
shim files. Doing this on init makes sure everything is up to
|
||||||
date. You can always run `pyenv rehash` manually.
|
date. You can always run `pyenv rehash` manually.
|
||||||
|
|
||||||
4. **Installs the sh dispatcher.** This bit is also optional, but allows
|
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
|
pyenv and plugins to change variables in your current shell, making
|
||||||
commands like `pyenv shell` possible. The sh dispatcher doesn't do
|
commands like `pyenv shell` possible. The sh dispatcher doesn't do
|
||||||
anything crazy like override `cd` or hack your shell prompt, but if
|
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
|
for some reason you need `pyenv` to be a real script rather than a
|
||||||
shell function, you can safely skip it.
|
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 -`
|
To see exactly what happens under the hood for yourself, run `pyenv init -`
|
||||||
or `pyenv init --path`.
|
or `pyenv init --path`.
|
||||||
|
|
||||||
|
|||||||
@@ -80,9 +80,13 @@ bin_path="$(abs_dirname "$0")"
|
|||||||
for plugin_bin in "${bin_path%/*}"/plugins/*/bin; do
|
for plugin_bin in "${bin_path%/*}"/plugins/*/bin; do
|
||||||
PATH="${plugin_bin}:${PATH}"
|
PATH="${plugin_bin}:${PATH}"
|
||||||
done
|
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
|
for plugin_bin in "${PYENV_ROOT}"/plugins/*/bin; do
|
||||||
PATH="${plugin_bin}:${PATH}"
|
PATH="${plugin_bin}:${PATH}"
|
||||||
done
|
done
|
||||||
|
fi
|
||||||
export PATH="${bin_path}:${PATH}"
|
export PATH="${bin_path}:${PATH}"
|
||||||
|
|
||||||
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d"
|
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
set -e
|
set -e
|
||||||
[ -n "$PYENV_DEBUG" ] && set -x
|
[ -n "$PYENV_DEBUG" ] && set -x
|
||||||
|
|
||||||
version="2.0.6"
|
version="2.0.7"
|
||||||
git_revision=""
|
git_revision=""
|
||||||
|
|
||||||
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then
|
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then
|
||||||
|
|||||||
@@ -93,68 +93,9 @@ function help_() {
|
|||||||
|
|
||||||
{
|
{
|
||||||
echo
|
echo
|
||||||
echo '# (The below instructions are intended for common'
|
echo '# See the README for instructions on how to set up'
|
||||||
echo '# shell setups. See the README for more guidance'
|
echo '# your shell environment for Pyenv.'
|
||||||
echo '# if they don'\''t apply and/or don'\''t work for you.)'
|
|
||||||
echo
|
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
|
} >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,9 @@ OLDIFS="$IFS"
|
|||||||
if PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python 2>/dev/null)" || \
|
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 python3 2>/dev/null)" || \
|
||||||
PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python2 2>/dev/null)"; then
|
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:-/}"
|
PYENV_PREFIX_PATH="${PYENV_PREFIX_PATH:-/}"
|
||||||
else
|
else
|
||||||
echo "pyenv: system version not found in PATH" >&2
|
echo "pyenv: system version not found in PATH" >&2
|
||||||
|
|||||||
@@ -112,6 +112,13 @@ is_mac() {
|
|||||||
[ $# -eq 0 ] || [ "$(osx_version)" "$@" ]
|
[ $# -eq 0 ] || [ "$(osx_version)" "$@" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_arm64_apple() {
|
||||||
|
if [ "$(uname -s)" = "Darwin" ] && [ "$(uname -m)" = "arm64" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# 9.1 -> 901
|
# 9.1 -> 901
|
||||||
# 10.9 -> 1009
|
# 10.9 -> 1009
|
||||||
# 10.10 -> 1010
|
# 10.10 -> 1010
|
||||||
@@ -766,6 +773,7 @@ build_package_standard_build() {
|
|||||||
local PACKAGE_CFLAGS="${package_var_name}_CFLAGS"
|
local PACKAGE_CFLAGS="${package_var_name}_CFLAGS"
|
||||||
|
|
||||||
if [ "$package_var_name" = "PYTHON" ]; then
|
if [ "$package_var_name" = "PYTHON" ]; then
|
||||||
|
use_tcltk || true
|
||||||
use_homebrew_readline || use_freebsd_pkg || true
|
use_homebrew_readline || use_freebsd_pkg || true
|
||||||
if is_mac -ge 1014; then
|
if is_mac -ge 1014; then
|
||||||
use_xcode_sdk_zlib || use_homebrew_zlib || true
|
use_xcode_sdk_zlib || use_homebrew_zlib || true
|
||||||
@@ -1516,6 +1524,98 @@ use_xcode_sdk_zlib() {
|
|||||||
fi
|
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() {
|
build_package_enable_shared() {
|
||||||
package_option python configure --enable-shared
|
package_option python configure --enable-shared
|
||||||
}
|
}
|
||||||
@@ -2053,19 +2153,6 @@ if [[ "$PYTHON_CONFIGURE_OPTS" != *"--enable-unicode="* ]]; then
|
|||||||
fi
|
fi
|
||||||
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` during build (#216)
|
||||||
unset PIP_REQUIRE_VENV
|
unset PIP_REQUIRE_VENV
|
||||||
unset PIP_REQUIRE_VIRTUALENV
|
unset PIP_REQUIRE_VIRTUALENV
|
||||||
|
|||||||
4
plugins/python-build/share/python-build/2.6.0
Normal file
4
plugins/python-build/share/python-build/2.6.0
Normal 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
|
||||||
4
plugins/python-build/share/python-build/2.6.1
Normal file
4
plugins/python-build/share/python-build/2.6.1
Normal 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
|
||||||
4
plugins/python-build/share/python-build/2.6.2
Normal file
4
plugins/python-build/share/python-build/2.6.2
Normal 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
|
||||||
4
plugins/python-build/share/python-build/2.6.3
Normal file
4
plugins/python-build/share/python-build/2.6.3
Normal 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
|
||||||
4
plugins/python-build/share/python-build/2.6.4
Normal file
4
plugins/python-build/share/python-build/2.6.4
Normal 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
|
||||||
4
plugins/python-build/share/python-build/2.6.5
Normal file
4
plugins/python-build/share/python-build/2.6.5
Normal 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
|
||||||
@@ -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 "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_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
|
if has_tar_xz_support; then
|
||||||
install_package "Python-3.10.0rc1" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0rc1.tar.xz#797061692282d0e573a0093476e57e39cf52cad56782ab2dfb79afadb3c1e638" 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
|
else
|
||||||
install_package "Python-3.10.0rc1" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0rc1.tgz#b7efa6edd72bfeae57295f1ccc7c38c9ede8087f9f082382f16f92aa38f684d3" 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
|
fi
|
||||||
10
plugins/python-build/share/python-build/3.6.15
Normal file
10
plugins/python-build/share/python-build/3.6.15
Normal 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
|
||||||
10
plugins/python-build/share/python-build/3.7.12
Normal file
10
plugins/python-build/share/python-build/3.7.12
Normal 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
|
||||||
@@ -3,4 +3,4 @@ prefer_openssl11
|
|||||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
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 "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_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
|
||||||
|
|||||||
@@ -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 "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_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
|
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
|
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
|
fi
|
||||||
|
|||||||
@@ -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 "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
|
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
|
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" standard verify_py38 copy_python_gdb ensurepip
|
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
|
else
|
||||||
install_package "Python-3.8.11" "https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tgz#b77464ea80cec14581b86aeb7fb2ff02830e0abc7bcdc752b7b4bdfcd8f3e393" standard verify_py38 copy_python_gdb ensurepip
|
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
|
fi
|
||||||
|
|||||||
@@ -3,4 +3,4 @@ prefer_openssl11
|
|||||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
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 "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_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
|
||||||
|
|||||||
@@ -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 "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_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
|
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
|
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
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -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 "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
|
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
|
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
|
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
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -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 "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_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
|
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
|
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
|
fi
|
||||||
|
|||||||
@@ -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 "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_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
|
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
|
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
|
fi
|
||||||
|
|||||||
@@ -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 "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
|
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
|
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" standard verify_py39 copy_python_gdb ensurepip
|
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
|
else
|
||||||
install_package "Python-3.9.6" "https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz#d0a35182e19e416fc8eae25a3dcd4d02d4997333e4ad1f2eee6010aadc3fe866" standard verify_py39 copy_python_gdb ensurepip
|
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
|
fi
|
||||||
|
|||||||
@@ -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')
|
||||||
@@ -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
|
||||||
@@ -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)
|
||||||
@@ -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",
|
||||||
@@ -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')
|
||||||
@@ -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
|
||||||
@@ -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)
|
||||||
@@ -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",
|
||||||
@@ -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')
|
||||||
@@ -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
|
||||||
@@ -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)
|
||||||
@@ -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",
|
||||||
@@ -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')
|
||||||
@@ -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
|
||||||
@@ -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)
|
||||||
@@ -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",
|
||||||
@@ -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')
|
||||||
@@ -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
|
||||||
@@ -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)
|
||||||
@@ -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",
|
||||||
@@ -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')
|
||||||
@@ -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
|
||||||
@@ -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)
|
||||||
@@ -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",
|
||||||
@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -44,4 +44,20 @@ diff -r -u setup.py setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -43,3 +43,13 @@ diff -r -u ../Python-3.1/setup.py ./setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -43,3 +43,13 @@ diff -r -u ../Python-3.1/setup.py ./setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -43,3 +43,13 @@ diff -r -u ../Python-3.1/setup.py ./setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -44,4 +44,13 @@ diff -r -u setup.py setup.py
|
|||||||
|
|
||||||
# Add paths specified in the environment variables LDFLAGS and
|
# Add paths specified in the environment variables LDFLAGS and
|
||||||
# CPPFLAGS for header and library files.
|
# 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')
|
||||||
|
|||||||
@@ -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')
|
||||||
@@ -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')
|
||||||
@@ -165,7 +165,7 @@ OUT
|
|||||||
|
|
||||||
stub uname '-s : echo Linux'
|
stub uname '-s : echo Linux'
|
||||||
stub uname '-s : echo Darwin'
|
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
|
stub_make_install
|
||||||
|
|
||||||
install_fixture definitions/needs-yaml
|
install_fixture definitions/needs-yaml
|
||||||
@@ -192,7 +192,7 @@ OUT
|
|||||||
# pyenv/pyenv#1026
|
# pyenv/pyenv#1026
|
||||||
stub uname false false
|
stub uname false false
|
||||||
|
|
||||||
stub brew "--prefix readline : echo '$readline_libdir'"
|
stub brew false "--prefix readline : echo '$readline_libdir'"
|
||||||
stub_make_install
|
stub_make_install
|
||||||
|
|
||||||
run_inline_definition <<DEF
|
run_inline_definition <<DEF
|
||||||
@@ -222,7 +222,7 @@ OUT
|
|||||||
# pyenv/pyenv#1026
|
# pyenv/pyenv#1026
|
||||||
stub uname false false
|
stub uname false false
|
||||||
|
|
||||||
stub brew
|
stub brew false
|
||||||
stub_make_install
|
stub_make_install
|
||||||
|
|
||||||
export PYTHON_CONFIGURE_OPTS="CPPFLAGS=-I$readline_libdir/include LDFLAGS=-L$readline_libdir/lib"
|
export PYTHON_CONFIGURE_OPTS="CPPFLAGS=-I$readline_libdir/include LDFLAGS=-L$readline_libdir/lib"
|
||||||
@@ -242,6 +242,68 @@ make install
|
|||||||
OUT
|
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" {
|
@test "number of CPU cores defaults to 2" {
|
||||||
cached_tarball "Python-3.6.2"
|
cached_tarball "Python-3.6.2"
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ OUT
|
|||||||
@test "fish instructions" {
|
@test "fish instructions" {
|
||||||
run pyenv-init fish
|
run pyenv-init fish
|
||||||
assert [ "$status" -eq 1 ]
|
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" {
|
@test "option to skip rehash" {
|
||||||
|
|||||||
@@ -24,6 +24,15 @@ load test_helper
|
|||||||
assert_success "$PYENV_TEST_DIR"
|
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 /" {
|
@test "prefix for system in /" {
|
||||||
mkdir -p "${BATS_TEST_DIRNAME}/libexec"
|
mkdir -p "${BATS_TEST_DIRNAME}/libexec"
|
||||||
cat >"${BATS_TEST_DIRNAME}/libexec/pyenv-which" <<OUT
|
cat >"${BATS_TEST_DIRNAME}/libexec/pyenv-which" <<OUT
|
||||||
|
|||||||
Reference in New Issue
Block a user